diff --git a/.env.example b/.env.example index 4ffeb0b1..93fe7359 100644 --- a/.env.example +++ b/.env.example @@ -1,19 +1,19 @@ -AUTH0_BASE_URL='http://dev.local:3000' -AUTH0_CLIENT_ID='Your client ID' -AUTH0_CLIENT_SECRET='Your client secret' -AUTH0_ISSUER_BASE_URL='https://shape-docs-dev.eu.auth0.com' -AUTH0_MANAGEMENT_CLIENT_ID='Your client ID' -AUTH0_MANAGEMENT_CLIENT_SECRET='Your client secret' -AUTH0_MANAGEMENT_DOMAIN='shape-docs-dev.eu.auth0.com' -AUTH0_SECRET='use [openssl rand -hex 32] to generate a 32 bytes value' +SHAPE_DOCS_BASE_URL=http://localhost:3000 +SHAPE_DOCS_PROJECT_CONFIGURATION_FILENAME=.shape-docs.yml +NEXT_PUBLIC_SHAPE_DOCS_TITLE=Shape Docs +NEXT_PUBLIC_SHAPE_DOCS_DESCRIPTION=Documentation for Shape's APIs +NEXTAUTH_URL_INTERNAL=http://localhost:3000 +NEXTAUTH_SECRET=use [openssl rand -base64 32] to generate a 32 bytes value +REDIS_URL=localhost +POSTGRESQL_HOST=localhost +POSTGRESQL_USER=dbuser +POSTGRESQL_PASSWORD= +POSTGRESQL_DB=db +REPOSITORY_NAME_SUFFIX=-openapi +GITHUB_WEBHOOK_SECRET=preshared secret also put in app configuration in GitHub +GITHUB_WEBHOK_REPOSITORY_ALLOWLIST= +GITHUB_WEBHOK_REPOSITORY_DISALLOWLIST= +GITHUB_CLIENT_ID=GitHub App client ID +GITHUB_CLIENT_SECRET=GitHub App client secret GITHUB_APP_ID=123456 -GITHUB_CLIENT_ID='GitHub App client ID' -GITHUB_CLIENT_SECRET='GitHub App client secret' -GITHUB_ORGANIZATION_NAME='shapehq' -GITHUB_PRIVATE_KEY_BASE_64='base 64 encoded version of the private key' -GITHUB_WEBHOK_REPOSITORY_ALLOWLIST='' -GITHUB_WEBHOK_REPOSITORY_DISALLOWLIST='' -GITHUB_WEBHOOK_SECRET='preshared secret also put in app conf in GitHub' -NEXT_PUBLIC_SHAPE_DOCS_TITLE='Shape Docs' -REDIS_URL='' -SHAPE_DOCS_BASE_URL='https://docs.shapetools.io' \ No newline at end of file +GITHUB_PRIVATE_KEY_BASE_64=base 64 encoded version of the private key - see README.md for more info diff --git a/.github/actions/invite-user/action.yml b/.github/actions/invite-user/action.yml deleted file mode 100644 index 35bd6095..00000000 --- a/.github/actions/invite-user/action.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: Invites User -description: Invites a user to Shape Docs. -inputs: - name: - description: The name of the user. - required: true - email: - description: The e-mail of the user to invite. - required: true - roles: - description: Comma-separated list of roles to assign to the user. - required: true -runs: - using: node20 - main: dist/index.js diff --git a/.github/actions/invite-user/dist/index.js b/.github/actions/invite-user/dist/index.js deleted file mode 100644 index 80c24870..00000000 --- a/.github/actions/invite-user/dist/index.js +++ /dev/null @@ -1,16 +0,0 @@ -(()=>{var __webpack_modules__={3658:function(e,t){"use strict";var n=this&&this.__awaiter||function(e,t,n,s){function adopt(e){return e instanceof n?e:new n((function(t){t(e)}))}return new(n||(n=Promise))((function(n,i){function fulfilled(e){try{step(s.next(e))}catch(e){i(e)}}function rejected(e){try{step(s["throw"](e))}catch(e){i(e)}}function step(e){e.done?n(e.value):adopt(e.value).then(fulfilled,rejected)}step((s=s.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:true});class Action{constructor(e){this.stateStore=e.stateStore;this.logger=e.logger;this.userClient=e.userClient;this.passwordGenerator=e.passwordGenerator;this.roleNameParser=e.roleNameParser}run(e){return n(this,void 0,void 0,(function*(){if(!this.stateStore.isPost){yield this.runMain(e);this.stateStore.isPost=true}}))}runMain(e){return n(this,void 0,void 0,(function*(){if(!e.name||e.name.length==0){throw new Error("No name supplied.")}if(!e.email||e.email.length==0){throw new Error("No e-mail supplied.")}if(!e.roles||e.roles.length==0){throw new Error("No roles supplied.")}const t=this.roleNameParser.parse(e.roles);if(t.length==0){throw new Error("No roles supplied.")}const n=yield this.userClient.getUser({email:e.email});let s=n;if(!n){const t=this.passwordGenerator.generatePassword();const n=yield this.userClient.createUser({name:e.name,email:e.email,password:t});s=n}if(!s){throw new Error("Could not get an existing user or create a new user.")}const i=yield this.userClient.createRoles({roleNames:t});if(i.length==0){throw new Error("Received an empty set of roles.")}const r=i.map((e=>e.id));yield this.userClient.assignRolesToUser({userID:s.id,roleIDs:r});if(!n){yield this.userClient.sendChangePasswordEmail({email:s.email});this.logger.log(`${e.name} (${s.email}) has been invited.`)}else{this.logger.log(`${e.name} (${s.email}) has been updated.`)}}))}}t["default"]=Action},8245:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});const o=r(n(2186));class Logger{log(e){console.log(e)}error(e){o.setFailed(e)}}t["default"]=Logger},2127:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});class PasswordGenerator{generatePassword(){let e="";const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@#$";const n=18;for(let s=1;s<=n;s++){const n=Math.floor(Math.random()*t.length+1);e+=t.charAt(n)}return e}}t["default"]=PasswordGenerator},3834:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});class RoleNameParser{parse(e){return e.split(",").map((e=>e.trim().toLowerCase())).filter((e=>e.length>0))}}t["default"]=RoleNameParser},9531:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const n={IS_POST:"isPost"};class KeyValueStateStore{constructor(e){this.writerReader=e;this.isPost=false}get isPost(){return!!this.writerReader.getState(n.IS_POST)}set isPost(e){this.writerReader.saveState(n.IS_POST,e)}}t["default"]=KeyValueStateStore},1485:function(e,t,n){"use strict";var s=this&&this.__awaiter||function(e,t,n,s){function adopt(e){return e instanceof n?e:new n((function(t){t(e)}))}return new(n||(n=Promise))((function(n,i){function fulfilled(e){try{step(s.next(e))}catch(e){i(e)}}function rejected(e){try{step(s["throw"](e))}catch(e){i(e)}}function step(e){e.done?n(e.value):adopt(e.value).then(fulfilled,rejected)}step((s=s.apply(e,t||[])).next())}))};var i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:true});const r=i(n(8757));const o=n(4712);class Auth0UserClient{constructor(e){this.config=e;this.managementClient=new o.ManagementClient({domain:e.domain,clientId:e.clientId,clientSecret:e.clientSecret})}getUser(e){return s(this,void 0,void 0,(function*(){const t=yield this.managementClient.usersByEmail.getByEmail({email:e.email});if(t.data.length==0){return null}const n=t.data[0];return{id:n.user_id,email:n.email}}))}createUser(e){return s(this,void 0,void 0,(function*(){const t=yield this.managementClient.users.create({connection:"Username-Password-Authentication",name:e.name,email:e.email,email_verified:true,password:e.password,app_metadata:{has_pending_invitation:true}});return{id:t.data.user_id,email:t.data.email}}))}createRoles(e){return s(this,void 0,void 0,(function*(){const t=yield this.managementClient.roles.getAll();const n=t.data;const s=n.filter((t=>e.roleNames.includes(t.name))).map((e=>({id:e.id,name:e.name})));const i=e.roleNames.filter((e=>{const t=s.find((t=>t.name==e));return t==null}));const r=yield Promise.all(i.map((e=>this.managementClient.roles.create({name:e}))));const o=r.map((e=>({id:e.data.id,name:e.data.name})));return s.concat(o)}))}assignRolesToUser(e){return s(this,void 0,void 0,(function*(){yield this.managementClient.users.assignRoles({id:e.userID},{roles:e.roleIDs})}))}sendChangePasswordEmail(e){return s(this,void 0,void 0,(function*(){const t=yield this.getToken();yield r.default.post(this.getURL("/dbconnections/change_password"),{email:e.email,connection:"Username-Password-Authentication"},{headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"}})}))}getToken(){return s(this,void 0,void 0,(function*(){const e=yield r.default.post(this.getURL("/oauth/token"),{grant_type:"client_credentials",client_id:this.config.clientId,client_secret:this.config.clientSecret,audience:`https://${this.config.domain}/api/v2/`},{headers:{"Content-Type":"application/x-www-form-urlencoded"}});return e.data.access_token}))}getURL(e){return`https://${this.config.domain}${e}`}}t["default"]=Auth0UserClient},8873:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});const o=r(n(2186));function getOptions(){return{name:o.getInput("name"),email:o.getInput("email"),roles:o.getInput("roles")}}t["default"]=getOptions},4822:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:true});const A=r(n(2186));const a=o(n(3658));const c=o(n(1485));const u=o(n(8873));const l=o(n(8245));const d=o(n(9531));const p=o(n(2127));const g=o(n(3834));const{AUTH0_MANAGEMENT_CLIENT_ID:h,AUTH0_MANAGEMENT_CLIENT_SECRET:f,AUTH0_MANAGEMENT_CLIENT_DOMAIN:E}=process.env;if(!h||h.length==0){throw new Error("AUTH0_MANAGEMENT_CLIENT_ID environment variable not set.")}else if(!f||f.length==0){throw new Error("AUTH0_MANAGEMENT_CLIENT_ID environment variable not set.")}else if(!E||E.length==0){throw new Error("AUTH0_MANAGEMENT_CLIENT_ID environment variable not set.")}const m=new d.default(A);const C=new l.default;const Q=new c.default({clientId:h,clientSecret:f,domain:E});const I=new p.default;const B=new g.default;const y=new a.default({stateStore:m,logger:C,userClient:Q,passwordGenerator:I,roleNameParser:B});y.run((0,u.default)()).catch((e=>{C.error(e.toString())}))},7351:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;Object.defineProperty(e,s,{enumerable:true,get:function(){return t[n]}})}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.issue=t.issueCommand=void 0;const o=r(n(2037));const A=n(5278);function issueCommand(e,t,n){const s=new Command(e,t,n);process.stdout.write(s.toString()+o.EOL)}t.issueCommand=issueCommand;function issue(e,t=""){issueCommand(e,{},t)}t.issue=issue;const a="::";class Command{constructor(e,t,n){if(!e){e="missing.command"}this.command=e;this.properties=t;this.message=n}toString(){let e=a+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let t=true;for(const n in this.properties){if(this.properties.hasOwnProperty(n)){const s=this.properties[n];if(s){if(t){t=false}else{e+=","}e+=`${n}=${escapeProperty(s)}`}}}}e+=`${a}${escapeData(this.message)}`;return e}}function escapeData(e){return A.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function escapeProperty(e){return A.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}},2186:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;Object.defineProperty(e,s,{enumerable:true,get:function(){return t[n]}})}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};var o=this&&this.__awaiter||function(e,t,n,s){function adopt(e){return e instanceof n?e:new n((function(t){t(e)}))}return new(n||(n=Promise))((function(n,i){function fulfilled(e){try{step(s.next(e))}catch(e){i(e)}}function rejected(e){try{step(s["throw"](e))}catch(e){i(e)}}function step(e){e.done?n(e.value):adopt(e.value).then(fulfilled,rejected)}step((s=s.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:true});t.getIDToken=t.getState=t.saveState=t.group=t.endGroup=t.startGroup=t.info=t.notice=t.warning=t.error=t.debug=t.isDebug=t.setFailed=t.setCommandEcho=t.setOutput=t.getBooleanInput=t.getMultilineInput=t.getInput=t.addPath=t.setSecret=t.exportVariable=t.ExitCode=void 0;const A=n(7351);const a=n(717);const c=n(5278);const u=r(n(2037));const l=r(n(1017));const d=n(8041);var p;(function(e){e[e["Success"]=0]="Success";e[e["Failure"]=1]="Failure"})(p=t.ExitCode||(t.ExitCode={}));function exportVariable(e,t){const n=c.toCommandValue(t);process.env[e]=n;const s=process.env["GITHUB_ENV"]||"";if(s){return a.issueFileCommand("ENV",a.prepareKeyValueMessage(e,t))}A.issueCommand("set-env",{name:e},n)}t.exportVariable=exportVariable;function setSecret(e){A.issueCommand("add-mask",{},e)}t.setSecret=setSecret;function addPath(e){const t=process.env["GITHUB_PATH"]||"";if(t){a.issueFileCommand("PATH",e)}else{A.issueCommand("add-path",{},e)}process.env["PATH"]=`${e}${l.delimiter}${process.env["PATH"]}`}t.addPath=addPath;function getInput(e,t){const n=process.env[`INPUT_${e.replace(/ /g,"_").toUpperCase()}`]||"";if(t&&t.required&&!n){throw new Error(`Input required and not supplied: ${e}`)}if(t&&t.trimWhitespace===false){return n}return n.trim()}t.getInput=getInput;function getMultilineInput(e,t){const n=getInput(e,t).split("\n").filter((e=>e!==""));if(t&&t.trimWhitespace===false){return n}return n.map((e=>e.trim()))}t.getMultilineInput=getMultilineInput;function getBooleanInput(e,t){const n=["true","True","TRUE"];const s=["false","False","FALSE"];const i=getInput(e,t);if(n.includes(i))return true;if(s.includes(i))return false;throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${e}\n`+`Support boolean input list: \`true | True | TRUE | false | False | FALSE\``)}t.getBooleanInput=getBooleanInput;function setOutput(e,t){const n=process.env["GITHUB_OUTPUT"]||"";if(n){return a.issueFileCommand("OUTPUT",a.prepareKeyValueMessage(e,t))}process.stdout.write(u.EOL);A.issueCommand("set-output",{name:e},c.toCommandValue(t))}t.setOutput=setOutput;function setCommandEcho(e){A.issue("echo",e?"on":"off")}t.setCommandEcho=setCommandEcho;function setFailed(e){process.exitCode=p.Failure;error(e)}t.setFailed=setFailed;function isDebug(){return process.env["RUNNER_DEBUG"]==="1"}t.isDebug=isDebug;function debug(e){A.issueCommand("debug",{},e)}t.debug=debug;function error(e,t={}){A.issueCommand("error",c.toCommandProperties(t),e instanceof Error?e.toString():e)}t.error=error;function warning(e,t={}){A.issueCommand("warning",c.toCommandProperties(t),e instanceof Error?e.toString():e)}t.warning=warning;function notice(e,t={}){A.issueCommand("notice",c.toCommandProperties(t),e instanceof Error?e.toString():e)}t.notice=notice;function info(e){process.stdout.write(e+u.EOL)}t.info=info;function startGroup(e){A.issue("group",e)}t.startGroup=startGroup;function endGroup(){A.issue("endgroup")}t.endGroup=endGroup;function group(e,t){return o(this,void 0,void 0,(function*(){startGroup(e);let n;try{n=yield t()}finally{endGroup()}return n}))}t.group=group;function saveState(e,t){const n=process.env["GITHUB_STATE"]||"";if(n){return a.issueFileCommand("STATE",a.prepareKeyValueMessage(e,t))}A.issueCommand("save-state",{name:e},c.toCommandValue(t))}t.saveState=saveState;function getState(e){return process.env[`STATE_${e}`]||""}t.getState=getState;function getIDToken(e){return o(this,void 0,void 0,(function*(){return yield d.OidcClient.getIDToken(e)}))}t.getIDToken=getIDToken;var g=n(1327);Object.defineProperty(t,"summary",{enumerable:true,get:function(){return g.summary}});var h=n(1327);Object.defineProperty(t,"markdownSummary",{enumerable:true,get:function(){return h.markdownSummary}});var f=n(2981);Object.defineProperty(t,"toPosixPath",{enumerable:true,get:function(){return f.toPosixPath}});Object.defineProperty(t,"toWin32Path",{enumerable:true,get:function(){return f.toWin32Path}});Object.defineProperty(t,"toPlatformPath",{enumerable:true,get:function(){return f.toPlatformPath}})},717:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;Object.defineProperty(e,s,{enumerable:true,get:function(){return t[n]}})}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.prepareKeyValueMessage=t.issueFileCommand=void 0;const o=r(n(7147));const A=r(n(2037));const a=n(5840);const c=n(5278);function issueFileCommand(e,t){const n=process.env[`GITHUB_${e}`];if(!n){throw new Error(`Unable to find environment variable for file command ${e}`)}if(!o.existsSync(n)){throw new Error(`Missing file at path: ${n}`)}o.appendFileSync(n,`${c.toCommandValue(t)}${A.EOL}`,{encoding:"utf8"})}t.issueFileCommand=issueFileCommand;function prepareKeyValueMessage(e,t){const n=`ghadelimiter_${a.v4()}`;const s=c.toCommandValue(t);if(e.includes(n)){throw new Error(`Unexpected input: name should not contain the delimiter "${n}"`)}if(s.includes(n)){throw new Error(`Unexpected input: value should not contain the delimiter "${n}"`)}return`${e}<<${n}${A.EOL}${s}${A.EOL}${n}`}t.prepareKeyValueMessage=prepareKeyValueMessage},8041:function(e,t,n){"use strict";var s=this&&this.__awaiter||function(e,t,n,s){function adopt(e){return e instanceof n?e:new n((function(t){t(e)}))}return new(n||(n=Promise))((function(n,i){function fulfilled(e){try{step(s.next(e))}catch(e){i(e)}}function rejected(e){try{step(s["throw"](e))}catch(e){i(e)}}function step(e){e.done?n(e.value):adopt(e.value).then(fulfilled,rejected)}step((s=s.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:true});t.OidcClient=void 0;const i=n(6255);const r=n(5526);const o=n(2186);class OidcClient{static createHttpClient(e=true,t=10){const n={allowRetries:e,maxRetries:t};return new i.HttpClient("actions/oidc-client",[new r.BearerCredentialHandler(OidcClient.getRequestToken())],n)}static getRequestToken(){const e=process.env["ACTIONS_ID_TOKEN_REQUEST_TOKEN"];if(!e){throw new Error("Unable to get ACTIONS_ID_TOKEN_REQUEST_TOKEN env variable")}return e}static getIDTokenUrl(){const e=process.env["ACTIONS_ID_TOKEN_REQUEST_URL"];if(!e){throw new Error("Unable to get ACTIONS_ID_TOKEN_REQUEST_URL env variable")}return e}static getCall(e){var t;return s(this,void 0,void 0,(function*(){const n=OidcClient.createHttpClient();const s=yield n.getJson(e).catch((e=>{throw new Error(`Failed to get ID Token. \n \n Error Code : ${e.statusCode}\n \n Error Message: ${e.message}`)}));const i=(t=s.result)===null||t===void 0?void 0:t.value;if(!i){throw new Error("Response json body do not have ID Token field")}return i}))}static getIDToken(e){return s(this,void 0,void 0,(function*(){try{let t=OidcClient.getIDTokenUrl();if(e){const n=encodeURIComponent(e);t=`${t}&audience=${n}`}o.debug(`ID token url is ${t}`);const n=yield OidcClient.getCall(t);o.setSecret(n);return n}catch(e){throw new Error(`Error message: ${e.message}`)}}))}}t.OidcClient=OidcClient},2981:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;Object.defineProperty(e,s,{enumerable:true,get:function(){return t[n]}})}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.toPlatformPath=t.toWin32Path=t.toPosixPath=void 0;const o=r(n(1017));function toPosixPath(e){return e.replace(/[\\]/g,"/")}t.toPosixPath=toPosixPath;function toWin32Path(e){return e.replace(/[/]/g,"\\")}t.toWin32Path=toWin32Path;function toPlatformPath(e){return e.replace(/[/\\]/g,o.sep)}t.toPlatformPath=toPlatformPath},1327:function(e,t,n){"use strict";var s=this&&this.__awaiter||function(e,t,n,s){function adopt(e){return e instanceof n?e:new n((function(t){t(e)}))}return new(n||(n=Promise))((function(n,i){function fulfilled(e){try{step(s.next(e))}catch(e){i(e)}}function rejected(e){try{step(s["throw"](e))}catch(e){i(e)}}function step(e){e.done?n(e.value):adopt(e.value).then(fulfilled,rejected)}step((s=s.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:true});t.summary=t.markdownSummary=t.SUMMARY_DOCS_URL=t.SUMMARY_ENV_VAR=void 0;const i=n(2037);const r=n(7147);const{access:o,appendFile:A,writeFile:a}=r.promises;t.SUMMARY_ENV_VAR="GITHUB_STEP_SUMMARY";t.SUMMARY_DOCS_URL="https://docs.github.com/actions/using-workflows/workflow-commands-for-github-actions#adding-a-job-summary";class Summary{constructor(){this._buffer=""}filePath(){return s(this,void 0,void 0,(function*(){if(this._filePath){return this._filePath}const e=process.env[t.SUMMARY_ENV_VAR];if(!e){throw new Error(`Unable to find environment variable for $${t.SUMMARY_ENV_VAR}. Check if your runtime environment supports job summaries.`)}try{yield o(e,r.constants.R_OK|r.constants.W_OK)}catch(t){throw new Error(`Unable to access summary file: '${e}'. Check if the file has correct read/write permissions.`)}this._filePath=e;return this._filePath}))}wrap(e,t,n={}){const s=Object.entries(n).map((([e,t])=>` ${e}="${t}"`)).join("");if(!t){return`<${e}${s}>`}return`<${e}${s}>${t}`}write(e){return s(this,void 0,void 0,(function*(){const t=!!(e===null||e===void 0?void 0:e.overwrite);const n=yield this.filePath();const s=t?a:A;yield s(n,this._buffer,{encoding:"utf8"});return this.emptyBuffer()}))}clear(){return s(this,void 0,void 0,(function*(){return this.emptyBuffer().write({overwrite:true})}))}stringify(){return this._buffer}isEmptyBuffer(){return this._buffer.length===0}emptyBuffer(){this._buffer="";return this}addRaw(e,t=false){this._buffer+=e;return t?this.addEOL():this}addEOL(){return this.addRaw(i.EOL)}addCodeBlock(e,t){const n=Object.assign({},t&&{lang:t});const s=this.wrap("pre",this.wrap("code",e),n);return this.addRaw(s).addEOL()}addList(e,t=false){const n=t?"ol":"ul";const s=e.map((e=>this.wrap("li",e))).join("");const i=this.wrap(n,s);return this.addRaw(i).addEOL()}addTable(e){const t=e.map((e=>{const t=e.map((e=>{if(typeof e==="string"){return this.wrap("td",e)}const{header:t,data:n,colspan:s,rowspan:i}=e;const r=t?"th":"td";const o=Object.assign(Object.assign({},s&&{colspan:s}),i&&{rowspan:i});return this.wrap(r,n,o)})).join("");return this.wrap("tr",t)})).join("");const n=this.wrap("table",t);return this.addRaw(n).addEOL()}addDetails(e,t){const n=this.wrap("details",this.wrap("summary",e)+t);return this.addRaw(n).addEOL()}addImage(e,t,n){const{width:s,height:i}=n||{};const r=Object.assign(Object.assign({},s&&{width:s}),i&&{height:i});const o=this.wrap("img",null,Object.assign({src:e,alt:t},r));return this.addRaw(o).addEOL()}addHeading(e,t){const n=`h${t}`;const s=["h1","h2","h3","h4","h5","h6"].includes(n)?n:"h1";const i=this.wrap(s,e);return this.addRaw(i).addEOL()}addSeparator(){const e=this.wrap("hr",null);return this.addRaw(e).addEOL()}addBreak(){const e=this.wrap("br",null);return this.addRaw(e).addEOL()}addQuote(e,t){const n=Object.assign({},t&&{cite:t});const s=this.wrap("blockquote",e,n);return this.addRaw(s).addEOL()}addLink(e,t){const n=this.wrap("a",e,{href:t});return this.addRaw(n).addEOL()}}const c=new Summary;t.markdownSummary=c;t.summary=c},5278:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.toCommandProperties=t.toCommandValue=void 0;function toCommandValue(e){if(e===null||e===undefined){return""}else if(typeof e==="string"||e instanceof String){return e}return JSON.stringify(e)}t.toCommandValue=toCommandValue;function toCommandProperties(e){if(!Object.keys(e).length){return{}}return{title:e.title,file:e.file,line:e.startLine,endLine:e.endLine,col:e.startColumn,endColumn:e.endColumn}}t.toCommandProperties=toCommandProperties},5526:function(e,t){"use strict";var n=this&&this.__awaiter||function(e,t,n,s){function adopt(e){return e instanceof n?e:new n((function(t){t(e)}))}return new(n||(n=Promise))((function(n,i){function fulfilled(e){try{step(s.next(e))}catch(e){i(e)}}function rejected(e){try{step(s["throw"](e))}catch(e){i(e)}}function step(e){e.done?n(e.value):adopt(e.value).then(fulfilled,rejected)}step((s=s.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:true});t.PersonalAccessTokenCredentialHandler=t.BearerCredentialHandler=t.BasicCredentialHandler=void 0;class BasicCredentialHandler{constructor(e,t){this.username=e;this.password=t}prepareRequest(e){if(!e.headers){throw Error("The request has no headers")}e.headers["Authorization"]=`Basic ${Buffer.from(`${this.username}:${this.password}`).toString("base64")}`}canHandleAuthentication(){return false}handleAuthentication(){return n(this,void 0,void 0,(function*(){throw new Error("not implemented")}))}}t.BasicCredentialHandler=BasicCredentialHandler;class BearerCredentialHandler{constructor(e){this.token=e}prepareRequest(e){if(!e.headers){throw Error("The request has no headers")}e.headers["Authorization"]=`Bearer ${this.token}`}canHandleAuthentication(){return false}handleAuthentication(){return n(this,void 0,void 0,(function*(){throw new Error("not implemented")}))}}t.BearerCredentialHandler=BearerCredentialHandler;class PersonalAccessTokenCredentialHandler{constructor(e){this.token=e}prepareRequest(e){if(!e.headers){throw Error("The request has no headers")}e.headers["Authorization"]=`Basic ${Buffer.from(`PAT:${this.token}`).toString("base64")}`}canHandleAuthentication(){return false}handleAuthentication(){return n(this,void 0,void 0,(function*(){throw new Error("not implemented")}))}}t.PersonalAccessTokenCredentialHandler=PersonalAccessTokenCredentialHandler},6255:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};var o=this&&this.__awaiter||function(e,t,n,s){function adopt(e){return e instanceof n?e:new n((function(t){t(e)}))}return new(n||(n=Promise))((function(n,i){function fulfilled(e){try{step(s.next(e))}catch(e){i(e)}}function rejected(e){try{step(s["throw"](e))}catch(e){i(e)}}function step(e){e.done?n(e.value):adopt(e.value).then(fulfilled,rejected)}step((s=s.apply(e,t||[])).next())}))};Object.defineProperty(t,"__esModule",{value:true});t.HttpClient=t.isHttps=t.HttpClientResponse=t.HttpClientError=t.getProxyUrl=t.MediaTypes=t.Headers=t.HttpCodes=void 0;const A=r(n(3685));const a=r(n(5687));const c=r(n(9835));const u=r(n(4294));const l=n(1773);var d;(function(e){e[e["OK"]=200]="OK";e[e["MultipleChoices"]=300]="MultipleChoices";e[e["MovedPermanently"]=301]="MovedPermanently";e[e["ResourceMoved"]=302]="ResourceMoved";e[e["SeeOther"]=303]="SeeOther";e[e["NotModified"]=304]="NotModified";e[e["UseProxy"]=305]="UseProxy";e[e["SwitchProxy"]=306]="SwitchProxy";e[e["TemporaryRedirect"]=307]="TemporaryRedirect";e[e["PermanentRedirect"]=308]="PermanentRedirect";e[e["BadRequest"]=400]="BadRequest";e[e["Unauthorized"]=401]="Unauthorized";e[e["PaymentRequired"]=402]="PaymentRequired";e[e["Forbidden"]=403]="Forbidden";e[e["NotFound"]=404]="NotFound";e[e["MethodNotAllowed"]=405]="MethodNotAllowed";e[e["NotAcceptable"]=406]="NotAcceptable";e[e["ProxyAuthenticationRequired"]=407]="ProxyAuthenticationRequired";e[e["RequestTimeout"]=408]="RequestTimeout";e[e["Conflict"]=409]="Conflict";e[e["Gone"]=410]="Gone";e[e["TooManyRequests"]=429]="TooManyRequests";e[e["InternalServerError"]=500]="InternalServerError";e[e["NotImplemented"]=501]="NotImplemented";e[e["BadGateway"]=502]="BadGateway";e[e["ServiceUnavailable"]=503]="ServiceUnavailable";e[e["GatewayTimeout"]=504]="GatewayTimeout"})(d||(t.HttpCodes=d={}));var p;(function(e){e["Accept"]="accept";e["ContentType"]="content-type"})(p||(t.Headers=p={}));var g;(function(e){e["ApplicationJson"]="application/json"})(g||(t.MediaTypes=g={}));function getProxyUrl(e){const t=c.getProxyUrl(new URL(e));return t?t.href:""}t.getProxyUrl=getProxyUrl;const h=[d.MovedPermanently,d.ResourceMoved,d.SeeOther,d.TemporaryRedirect,d.PermanentRedirect];const f=[d.BadGateway,d.ServiceUnavailable,d.GatewayTimeout];const E=["OPTIONS","GET","DELETE","HEAD"];const m=10;const C=5;class HttpClientError extends Error{constructor(e,t){super(e);this.name="HttpClientError";this.statusCode=t;Object.setPrototypeOf(this,HttpClientError.prototype)}}t.HttpClientError=HttpClientError;class HttpClientResponse{constructor(e){this.message=e}readBody(){return o(this,void 0,void 0,(function*(){return new Promise((e=>o(this,void 0,void 0,(function*(){let t=Buffer.alloc(0);this.message.on("data",(e=>{t=Buffer.concat([t,e])}));this.message.on("end",(()=>{e(t.toString())}))}))))}))}readBodyBuffer(){return o(this,void 0,void 0,(function*(){return new Promise((e=>o(this,void 0,void 0,(function*(){const t=[];this.message.on("data",(e=>{t.push(e)}));this.message.on("end",(()=>{e(Buffer.concat(t))}))}))))}))}}t.HttpClientResponse=HttpClientResponse;function isHttps(e){const t=new URL(e);return t.protocol==="https:"}t.isHttps=isHttps;class HttpClient{constructor(e,t,n){this._ignoreSslError=false;this._allowRedirects=true;this._allowRedirectDowngrade=false;this._maxRedirects=50;this._allowRetries=false;this._maxRetries=1;this._keepAlive=false;this._disposed=false;this.userAgent=e;this.handlers=t||[];this.requestOptions=n;if(n){if(n.ignoreSslError!=null){this._ignoreSslError=n.ignoreSslError}this._socketTimeout=n.socketTimeout;if(n.allowRedirects!=null){this._allowRedirects=n.allowRedirects}if(n.allowRedirectDowngrade!=null){this._allowRedirectDowngrade=n.allowRedirectDowngrade}if(n.maxRedirects!=null){this._maxRedirects=Math.max(n.maxRedirects,0)}if(n.keepAlive!=null){this._keepAlive=n.keepAlive}if(n.allowRetries!=null){this._allowRetries=n.allowRetries}if(n.maxRetries!=null){this._maxRetries=n.maxRetries}}}options(e,t){return o(this,void 0,void 0,(function*(){return this.request("OPTIONS",e,null,t||{})}))}get(e,t){return o(this,void 0,void 0,(function*(){return this.request("GET",e,null,t||{})}))}del(e,t){return o(this,void 0,void 0,(function*(){return this.request("DELETE",e,null,t||{})}))}post(e,t,n){return o(this,void 0,void 0,(function*(){return this.request("POST",e,t,n||{})}))}patch(e,t,n){return o(this,void 0,void 0,(function*(){return this.request("PATCH",e,t,n||{})}))}put(e,t,n){return o(this,void 0,void 0,(function*(){return this.request("PUT",e,t,n||{})}))}head(e,t){return o(this,void 0,void 0,(function*(){return this.request("HEAD",e,null,t||{})}))}sendStream(e,t,n,s){return o(this,void 0,void 0,(function*(){return this.request(e,t,n,s)}))}getJson(e,t={}){return o(this,void 0,void 0,(function*(){t[p.Accept]=this._getExistingOrDefaultHeader(t,p.Accept,g.ApplicationJson);const n=yield this.get(e,t);return this._processResponse(n,this.requestOptions)}))}postJson(e,t,n={}){return o(this,void 0,void 0,(function*(){const s=JSON.stringify(t,null,2);n[p.Accept]=this._getExistingOrDefaultHeader(n,p.Accept,g.ApplicationJson);n[p.ContentType]=this._getExistingOrDefaultHeader(n,p.ContentType,g.ApplicationJson);const i=yield this.post(e,s,n);return this._processResponse(i,this.requestOptions)}))}putJson(e,t,n={}){return o(this,void 0,void 0,(function*(){const s=JSON.stringify(t,null,2);n[p.Accept]=this._getExistingOrDefaultHeader(n,p.Accept,g.ApplicationJson);n[p.ContentType]=this._getExistingOrDefaultHeader(n,p.ContentType,g.ApplicationJson);const i=yield this.put(e,s,n);return this._processResponse(i,this.requestOptions)}))}patchJson(e,t,n={}){return o(this,void 0,void 0,(function*(){const s=JSON.stringify(t,null,2);n[p.Accept]=this._getExistingOrDefaultHeader(n,p.Accept,g.ApplicationJson);n[p.ContentType]=this._getExistingOrDefaultHeader(n,p.ContentType,g.ApplicationJson);const i=yield this.patch(e,s,n);return this._processResponse(i,this.requestOptions)}))}request(e,t,n,s){return o(this,void 0,void 0,(function*(){if(this._disposed){throw new Error("Client has already been disposed.")}const i=new URL(t);let r=this._prepareRequest(e,i,s);const o=this._allowRetries&&E.includes(e)?this._maxRetries+1:1;let A=0;let a;do{a=yield this.requestRaw(r,n);if(a&&a.message&&a.message.statusCode===d.Unauthorized){let e;for(const t of this.handlers){if(t.canHandleAuthentication(a)){e=t;break}}if(e){return e.handleAuthentication(this,r,n)}else{return a}}let t=this._maxRedirects;while(a.message.statusCode&&h.includes(a.message.statusCode)&&this._allowRedirects&&t>0){const o=a.message.headers["location"];if(!o){break}const A=new URL(o);if(i.protocol==="https:"&&i.protocol!==A.protocol&&!this._allowRedirectDowngrade){throw new Error("Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.")}yield a.readBody();if(A.hostname!==i.hostname){for(const e in s){if(e.toLowerCase()==="authorization"){delete s[e]}}}r=this._prepareRequest(e,A,s);a=yield this.requestRaw(r,n);t--}if(!a.message.statusCode||!f.includes(a.message.statusCode)){return a}A+=1;if(A{function callbackForResult(e,t){if(e){s(e)}else if(!t){s(new Error("Unknown error"))}else{n(t)}}this.requestRawWithCallback(e,t,callbackForResult)}))}))}requestRawWithCallback(e,t,n){if(typeof t==="string"){if(!e.options.headers){e.options.headers={}}e.options.headers["Content-Length"]=Buffer.byteLength(t,"utf8")}let s=false;function handleResult(e,t){if(!s){s=true;n(e,t)}}const i=e.httpModule.request(e.options,(e=>{const t=new HttpClientResponse(e);handleResult(undefined,t)}));let r;i.on("socket",(e=>{r=e}));i.setTimeout(this._socketTimeout||3*6e4,(()=>{if(r){r.end()}handleResult(new Error(`Request timeout: ${e.options.path}`))}));i.on("error",(function(e){handleResult(e)}));if(t&&typeof t==="string"){i.write(t,"utf8")}if(t&&typeof t!=="string"){t.on("close",(function(){i.end()}));t.pipe(i)}else{i.end()}}getAgent(e){const t=new URL(e);return this._getAgent(t)}getAgentDispatcher(e){const t=new URL(e);const n=c.getProxyUrl(t);const s=n&&n.hostname;if(!s){return}return this._getProxyAgentDispatcher(t,n)}_prepareRequest(e,t,n){const s={};s.parsedUrl=t;const i=s.parsedUrl.protocol==="https:";s.httpModule=i?a:A;const r=i?443:80;s.options={};s.options.host=s.parsedUrl.hostname;s.options.port=s.parsedUrl.port?parseInt(s.parsedUrl.port):r;s.options.path=(s.parsedUrl.pathname||"")+(s.parsedUrl.search||"");s.options.method=e;s.options.headers=this._mergeHeaders(n);if(this.userAgent!=null){s.options.headers["user-agent"]=this.userAgent}s.options.agent=this._getAgent(s.parsedUrl);if(this.handlers){for(const e of this.handlers){e.prepareRequest(s.options)}}return s}_mergeHeaders(e){if(this.requestOptions&&this.requestOptions.headers){return Object.assign({},lowercaseKeys(this.requestOptions.headers),lowercaseKeys(e||{}))}return lowercaseKeys(e||{})}_getExistingOrDefaultHeader(e,t,n){let s;if(this.requestOptions&&this.requestOptions.headers){s=lowercaseKeys(this.requestOptions.headers)[t]}return e[t]||s||n}_getAgent(e){let t;const n=c.getProxyUrl(e);const s=n&&n.hostname;if(this._keepAlive&&s){t=this._proxyAgent}if(this._keepAlive&&!s){t=this._agent}if(t){return t}const i=e.protocol==="https:";let r=100;if(this.requestOptions){r=this.requestOptions.maxSockets||A.globalAgent.maxSockets}if(n&&n.hostname){const e={maxSockets:r,keepAlive:this._keepAlive,proxy:Object.assign(Object.assign({},(n.username||n.password)&&{proxyAuth:`${n.username}:${n.password}`}),{host:n.hostname,port:n.port})};let s;const o=n.protocol==="https:";if(i){s=o?u.httpsOverHttps:u.httpsOverHttp}else{s=o?u.httpOverHttps:u.httpOverHttp}t=s(e);this._proxyAgent=t}if(this._keepAlive&&!t){const e={keepAlive:this._keepAlive,maxSockets:r};t=i?new a.Agent(e):new A.Agent(e);this._agent=t}if(!t){t=i?a.globalAgent:A.globalAgent}if(i&&this._ignoreSslError){t.options=Object.assign(t.options||{},{rejectUnauthorized:false})}return t}_getProxyAgentDispatcher(e,t){let n;if(this._keepAlive){n=this._proxyAgentDispatcher}if(n){return n}const s=e.protocol==="https:";n=new l.ProxyAgent(Object.assign({uri:t.href,pipelining:!this._keepAlive?0:1},(t.username||t.password)&&{token:`${t.username}:${t.password}`}));this._proxyAgentDispatcher=n;if(s&&this._ignoreSslError){n.options=Object.assign(n.options.requestTls||{},{rejectUnauthorized:false})}return n}_performExponentialBackoff(e){return o(this,void 0,void 0,(function*(){e=Math.min(m,e);const t=C*Math.pow(2,e);return new Promise((e=>setTimeout((()=>e()),t)))}))}_processResponse(e,t){return o(this,void 0,void 0,(function*(){return new Promise(((n,s)=>o(this,void 0,void 0,(function*(){const i=e.message.statusCode||0;const r={statusCode:i,result:null,headers:{}};if(i===d.NotFound){n(r)}function dateTimeDeserializer(e,t){if(typeof t==="string"){const e=new Date(t);if(!isNaN(e.valueOf())){return e}}return t}let o;let A;try{A=yield e.readBody();if(A&&A.length>0){if(t&&t.deserializeDates){o=JSON.parse(A,dateTimeDeserializer)}else{o=JSON.parse(A)}r.result=o}r.headers=e.message.headers}catch(e){}if(i>299){let e;if(o&&o.message){e=o.message}else if(A&&A.length>0){e=A}else{e=`Failed request: (${i})`}const t=new HttpClientError(e,i);t.result=r.result;s(t)}else{n(r)}}))))}))}}t.HttpClient=HttpClient;const lowercaseKeys=e=>Object.keys(e).reduce(((t,n)=>(t[n.toLowerCase()]=e[n],t)),{})},9835:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.checkBypass=t.getProxyUrl=void 0;function getProxyUrl(e){const t=e.protocol==="https:";if(checkBypass(e)){return undefined}const n=(()=>{if(t){return process.env["https_proxy"]||process.env["HTTPS_PROXY"]}else{return process.env["http_proxy"]||process.env["HTTP_PROXY"]}})();if(n){try{return new URL(n)}catch(e){if(!n.startsWith("http://")&&!n.startsWith("https://"))return new URL(`http://${n}`)}}else{return undefined}}t.getProxyUrl=getProxyUrl;function checkBypass(e){if(!e.hostname){return false}const t=e.hostname;if(isLoopbackAddress(t)){return true}const n=process.env["no_proxy"]||process.env["NO_PROXY"]||"";if(!n){return false}let s;if(e.port){s=Number(e.port)}else if(e.protocol==="http:"){s=80}else if(e.protocol==="https:"){s=443}const i=[e.hostname.toUpperCase()];if(typeof s==="number"){i.push(`${i[0]}:${s}`)}for(const e of n.split(",").map((e=>e.trim().toUpperCase())).filter((e=>e))){if(e==="*"||i.some((t=>t===e||t.endsWith(`.${e}`)||e.startsWith(".")&&t.endsWith(`${e}`)))){return true}}return false}t.checkBypass=checkBypass;function isLoopbackAddress(e){const t=e.toLowerCase();return t==="localhost"||t.startsWith("127.")||t.startsWith("[::1]")||t.startsWith("[0:0:0:0:0:0:0:1]")}},2856:(e,t,n)=>{"use strict";const s=n(4492).Writable;const i=n(7261).inherits;const r=n(8534);const o=n(8710);const A=n(333);const a=45;const c=Buffer.from("-");const u=Buffer.from("\r\n");const EMPTY_FN=function(){};function Dicer(e){if(!(this instanceof Dicer)){return new Dicer(e)}s.call(this,e);if(!e||!e.headerFirst&&typeof e.boundary!=="string"){throw new TypeError("Boundary required")}if(typeof e.boundary==="string"){this.setBoundary(e.boundary)}else{this._bparser=undefined}this._headerFirst=e.headerFirst;this._dashes=0;this._parts=0;this._finished=false;this._realFinish=false;this._isPreamble=true;this._justMatched=false;this._firstWrite=true;this._inHeader=true;this._part=undefined;this._cb=undefined;this._ignoreData=false;this._partOpts={highWaterMark:e.partHwm};this._pause=false;const t=this;this._hparser=new A(e);this._hparser.on("header",(function(e){t._inHeader=false;t._part.emit("header",e)}))}i(Dicer,s);Dicer.prototype.emit=function(e){if(e==="finish"&&!this._realFinish){if(!this._finished){const e=this;process.nextTick((function(){e.emit("error",new Error("Unexpected end of multipart data"));if(e._part&&!e._ignoreData){const t=e._isPreamble?"Preamble":"Part";e._part.emit("error",new Error(t+" terminated early due to unexpected end of multipart data"));e._part.push(null);process.nextTick((function(){e._realFinish=true;e.emit("finish");e._realFinish=false}));return}e._realFinish=true;e.emit("finish");e._realFinish=false}))}}else{s.prototype.emit.apply(this,arguments)}};Dicer.prototype._write=function(e,t,n){if(!this._hparser&&!this._bparser){return n()}if(this._headerFirst&&this._isPreamble){if(!this._part){this._part=new o(this._partOpts);if(this._events.preamble){this.emit("preamble",this._part)}else{this._ignore()}}const t=this._hparser.push(e);if(!this._inHeader&&t!==undefined&&t{"use strict";const s=n(5673).EventEmitter;const i=n(7261).inherits;const r=n(9692);const o=n(8534);const A=Buffer.from("\r\n\r\n");const a=/\r\n/g;const c=/^([^:]+):[ \t]?([\x00-\xFF]+)?$/;function HeaderParser(e){s.call(this);e=e||{};const t=this;this.nread=0;this.maxed=false;this.npairs=0;this.maxHeaderPairs=r(e,"maxHeaderPairs",2e3);this.maxHeaderSize=r(e,"maxHeaderSize",80*1024);this.buffer="";this.header={};this.finished=false;this.ss=new o(A);this.ss.on("info",(function(e,n,s,i){if(n&&!t.maxed){if(t.nread+i-s>=t.maxHeaderSize){i=t.maxHeaderSize-t.nread+s;t.nread=t.maxHeaderSize;t.maxed=true}else{t.nread+=i-s}t.buffer+=n.toString("binary",s,i)}if(e){t._finish()}}))}i(HeaderParser,s);HeaderParser.prototype.push=function(e){const t=this.ss.push(e);if(this.finished){return t}};HeaderParser.prototype.reset=function(){this.finished=false;this.buffer="";this.header={};this.ss.reset()};HeaderParser.prototype._finish=function(){if(this.buffer){this._parseHeader()}this.ss.matches=this.ss.maxMatches;const e=this.header;this.header={};this.buffer="";this.finished=true;this.nread=this.npairs=0;this.maxed=false;this.emit("header",e)};HeaderParser.prototype._parseHeader=function(){if(this.npairs===this.maxHeaderPairs){return}const e=this.buffer.split(a);const t=e.length;let n,s;for(var i=0;i{"use strict";const s=n(7261).inherits;const i=n(4492).Readable;function PartStream(e){i.call(this,e)}s(PartStream,i);PartStream.prototype._read=function(e){};e.exports=PartStream},8534:(e,t,n)=>{"use strict";const s=n(5673).EventEmitter;const i=n(7261).inherits;function SBMH(e){if(typeof e==="string"){e=Buffer.from(e)}if(!Buffer.isBuffer(e)){throw new TypeError("The needle has to be a String or a Buffer.")}const t=e.length;if(t===0){throw new Error("The needle cannot be an empty String/Buffer.")}if(t>256){throw new Error("The needle cannot have a length bigger than 256.")}this.maxMatches=Infinity;this.matches=0;this._occ=new Array(256).fill(t);this._lookbehind_size=0;this._needle=e;this._bufpos=0;this._lookbehind=Buffer.alloc(t);for(var n=0;n=0){this.emit("info",false,this._lookbehind,0,this._lookbehind_size);this._lookbehind_size=0}else{const n=this._lookbehind_size+r;if(n>0){this.emit("info",false,this._lookbehind,0,n)}this._lookbehind.copy(this._lookbehind,0,n,this._lookbehind_size-n);this._lookbehind_size-=n;e.copy(this._lookbehind,this._lookbehind_size);this._lookbehind_size+=t;this._bufpos=t;return t}}r+=(r>=0)*this._bufpos;if(e.indexOf(n,r)!==-1){r=e.indexOf(n,r);++this.matches;if(r>0){this.emit("info",true,e,this._bufpos,r)}else{this.emit("info",true)}return this._bufpos=r+s}else{r=t-s}while(r0){this.emit("info",false,e,this._bufpos,r{"use strict";const s=n(4492).Writable;const{inherits:i}=n(7261);const r=n(2856);const o=n(415);const A=n(6780);const a=n(4426);function Busboy(e){if(!(this instanceof Busboy)){return new Busboy(e)}if(typeof e!=="object"){throw new TypeError("Busboy expected an options-Object.")}if(typeof e.headers!=="object"){throw new TypeError("Busboy expected an options-Object with headers-attribute.")}if(typeof e.headers["content-type"]!=="string"){throw new TypeError("Missing Content-Type-header.")}const{headers:t,...n}=e;this.opts={autoDestroy:false,...n};s.call(this,this.opts);this._done=false;this._parser=this.getParserByHeaders(t);this._finished=false}i(Busboy,s);Busboy.prototype.emit=function(e){if(e==="finish"){if(!this._done){this._parser?.end();return}else if(this._finished){return}this._finished=true}s.prototype.emit.apply(this,arguments)};Busboy.prototype.getParserByHeaders=function(e){const t=a(e["content-type"]);const n={defCharset:this.opts.defCharset,fileHwm:this.opts.fileHwm,headers:e,highWaterMark:this.opts.highWaterMark,isPartAFile:this.opts.isPartAFile,limits:this.opts.limits,parsedConType:t,preservePath:this.opts.preservePath};if(o.detect.test(t[0])){return new o(this,n)}if(A.detect.test(t[0])){return new A(this,n)}throw new Error("Unsupported Content-Type.")};Busboy.prototype._write=function(e,t,n){this._parser.write(e,n)};e.exports=Busboy;e.exports["default"]=Busboy;e.exports.Busboy=Busboy;e.exports.Dicer=r},415:(e,t,n)=>{"use strict";const{Readable:s}=n(4492);const{inherits:i}=n(7261);const r=n(2856);const o=n(4426);const A=n(9136);const a=n(496);const c=n(9692);const u=/^boundary$/i;const l=/^form-data$/i;const d=/^charset$/i;const p=/^filename$/i;const g=/^name$/i;Multipart.detect=/^multipart\/form-data/i;function Multipart(e,t){let n;let s;const i=this;let h;const f=t.limits;const E=t.isPartAFile||((e,t,n)=>t==="application/octet-stream"||n!==undefined);const m=t.parsedConType||[];const C=t.defCharset||"utf8";const Q=t.preservePath;const I={highWaterMark:t.fileHwm};for(n=0,s=m.length;nR){i.parser.removeListener("part",onPart);i.parser.on("part",skipPart);e.hitPartsLimit=true;e.emit("partsLimit");return skipPart(t)}if(N){const e=N;e.emit("end");e.removeAllListeners("end")}t.on("header",(function(r){let c;let u;let h;let f;let m;let R;let v=0;if(r["content-type"]){h=o(r["content-type"][0]);if(h[0]){c=h[0].toLowerCase();for(n=0,s=h.length;ny){const s=y-v+e.length;if(s>0){n.push(e.slice(0,s))}n.truncated=true;n.bytesRead=y;t.removeAllListeners("data");n.emit("limit");return}else if(!n.push(e)){i._pause=true}n.bytesRead=v};F=function(){_=undefined;n.push(null)}}else{if(x===w){if(!e.hitFieldsLimit){e.hitFieldsLimit=true;e.emit("fieldsLimit")}return skipPart(t)}++x;++D;let n="";let s=false;N=t;k=function(e){if((v+=e.length)>B){const i=B-(v-e.length);n+=e.toString("binary",0,i);s=true;t.removeAllListeners("data")}else{n+=e.toString("binary")}};F=function(){N=undefined;if(n.length){n=A(n,"binary",f)}e.emit("field",u,n,false,s,m,c);--D;checkFinished()}}t._readableState.sync=false;t.on("data",k);t.on("end",F)})).on("error",(function(e){if(_){_.emit("error",e)}}))})).on("error",(function(t){e.emit("error",t)})).on("finish",(function(){F=true;checkFinished()}))}Multipart.prototype.write=function(e,t){const n=this.parser.write(e);if(n&&!this._pause){t()}else{this._needDrain=!n;this._cb=t}};Multipart.prototype.end=function(){const e=this;if(e.parser.writable){e.parser.end()}else if(!e._boy._done){process.nextTick((function(){e._boy._done=true;e._boy.emit("finish")}))}};function skipPart(e){e.resume()}function FileStream(e){s.call(this,e);this.bytesRead=0;this.truncated=false}i(FileStream,s);FileStream.prototype._read=function(e){};e.exports=Multipart},6780:(e,t,n)=>{"use strict";const s=n(9730);const i=n(9136);const r=n(9692);const o=/^charset$/i;UrlEncoded.detect=/^application\/x-www-form-urlencoded/i;function UrlEncoded(e,t){const n=t.limits;const i=t.parsedConType;this.boy=e;this.fieldSizeLimit=r(n,"fieldSize",1*1024*1024);this.fieldNameSizeLimit=r(n,"fieldNameSize",100);this.fieldsLimit=r(n,"fields",Infinity);let A;for(var a=0,c=i.length;ao){this._key+=this.decoder.write(e.toString("binary",o,n))}this._state="val";this._hitLimit=false;this._checkingBytes=true;this._val="";this._bytesVal=0;this._valTrunc=false;this.decoder.reset();o=n+1}else if(s!==undefined){++this._fields;let n;const r=this._keyTrunc;if(s>o){n=this._key+=this.decoder.write(e.toString("binary",o,s))}else{n=this._key}this._hitLimit=false;this._checkingBytes=true;this._key="";this._bytesKey=0;this._keyTrunc=false;this.decoder.reset();if(n.length){this.boy.emit("field",i(n,"binary",this.charset),"",r,false)}o=s+1;if(this._fields===this.fieldsLimit){return t()}}else if(this._hitLimit){if(r>o){this._key+=this.decoder.write(e.toString("binary",o,r))}o=r;if((this._bytesKey=this._key.length)===this.fieldNameSizeLimit){this._checkingBytes=false;this._keyTrunc=true}}else{if(oo){this._val+=this.decoder.write(e.toString("binary",o,s))}this.boy.emit("field",i(this._key,"binary",this.charset),i(this._val,"binary",this.charset),this._keyTrunc,this._valTrunc);this._state="key";this._hitLimit=false;this._checkingBytes=true;this._key="";this._bytesKey=0;this._keyTrunc=false;this.decoder.reset();o=s+1;if(this._fields===this.fieldsLimit){return t()}}else if(this._hitLimit){if(r>o){this._val+=this.decoder.write(e.toString("binary",o,r))}o=r;if(this._val===""&&this.fieldSizeLimit===0||(this._bytesVal=this._val.length)===this.fieldSizeLimit){this._checkingBytes=false;this._valTrunc=true}}else{if(o0){this.boy.emit("field",i(this._key,"binary",this.charset),"",this._keyTrunc,false)}else if(this._state==="val"){this.boy.emit("field",i(this._key,"binary",this.charset),i(this._val,"binary",this.charset),this._keyTrunc,this._valTrunc)}this.boy._done=true;this.boy.emit("finish")};e.exports=UrlEncoded},9730:e=>{"use strict";const t=/\+/g;const n=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];function Decoder(){this.buffer=undefined}Decoder.prototype.write=function(e){e=e.replace(t," ");let s="";let i=0;let r=0;const o=e.length;for(;ir){s+=e.substring(r,i);r=i}this.buffer="";++r}}if(r{"use strict";e.exports=function basename(e){if(typeof e!=="string"){return""}for(var t=e.length-1;t>=0;--t){switch(e.charCodeAt(t)){case 47:case 92:e=e.slice(t+1);return e===".."||e==="."?"":e}}return e===".."||e==="."?"":e}},9136:e=>{"use strict";const t=new TextDecoder("utf-8");const n=new Map([["utf-8",t],["utf8",t]]);function decodeText(e,t,s){if(e){if(n.has(s)){try{return n.get(s).decode(Buffer.from(e,t))}catch(e){}}else{try{n.set(s,new TextDecoder(s));return n.get(s).decode(Buffer.from(e,t))}catch(e){}}}return e}e.exports=decodeText},9692:e=>{"use strict";e.exports=function getLimit(e,t,n){if(!e||e[t]===undefined||e[t]===null){return n}if(typeof e[t]!=="number"||isNaN(e[t])){throw new TypeError("Limit "+t+" is not a valid number")}return e[t]}},4426:(e,t,n)=>{"use strict";const s=n(9136);const i=/%([a-fA-F0-9]{2})/g;function encodedReplacer(e,t){return String.fromCharCode(parseInt(t,16))}function parseParams(e){const t=[];let n="key";let r="";let o=false;let A=false;let a=0;let c="";for(var u=0,l=e.length;u{e.exports={parallel:n(8210),serial:n(445),serialOrdered:n(3578)}},1700:e=>{e.exports=abort;function abort(e){Object.keys(e.jobs).forEach(clean.bind(e));e.jobs={}}function clean(e){if(typeof this.jobs[e]=="function"){this.jobs[e]()}}},2794:(e,t,n)=>{var s=n(5295);e.exports=async;function async(e){var t=false;s((function(){t=true}));return function async_callback(n,i){if(t){e(n,i)}else{s((function nextTick_callback(){e(n,i)}))}}}},5295:e=>{e.exports=defer;function defer(e){var t=typeof setImmediate=="function"?setImmediate:typeof process=="object"&&typeof process.nextTick=="function"?process.nextTick:null;if(t){t(e)}else{setTimeout(e,0)}}},9023:(e,t,n)=>{var s=n(2794),i=n(1700);e.exports=iterate;function iterate(e,t,n,s){var r=n["keyedList"]?n["keyedList"][n.index]:n.index;n.jobs[r]=runJob(t,r,e[r],(function(e,t){if(!(r in n.jobs)){return}delete n.jobs[r];if(e){i(n)}else{n.results[r]=t}s(e,n.results)}))}function runJob(e,t,n,i){var r;if(e.length==2){r=e(n,s(i))}else{r=e(n,t,s(i))}return r}},2474:e=>{e.exports=state;function state(e,t){var n=!Array.isArray(e),s={index:0,keyedList:n||t?Object.keys(e):null,jobs:{},results:n?{}:[],size:n?Object.keys(e).length:e.length};if(t){s.keyedList.sort(n?t:function(n,s){return t(e[n],e[s])})}return s}},7942:(e,t,n)=>{var s=n(1700),i=n(2794);e.exports=terminator;function terminator(e){if(!Object.keys(this.jobs).length){return}this.index=this.size;s(this);i(e)(null,this.results)}},8210:(e,t,n)=>{var s=n(9023),i=n(2474),r=n(7942);e.exports=parallel;function parallel(e,t,n){var o=i(e);while(o.index<(o["keyedList"]||e).length){s(e,t,o,(function(e,t){if(e){n(e,t);return}if(Object.keys(o.jobs).length===0){n(null,o.results);return}}));o.index++}return r.bind(o,n)}},445:(e,t,n)=>{var s=n(3578);e.exports=serial;function serial(e,t,n){return s(e,t,null,n)}},3578:(e,t,n)=>{var s=n(9023),i=n(2474),r=n(7942);e.exports=serialOrdered;e.exports.ascending=ascending;e.exports.descending=descending;function serialOrdered(e,t,n,o){var A=i(e,n);s(e,t,A,(function iteratorHandler(n,i){if(n){o(n,i);return}A.index++;if(A.index<(A["keyedList"]||e).length){s(e,t,A,iteratorHandler);return}o(null,A.results)}));return r.bind(A,o)}function ascending(e,t){return et?1:0}function descending(e,t){return-1*ascending(e,t)}},6008:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});Object.defineProperty(t,"NIL",{enumerable:true,get:function(){return A.default}});Object.defineProperty(t,"parse",{enumerable:true,get:function(){return l.default}});Object.defineProperty(t,"stringify",{enumerable:true,get:function(){return u.default}});Object.defineProperty(t,"v1",{enumerable:true,get:function(){return s.default}});Object.defineProperty(t,"v3",{enumerable:true,get:function(){return i.default}});Object.defineProperty(t,"v4",{enumerable:true,get:function(){return r.default}});Object.defineProperty(t,"v5",{enumerable:true,get:function(){return o.default}});Object.defineProperty(t,"validate",{enumerable:true,get:function(){return c.default}});Object.defineProperty(t,"version",{enumerable:true,get:function(){return a.default}});var s=_interopRequireDefault(n(272));var i=_interopRequireDefault(n(4867));var r=_interopRequireDefault(n(1537));var o=_interopRequireDefault(n(1453));var A=_interopRequireDefault(n(588));var a=_interopRequireDefault(n(5440));var c=_interopRequireDefault(n(2092));var u=_interopRequireDefault(n(61));var l=_interopRequireDefault(n(1855));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}},1774:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=_interopRequireDefault(n(6113));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function md5(e){if(Array.isArray(e)){e=Buffer.from(e)}else if(typeof e==="string"){e=Buffer.from(e,"utf8")}return s.default.createHash("md5").update(e).digest()}var i=md5;t["default"]=i},5056:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=_interopRequireDefault(n(6113));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var i={randomUUID:s.default.randomUUID};t["default"]=i},588:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var n="00000000-0000-0000-0000-000000000000";t["default"]=n},1855:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=_interopRequireDefault(n(2092));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function parse(e){if(!(0,s.default)(e)){throw TypeError("Invalid UUID")}let t;const n=new Uint8Array(16);n[0]=(t=parseInt(e.slice(0,8),16))>>>24;n[1]=t>>>16&255;n[2]=t>>>8&255;n[3]=t&255;n[4]=(t=parseInt(e.slice(9,13),16))>>>8;n[5]=t&255;n[6]=(t=parseInt(e.slice(14,18),16))>>>8;n[7]=t&255;n[8]=(t=parseInt(e.slice(19,23),16))>>>8;n[9]=t&255;n[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255;n[11]=t/4294967296&255;n[12]=t>>>24&255;n[13]=t>>>16&255;n[14]=t>>>8&255;n[15]=t&255;return n}var i=parse;t["default"]=i},2822:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var n=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;t["default"]=n},2378:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=rng;var s=_interopRequireDefault(n(6113));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const i=new Uint8Array(256);let r=i.length;function rng(){if(r>i.length-16){s.default.randomFillSync(i);r=0}return i.slice(r,r+=16)}},2732:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=_interopRequireDefault(n(6113));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function sha1(e){if(Array.isArray(e)){e=Buffer.from(e)}else if(typeof e==="string"){e=Buffer.from(e,"utf8")}return s.default.createHash("sha1").update(e).digest()}var i=sha1;t["default"]=i},61:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;t.unsafeStringify=unsafeStringify;var s=_interopRequireDefault(n(2092));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const i=[];for(let e=0;e<256;++e){i.push((e+256).toString(16).slice(1))}function unsafeStringify(e,t=0){return i[e[t+0]]+i[e[t+1]]+i[e[t+2]]+i[e[t+3]]+"-"+i[e[t+4]]+i[e[t+5]]+"-"+i[e[t+6]]+i[e[t+7]]+"-"+i[e[t+8]]+i[e[t+9]]+"-"+i[e[t+10]]+i[e[t+11]]+i[e[t+12]]+i[e[t+13]]+i[e[t+14]]+i[e[t+15]]}function stringify(e,t=0){const n=unsafeStringify(e,t);if(!(0,s.default)(n)){throw TypeError("Stringified UUID is invalid")}return n}var r=stringify;t["default"]=r},272:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=_interopRequireDefault(n(2378));var i=n(61);function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let r;let o;let A=0;let a=0;function v1(e,t,n){let c=t&&n||0;const u=t||new Array(16);e=e||{};let l=e.node||r;let d=e.clockseq!==undefined?e.clockseq:o;if(l==null||d==null){const t=e.random||(e.rng||s.default)();if(l==null){l=r=[t[0]|1,t[1],t[2],t[3],t[4],t[5]]}if(d==null){d=o=(t[6]<<8|t[7])&16383}}let p=e.msecs!==undefined?e.msecs:Date.now();let g=e.nsecs!==undefined?e.nsecs:a+1;const h=p-A+(g-a)/1e4;if(h<0&&e.clockseq===undefined){d=d+1&16383}if((h<0||p>A)&&e.nsecs===undefined){g=0}if(g>=1e4){throw new Error("uuid.v1(): Can't create more than 10M uuids/sec")}A=p;a=g;o=d;p+=122192928e5;const f=((p&268435455)*1e4+g)%4294967296;u[c++]=f>>>24&255;u[c++]=f>>>16&255;u[c++]=f>>>8&255;u[c++]=f&255;const E=p/4294967296*1e4&268435455;u[c++]=E>>>8&255;u[c++]=E&255;u[c++]=E>>>24&15|16;u[c++]=E>>>16&255;u[c++]=d>>>8|128;u[c++]=d&255;for(let e=0;e<6;++e){u[c+e]=l[e]}return t||(0,i.unsafeStringify)(u)}var c=v1;t["default"]=c},4867:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=_interopRequireDefault(n(6222));var i=_interopRequireDefault(n(1774));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const r=(0,s.default)("v3",48,i.default);var o=r;t["default"]=o},6222:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.URL=t.DNS=void 0;t["default"]=v35;var s=n(61);var i=_interopRequireDefault(n(1855));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function stringToBytes(e){e=unescape(encodeURIComponent(e));const t=[];for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=_interopRequireDefault(n(5056));var i=_interopRequireDefault(n(2378));var r=n(61);function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function v4(e,t,n){if(s.default.randomUUID&&!t&&!e){return s.default.randomUUID()}e=e||{};const o=e.random||(e.rng||i.default)();o[6]=o[6]&15|64;o[8]=o[8]&63|128;if(t){n=n||0;for(let e=0;e<16;++e){t[n+e]=o[e]}return t}return(0,r.unsafeStringify)(o)}var o=v4;t["default"]=o},1453:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=_interopRequireDefault(n(6222));var i=_interopRequireDefault(n(2732));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const r=(0,s.default)("v5",80,i.default);var o=r;t["default"]=o},2092:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=_interopRequireDefault(n(2822));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function validate(e){return typeof e==="string"&&s.default.test(e)}var i=validate;t["default"]=i},5440:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=_interopRequireDefault(n(2092));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function version(e){if(!(0,s.default)(e)){throw TypeError("Invalid UUID")}return parseInt(e.slice(14,15),16)}var i=version;t["default"]=i},5443:(e,t,n)=>{var s=n(3837);var i=n(2781).Stream;var r=n(8611);e.exports=CombinedStream;function CombinedStream(){this.writable=false;this.readable=true;this.dataSize=0;this.maxDataSize=2*1024*1024;this.pauseStreams=true;this._released=false;this._streams=[];this._currentStream=null;this._insideLoop=false;this._pendingNext=false}s.inherits(CombinedStream,i);CombinedStream.create=function(e){var t=new this;e=e||{};for(var n in e){t[n]=e[n]}return t};CombinedStream.isStreamLike=function(e){return typeof e!=="function"&&typeof e!=="string"&&typeof e!=="boolean"&&typeof e!=="number"&&!Buffer.isBuffer(e)};CombinedStream.prototype.append=function(e){var t=CombinedStream.isStreamLike(e);if(t){if(!(e instanceof r)){var n=r.create(e,{maxDataSize:Infinity,pauseStream:this.pauseStreams});e.on("data",this._checkDataSize.bind(this));e=n}this._handleErrors(e);if(this.pauseStreams){e.pause()}}this._streams.push(e);return this};CombinedStream.prototype.pipe=function(e,t){i.prototype.pipe.call(this,e,t);this.resume();return e};CombinedStream.prototype._getNext=function(){this._currentStream=null;if(this._insideLoop){this._pendingNext=true;return}this._insideLoop=true;try{do{this._pendingNext=false;this._realGetNext()}while(this._pendingNext)}finally{this._insideLoop=false}};CombinedStream.prototype._realGetNext=function(){var e=this._streams.shift();if(typeof e=="undefined"){this.end();return}if(typeof e!=="function"){this._pipeNext(e);return}var t=e;t(function(e){var t=CombinedStream.isStreamLike(e);if(t){e.on("data",this._checkDataSize.bind(this));this._handleErrors(e)}this._pipeNext(e)}.bind(this))};CombinedStream.prototype._pipeNext=function(e){this._currentStream=e;var t=CombinedStream.isStreamLike(e);if(t){e.on("end",this._getNext.bind(this));e.pipe(this,{end:false});return}var n=e;this.write(n);this._getNext()};CombinedStream.prototype._handleErrors=function(e){var t=this;e.on("error",(function(e){t._emitError(e)}))};CombinedStream.prototype.write=function(e){this.emit("data",e)};CombinedStream.prototype.pause=function(){if(!this.pauseStreams){return}if(this.pauseStreams&&this._currentStream&&typeof this._currentStream.pause=="function")this._currentStream.pause();this.emit("pause")};CombinedStream.prototype.resume=function(){if(!this._released){this._released=true;this.writable=true;this._getNext()}if(this.pauseStreams&&this._currentStream&&typeof this._currentStream.resume=="function")this._currentStream.resume();this.emit("resume")};CombinedStream.prototype.end=function(){this._reset();this.emit("end")};CombinedStream.prototype.destroy=function(){this._reset();this.emit("close")};CombinedStream.prototype._reset=function(){this.writable=false;this._streams=[];this._currentStream=null};CombinedStream.prototype._checkDataSize=function(){this._updateDataSize();if(this.dataSize<=this.maxDataSize){return}var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this._emitError(new Error(e))};CombinedStream.prototype._updateDataSize=function(){this.dataSize=0;var e=this;this._streams.forEach((function(t){if(!t.dataSize){return}e.dataSize+=t.dataSize}));if(this._currentStream&&this._currentStream.dataSize){this.dataSize+=this._currentStream.dataSize}};CombinedStream.prototype._emitError=function(e){this._reset();this.emit("error",e)}},8611:(e,t,n)=>{var s=n(2781).Stream;var i=n(3837);e.exports=DelayedStream;function DelayedStream(){this.source=null;this.dataSize=0;this.maxDataSize=1024*1024;this.pauseStream=true;this._maxDataSizeExceeded=false;this._released=false;this._bufferedEvents=[]}i.inherits(DelayedStream,s);DelayedStream.create=function(e,t){var n=new this;t=t||{};for(var s in t){n[s]=t[s]}n.source=e;var i=e.emit;e.emit=function(){n._handleEmit(arguments);return i.apply(e,arguments)};e.on("error",(function(){}));if(n.pauseStream){e.pause()}return n};Object.defineProperty(DelayedStream.prototype,"readable",{configurable:true,enumerable:true,get:function(){return this.source.readable}});DelayedStream.prototype.setEncoding=function(){return this.source.setEncoding.apply(this.source,arguments)};DelayedStream.prototype.resume=function(){if(!this._released){this.release()}this.source.resume()};DelayedStream.prototype.pause=function(){this.source.pause()};DelayedStream.prototype.release=function(){this._released=true;this._bufferedEvents.forEach(function(e){this.emit.apply(this,e)}.bind(this));this._bufferedEvents=[]};DelayedStream.prototype.pipe=function(){var e=s.prototype.pipe.apply(this,arguments);this.resume();return e};DelayedStream.prototype._handleEmit=function(e){if(this._released){this.emit.apply(this,e);return}if(e[0]==="data"){this.dataSize+=e[1].length;this._checkIfMaxDataSizeExceeded()}this._bufferedEvents.push(e)};DelayedStream.prototype._checkIfMaxDataSizeExceeded=function(){if(this._maxDataSizeExceeded){return}if(this.dataSize<=this.maxDataSize){return}this._maxDataSizeExceeded=true;var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this.emit("error",new Error(e))}},1133:(e,t,n)=>{var s;e.exports=function(){if(!s){try{s=n(6167)("follow-redirects")}catch(e){}if(typeof s!=="function"){s=function(){}}}s.apply(null,arguments)}},7707:(e,t,n)=>{var s=n(7310);var i=s.URL;var r=n(3685);var o=n(5687);var A=n(2781).Writable;var a=n(9491);var c=n(1133);var u=["abort","aborted","connect","error","socket","timeout"];var l=Object.create(null);u.forEach((function(e){l[e]=function(t,n,s){this._redirectable.emit(e,t,n,s)}}));var d=createErrorType("ERR_INVALID_URL","Invalid URL",TypeError);var p=createErrorType("ERR_FR_REDIRECTION_FAILURE","Redirected request failed");var g=createErrorType("ERR_FR_TOO_MANY_REDIRECTS","Maximum number of redirects exceeded");var h=createErrorType("ERR_FR_MAX_BODY_LENGTH_EXCEEDED","Request body larger than maxBodyLength limit");var f=createErrorType("ERR_STREAM_WRITE_AFTER_END","write after end");var E=A.prototype.destroy||noop;function RedirectableRequest(e,t){A.call(this);this._sanitizeOptions(e);this._options=e;this._ended=false;this._ending=false;this._redirectCount=0;this._redirects=[];this._requestBodyLength=0;this._requestBodyBuffers=[];if(t){this.on("response",t)}var n=this;this._onNativeResponse=function(e){n._processResponse(e)};this._performRequest()}RedirectableRequest.prototype=Object.create(A.prototype);RedirectableRequest.prototype.abort=function(){destroyRequest(this._currentRequest);this._currentRequest.abort();this.emit("abort")};RedirectableRequest.prototype.destroy=function(e){destroyRequest(this._currentRequest,e);E.call(this,e);return this};RedirectableRequest.prototype.write=function(e,t,n){if(this._ending){throw new f}if(!isString(e)&&!isBuffer(e)){throw new TypeError("data should be a string, Buffer or Uint8Array")}if(isFunction(t)){n=t;t=null}if(e.length===0){if(n){n()}return}if(this._requestBodyLength+e.length<=this._options.maxBodyLength){this._requestBodyLength+=e.length;this._requestBodyBuffers.push({data:e,encoding:t});this._currentRequest.write(e,t,n)}else{this.emit("error",new h);this.abort()}};RedirectableRequest.prototype.end=function(e,t,n){if(isFunction(e)){n=e;e=t=null}else if(isFunction(t)){n=t;t=null}if(!e){this._ended=this._ending=true;this._currentRequest.end(null,null,n)}else{var s=this;var i=this._currentRequest;this.write(e,t,(function(){s._ended=true;i.end(null,null,n)}));this._ending=true}};RedirectableRequest.prototype.setHeader=function(e,t){this._options.headers[e]=t;this._currentRequest.setHeader(e,t)};RedirectableRequest.prototype.removeHeader=function(e){delete this._options.headers[e];this._currentRequest.removeHeader(e)};RedirectableRequest.prototype.setTimeout=function(e,t){var n=this;function destroyOnTimeout(t){t.setTimeout(e);t.removeListener("timeout",t.destroy);t.addListener("timeout",t.destroy)}function startTimer(t){if(n._timeout){clearTimeout(n._timeout)}n._timeout=setTimeout((function(){n.emit("timeout");clearTimer()}),e);destroyOnTimeout(t)}function clearTimer(){if(n._timeout){clearTimeout(n._timeout);n._timeout=null}n.removeListener("abort",clearTimer);n.removeListener("error",clearTimer);n.removeListener("response",clearTimer);n.removeListener("close",clearTimer);if(t){n.removeListener("timeout",t)}if(!n.socket){n._currentRequest.removeListener("socket",startTimer)}}if(t){this.on("timeout",t)}if(this.socket){startTimer(this.socket)}else{this._currentRequest.once("socket",startTimer)}this.on("socket",destroyOnTimeout);this.on("abort",clearTimer);this.on("error",clearTimer);this.on("response",clearTimer);this.on("close",clearTimer);return this};["flushHeaders","getHeader","setNoDelay","setSocketKeepAlive"].forEach((function(e){RedirectableRequest.prototype[e]=function(t,n){return this._currentRequest[e](t,n)}}));["aborted","connection","socket"].forEach((function(e){Object.defineProperty(RedirectableRequest.prototype,e,{get:function(){return this._currentRequest[e]}})}));RedirectableRequest.prototype._sanitizeOptions=function(e){if(!e.headers){e.headers={}}if(e.host){if(!e.hostname){e.hostname=e.host}delete e.host}if(!e.pathname&&e.path){var t=e.path.indexOf("?");if(t<0){e.pathname=e.path}else{e.pathname=e.path.substring(0,t);e.search=e.path.substring(t)}}};RedirectableRequest.prototype._performRequest=function(){var e=this._options.protocol;var t=this._options.nativeProtocols[e];if(!t){this.emit("error",new TypeError("Unsupported protocol "+e));return}if(this._options.agents){var n=e.slice(0,-1);this._options.agent=this._options.agents[n]}var i=this._currentRequest=t.request(this._options,this._onNativeResponse);i._redirectable=this;for(var r of u){i.on(r,l[r])}this._currentUrl=/^\//.test(this._options.path)?s.format(this._options):this._options.path;if(this._isRedirect){var o=0;var A=this;var a=this._requestBodyBuffers;(function writeNext(e){if(i===A._currentRequest){if(e){A.emit("error",e)}else if(o=400){e.responseUrl=this._currentUrl;e.redirects=this._redirects;this.emit("response",e);this._requestBodyBuffers=[];return}destroyRequest(this._currentRequest);e.destroy();if(++this._redirectCount>this._options.maxRedirects){this.emit("error",new g);return}var i;var r=this._options.beforeRedirect;if(r){i=Object.assign({Host:e.req.getHeader("host")},this._options.headers)}var o=this._options.method;if((t===301||t===302)&&this._options.method==="POST"||t===303&&!/^(?:GET|HEAD)$/.test(this._options.method)){this._options.method="GET";this._requestBodyBuffers=[];removeMatchingHeaders(/^content-/i,this._options.headers)}var A=removeMatchingHeaders(/^host$/i,this._options.headers);var a=s.parse(this._currentUrl);var u=A||a.host;var l=/^\w+:/.test(n)?this._currentUrl:s.format(Object.assign(a,{host:u}));var d;try{d=s.resolve(l,n)}catch(e){this.emit("error",new p({cause:e}));return}c("redirecting to",d);this._isRedirect=true;var h=s.parse(d);Object.assign(this._options,h);if(h.protocol!==a.protocol&&h.protocol!=="https:"||h.host!==u&&!isSubdomain(h.host,u)){removeMatchingHeaders(/^(?:authorization|cookie)$/i,this._options.headers)}if(isFunction(r)){var f={headers:e.headers,statusCode:t};var E={url:l,method:o,headers:i};try{r(this._options,f,E)}catch(e){this.emit("error",e);return}this._sanitizeOptions(this._options)}try{this._performRequest()}catch(e){this.emit("error",new p({cause:e}))}};function wrap(e){var t={maxRedirects:21,maxBodyLength:10*1024*1024};var n={};Object.keys(e).forEach((function(r){var o=r+":";var A=n[o]=e[r];var u=t[r]=Object.create(A);function request(e,r,A){if(isString(e)){var u;try{u=urlToOptions(new i(e))}catch(t){u=s.parse(e)}if(!isString(u.protocol)){throw new d({input:e})}e=u}else if(i&&e instanceof i){e=urlToOptions(e)}else{A=r;r=e;e={protocol:o}}if(isFunction(r)){A=r;r=null}r=Object.assign({maxRedirects:t.maxRedirects,maxBodyLength:t.maxBodyLength},e,r);r.nativeProtocols=n;if(!isString(r.host)&&!isString(r.hostname)){r.hostname="::1"}a.equal(r.protocol,o,"protocol mismatch");c("options",r);return new RedirectableRequest(r,A)}function get(e,t,n){var s=u.request(e,t,n);s.end();return s}Object.defineProperties(u,{request:{value:request,configurable:true,enumerable:true,writable:true},get:{value:get,configurable:true,enumerable:true,writable:true}})}));return t}function noop(){}function urlToOptions(e){var t={protocol:e.protocol,hostname:e.hostname.startsWith("[")?e.hostname.slice(1,-1):e.hostname,hash:e.hash,search:e.search,pathname:e.pathname,path:e.pathname+e.search,href:e.href};if(e.port!==""){t.port=Number(e.port)}return t}function removeMatchingHeaders(e,t){var n;for(var s in t){if(e.test(s)){n=t[s];delete t[s]}}return n===null||typeof n==="undefined"?undefined:String(n).trim()}function createErrorType(e,t,n){function CustomError(n){Error.captureStackTrace(this,this.constructor);Object.assign(this,n||{});this.code=e;this.message=this.cause?t+": "+this.cause.message:t}CustomError.prototype=new(n||Error);CustomError.prototype.constructor=CustomError;CustomError.prototype.name="Error ["+e+"]";return CustomError}function destroyRequest(e,t){for(var n of u){e.removeListener(n,l[n])}e.on("error",noop);e.destroy(t)}function isSubdomain(e,t){a(isString(e)&&isString(t));var n=e.length-t.length-1;return n>0&&e[n]==="."&&e.endsWith(t)}function isString(e){return typeof e==="string"||e instanceof String}function isFunction(e){return typeof e==="function"}function isBuffer(e){return typeof e==="object"&&"length"in e}e.exports=wrap({http:r,https:o});e.exports.wrap=wrap},4334:(e,t,n)=>{var s=n(5443);var i=n(3837);var r=n(1017);var o=n(3685);var A=n(5687);var a=n(7310).parse;var c=n(7147);var u=n(2781).Stream;var l=n(3583);var d=n(4812);var p=n(7142);e.exports=FormData;i.inherits(FormData,s);function FormData(e){if(!(this instanceof FormData)){return new FormData(e)}this._overheadLength=0;this._valueLength=0;this._valuesToMeasure=[];s.call(this);e=e||{};for(var t in e){this[t]=e[t]}}FormData.LINE_BREAK="\r\n";FormData.DEFAULT_CONTENT_TYPE="application/octet-stream";FormData.prototype.append=function(e,t,n){n=n||{};if(typeof n=="string"){n={filename:n}}var r=s.prototype.append.bind(this);if(typeof t=="number"){t=""+t}if(i.isArray(t)){this._error(new Error("Arrays are not supported."));return}var o=this._multiPartHeader(e,t,n);var A=this._multiPartFooter();r(o);r(t);r(A);this._trackLength(o,t,n)};FormData.prototype._trackLength=function(e,t,n){var s=0;if(n.knownLength!=null){s+=+n.knownLength}else if(Buffer.isBuffer(t)){s=t.length}else if(typeof t==="string"){s=Buffer.byteLength(t)}this._valueLength+=s;this._overheadLength+=Buffer.byteLength(e)+FormData.LINE_BREAK.length;if(!t||!t.path&&!(t.readable&&t.hasOwnProperty("httpVersion"))&&!(t instanceof u)){return}if(!n.knownLength){this._valuesToMeasure.push(t)}};FormData.prototype._lengthRetriever=function(e,t){if(e.hasOwnProperty("fd")){if(e.end!=undefined&&e.end!=Infinity&&e.start!=undefined){t(null,e.end+1-(e.start?e.start:0))}else{c.stat(e.path,(function(n,s){var i;if(n){t(n);return}i=s.size-(e.start?e.start:0);t(null,i)}))}}else if(e.hasOwnProperty("httpVersion")){t(null,+e.headers["content-length"])}else if(e.hasOwnProperty("httpModule")){e.on("response",(function(n){e.pause();t(null,+n.headers["content-length"])}));e.resume()}else{t("Unknown stream")}};FormData.prototype._multiPartHeader=function(e,t,n){if(typeof n.header=="string"){return n.header}var s=this._getContentDisposition(t,n);var i=this._getContentType(t,n);var r="";var o={"Content-Disposition":["form-data",'name="'+e+'"'].concat(s||[]),"Content-Type":[].concat(i||[])};if(typeof n.header=="object"){p(o,n.header)}var A;for(var a in o){if(!o.hasOwnProperty(a))continue;A=o[a];if(A==null){continue}if(!Array.isArray(A)){A=[A]}if(A.length){r+=a+": "+A.join("; ")+FormData.LINE_BREAK}}return"--"+this.getBoundary()+FormData.LINE_BREAK+r+FormData.LINE_BREAK};FormData.prototype._getContentDisposition=function(e,t){var n,s;if(typeof t.filepath==="string"){n=r.normalize(t.filepath).replace(/\\/g,"/")}else if(t.filename||e.name||e.path){n=r.basename(t.filename||e.name||e.path)}else if(e.readable&&e.hasOwnProperty("httpVersion")){n=r.basename(e.client._httpMessage.path||"")}if(n){s='filename="'+n+'"'}return s};FormData.prototype._getContentType=function(e,t){var n=t.contentType;if(!n&&e.name){n=l.lookup(e.name)}if(!n&&e.path){n=l.lookup(e.path)}if(!n&&e.readable&&e.hasOwnProperty("httpVersion")){n=e.headers["content-type"]}if(!n&&(t.filepath||t.filename)){n=l.lookup(t.filepath||t.filename)}if(!n&&typeof e=="object"){n=FormData.DEFAULT_CONTENT_TYPE}return n};FormData.prototype._multiPartFooter=function(){return function(e){var t=FormData.LINE_BREAK;var n=this._streams.length===0;if(n){t+=this._lastBoundary()}e(t)}.bind(this)};FormData.prototype._lastBoundary=function(){return"--"+this.getBoundary()+"--"+FormData.LINE_BREAK};FormData.prototype.getHeaders=function(e){var t;var n={"content-type":"multipart/form-data; boundary="+this.getBoundary()};for(t in e){if(e.hasOwnProperty(t)){n[t.toLowerCase()]=e[t]}}return n};FormData.prototype.setBoundary=function(e){this._boundary=e};FormData.prototype.getBoundary=function(){if(!this._boundary){this._generateBoundary()}return this._boundary};FormData.prototype.getBuffer=function(){var e=new Buffer.alloc(0);var t=this.getBoundary();for(var n=0,s=this._streams.length;n{e.exports=function(e,t){Object.keys(t).forEach((function(n){e[n]=e[n]||t[n]}));return e}},4061:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.cryptoRuntime=t.base64url=t.generateSecret=t.generateKeyPair=t.errors=t.decodeJwt=t.decodeProtectedHeader=t.importJWK=t.importX509=t.importPKCS8=t.importSPKI=t.exportJWK=t.exportSPKI=t.exportPKCS8=t.UnsecuredJWT=t.createRemoteJWKSet=t.createLocalJWKSet=t.EmbeddedJWK=t.calculateJwkThumbprintUri=t.calculateJwkThumbprint=t.EncryptJWT=t.SignJWT=t.GeneralSign=t.FlattenedSign=t.CompactSign=t.FlattenedEncrypt=t.CompactEncrypt=t.jwtDecrypt=t.jwtVerify=t.generalVerify=t.flattenedVerify=t.compactVerify=t.GeneralEncrypt=t.generalDecrypt=t.flattenedDecrypt=t.compactDecrypt=void 0;var s=n(7651);Object.defineProperty(t,"compactDecrypt",{enumerable:true,get:function(){return s.compactDecrypt}});var i=n(7566);Object.defineProperty(t,"flattenedDecrypt",{enumerable:true,get:function(){return i.flattenedDecrypt}});var r=n(5684);Object.defineProperty(t,"generalDecrypt",{enumerable:true,get:function(){return r.generalDecrypt}});var o=n(3992);Object.defineProperty(t,"GeneralEncrypt",{enumerable:true,get:function(){return o.GeneralEncrypt}});var A=n(5212);Object.defineProperty(t,"compactVerify",{enumerable:true,get:function(){return A.compactVerify}});var a=n(2095);Object.defineProperty(t,"flattenedVerify",{enumerable:true,get:function(){return a.flattenedVerify}});var c=n(4975);Object.defineProperty(t,"generalVerify",{enumerable:true,get:function(){return c.generalVerify}});var u=n(9887);Object.defineProperty(t,"jwtVerify",{enumerable:true,get:function(){return u.jwtVerify}});var l=n(3378);Object.defineProperty(t,"jwtDecrypt",{enumerable:true,get:function(){return l.jwtDecrypt}});var d=n(6203);Object.defineProperty(t,"CompactEncrypt",{enumerable:true,get:function(){return d.CompactEncrypt}});var p=n(1555);Object.defineProperty(t,"FlattenedEncrypt",{enumerable:true,get:function(){return p.FlattenedEncrypt}});var g=n(8257);Object.defineProperty(t,"CompactSign",{enumerable:true,get:function(){return g.CompactSign}});var h=n(4825);Object.defineProperty(t,"FlattenedSign",{enumerable:true,get:function(){return h.FlattenedSign}});var f=n(4268);Object.defineProperty(t,"GeneralSign",{enumerable:true,get:function(){return f.GeneralSign}});var E=n(8882);Object.defineProperty(t,"SignJWT",{enumerable:true,get:function(){return E.SignJWT}});var m=n(960);Object.defineProperty(t,"EncryptJWT",{enumerable:true,get:function(){return m.EncryptJWT}});var C=n(3494);Object.defineProperty(t,"calculateJwkThumbprint",{enumerable:true,get:function(){return C.calculateJwkThumbprint}});Object.defineProperty(t,"calculateJwkThumbprintUri",{enumerable:true,get:function(){return C.calculateJwkThumbprintUri}});var Q=n(1751);Object.defineProperty(t,"EmbeddedJWK",{enumerable:true,get:function(){return Q.EmbeddedJWK}});var I=n(9970);Object.defineProperty(t,"createLocalJWKSet",{enumerable:true,get:function(){return I.createLocalJWKSet}});var B=n(9035);Object.defineProperty(t,"createRemoteJWKSet",{enumerable:true,get:function(){return B.createRemoteJWKSet}});var y=n(8568);Object.defineProperty(t,"UnsecuredJWT",{enumerable:true,get:function(){return y.UnsecuredJWT}});var b=n(465);Object.defineProperty(t,"exportPKCS8",{enumerable:true,get:function(){return b.exportPKCS8}});Object.defineProperty(t,"exportSPKI",{enumerable:true,get:function(){return b.exportSPKI}});Object.defineProperty(t,"exportJWK",{enumerable:true,get:function(){return b.exportJWK}});var w=n(4230);Object.defineProperty(t,"importSPKI",{enumerable:true,get:function(){return w.importSPKI}});Object.defineProperty(t,"importPKCS8",{enumerable:true,get:function(){return w.importPKCS8}});Object.defineProperty(t,"importX509",{enumerable:true,get:function(){return w.importX509}});Object.defineProperty(t,"importJWK",{enumerable:true,get:function(){return w.importJWK}});var R=n(3991);Object.defineProperty(t,"decodeProtectedHeader",{enumerable:true,get:function(){return R.decodeProtectedHeader}});var v=n(5611);Object.defineProperty(t,"decodeJwt",{enumerable:true,get:function(){return v.decodeJwt}});t.errors=n(4419);var k=n(1036);Object.defineProperty(t,"generateKeyPair",{enumerable:true,get:function(){return k.generateKeyPair}});var S=n(6617);Object.defineProperty(t,"generateSecret",{enumerable:true,get:function(){return S.generateSecret}});t.base64url=n(3238);var x=n(1173);Object.defineProperty(t,"cryptoRuntime",{enumerable:true,get:function(){return x.default}})},7651:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.compactDecrypt=void 0;const s=n(7566);const i=n(4419);const r=n(1691);async function compactDecrypt(e,t,n){if(e instanceof Uint8Array){e=r.decoder.decode(e)}if(typeof e!=="string"){throw new i.JWEInvalid("Compact JWE must be a string or Uint8Array")}const{0:o,1:A,2:a,3:c,4:u,length:l}=e.split(".");if(l!==5){throw new i.JWEInvalid("Invalid Compact JWE")}const d=await(0,s.flattenedDecrypt)({ciphertext:c,iv:a||undefined,protected:o||undefined,tag:u||undefined,encrypted_key:A||undefined},t,n);const p={plaintext:d.plaintext,protectedHeader:d.protectedHeader};if(typeof t==="function"){return{...p,key:d.key}}return p}t.compactDecrypt=compactDecrypt},6203:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.CompactEncrypt=void 0;const s=n(1555);class CompactEncrypt{constructor(e){this._flattened=new s.FlattenedEncrypt(e)}setContentEncryptionKey(e){this._flattened.setContentEncryptionKey(e);return this}setInitializationVector(e){this._flattened.setInitializationVector(e);return this}setProtectedHeader(e){this._flattened.setProtectedHeader(e);return this}setKeyManagementParameters(e){this._flattened.setKeyManagementParameters(e);return this}async encrypt(e,t){const n=await this._flattened.encrypt(e,t);return[n.protected,n.encrypted_key,n.iv,n.ciphertext,n.tag].join(".")}}t.CompactEncrypt=CompactEncrypt},7566:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.flattenedDecrypt=void 0;const s=n(518);const i=n(6137);const r=n(7022);const o=n(4419);const A=n(6063);const a=n(9127);const c=n(6127);const u=n(1691);const l=n(3987);const d=n(863);const p=n(5148);async function flattenedDecrypt(e,t,n){var g;if(!(0,a.default)(e)){throw new o.JWEInvalid("Flattened JWE must be an object")}if(e.protected===undefined&&e.header===undefined&&e.unprotected===undefined){throw new o.JWEInvalid("JOSE Header missing")}if(typeof e.iv!=="string"){throw new o.JWEInvalid("JWE Initialization Vector missing or incorrect type")}if(typeof e.ciphertext!=="string"){throw new o.JWEInvalid("JWE Ciphertext missing or incorrect type")}if(typeof e.tag!=="string"){throw new o.JWEInvalid("JWE Authentication Tag missing or incorrect type")}if(e.protected!==undefined&&typeof e.protected!=="string"){throw new o.JWEInvalid("JWE Protected Header incorrect type")}if(e.encrypted_key!==undefined&&typeof e.encrypted_key!=="string"){throw new o.JWEInvalid("JWE Encrypted Key incorrect type")}if(e.aad!==undefined&&typeof e.aad!=="string"){throw new o.JWEInvalid("JWE AAD incorrect type")}if(e.header!==undefined&&!(0,a.default)(e.header)){throw new o.JWEInvalid("JWE Shared Unprotected Header incorrect type")}if(e.unprotected!==undefined&&!(0,a.default)(e.unprotected)){throw new o.JWEInvalid("JWE Per-Recipient Unprotected Header incorrect type")}let h;if(e.protected){try{const t=(0,s.decode)(e.protected);h=JSON.parse(u.decoder.decode(t))}catch{throw new o.JWEInvalid("JWE Protected Header is invalid")}}if(!(0,A.default)(h,e.header,e.unprotected)){throw new o.JWEInvalid("JWE Protected, JWE Unprotected Header, and JWE Per-Recipient Unprotected Header Parameter names must be disjoint")}const f={...h,...e.header,...e.unprotected};(0,d.default)(o.JWEInvalid,new Map,n===null||n===void 0?void 0:n.crit,h,f);if(f.zip!==undefined){if(!h||!h.zip){throw new o.JWEInvalid('JWE "zip" (Compression Algorithm) Header MUST be integrity protected')}if(f.zip!=="DEF"){throw new o.JOSENotSupported('Unsupported JWE "zip" (Compression Algorithm) Header Parameter value')}}const{alg:E,enc:m}=f;if(typeof E!=="string"||!E){throw new o.JWEInvalid("missing JWE Algorithm (alg) in JWE Header")}if(typeof m!=="string"||!m){throw new o.JWEInvalid("missing JWE Encryption Algorithm (enc) in JWE Header")}const C=n&&(0,p.default)("keyManagementAlgorithms",n.keyManagementAlgorithms);const Q=n&&(0,p.default)("contentEncryptionAlgorithms",n.contentEncryptionAlgorithms);if(C&&!C.has(E)){throw new o.JOSEAlgNotAllowed('"alg" (Algorithm) Header Parameter not allowed')}if(Q&&!Q.has(m)){throw new o.JOSEAlgNotAllowed('"enc" (Encryption Algorithm) Header Parameter not allowed')}let I;if(e.encrypted_key!==undefined){try{I=(0,s.decode)(e.encrypted_key)}catch{throw new o.JWEInvalid("Failed to base64url decode the encrypted_key")}}let B=false;if(typeof t==="function"){t=await t(h,e);B=true}let y;try{y=await(0,c.default)(E,t,I,f,n)}catch(e){if(e instanceof TypeError||e instanceof o.JWEInvalid||e instanceof o.JOSENotSupported){throw e}y=(0,l.default)(m)}let b;let w;try{b=(0,s.decode)(e.iv)}catch{throw new o.JWEInvalid("Failed to base64url decode the iv")}try{w=(0,s.decode)(e.tag)}catch{throw new o.JWEInvalid("Failed to base64url decode the tag")}const R=u.encoder.encode((g=e.protected)!==null&&g!==void 0?g:"");let v;if(e.aad!==undefined){v=(0,u.concat)(R,u.encoder.encode("."),u.encoder.encode(e.aad))}else{v=R}let k;try{k=(0,s.decode)(e.ciphertext)}catch{throw new o.JWEInvalid("Failed to base64url decode the ciphertext")}let S=await(0,i.default)(m,y,k,b,w,v);if(f.zip==="DEF"){S=await((n===null||n===void 0?void 0:n.inflateRaw)||r.inflate)(S)}const x={plaintext:S};if(e.protected!==undefined){x.protectedHeader=h}if(e.aad!==undefined){try{x.additionalAuthenticatedData=(0,s.decode)(e.aad)}catch{throw new o.JWEInvalid("Failed to base64url decode the aad")}}if(e.unprotected!==undefined){x.sharedUnprotectedHeader=e.unprotected}if(e.header!==undefined){x.unprotectedHeader=e.header}if(B){return{...x,key:t}}return x}t.flattenedDecrypt=flattenedDecrypt},1555:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.FlattenedEncrypt=t.unprotected=void 0;const s=n(518);const i=n(6476);const r=n(7022);const o=n(4630);const A=n(3286);const a=n(4419);const c=n(6063);const u=n(1691);const l=n(863);t.unprotected=Symbol();class FlattenedEncrypt{constructor(e){if(!(e instanceof Uint8Array)){throw new TypeError("plaintext must be an instance of Uint8Array")}this._plaintext=e}setKeyManagementParameters(e){if(this._keyManagementParameters){throw new TypeError("setKeyManagementParameters can only be called once")}this._keyManagementParameters=e;return this}setProtectedHeader(e){if(this._protectedHeader){throw new TypeError("setProtectedHeader can only be called once")}this._protectedHeader=e;return this}setSharedUnprotectedHeader(e){if(this._sharedUnprotectedHeader){throw new TypeError("setSharedUnprotectedHeader can only be called once")}this._sharedUnprotectedHeader=e;return this}setUnprotectedHeader(e){if(this._unprotectedHeader){throw new TypeError("setUnprotectedHeader can only be called once")}this._unprotectedHeader=e;return this}setAdditionalAuthenticatedData(e){this._aad=e;return this}setContentEncryptionKey(e){if(this._cek){throw new TypeError("setContentEncryptionKey can only be called once")}this._cek=e;return this}setInitializationVector(e){if(this._iv){throw new TypeError("setInitializationVector can only be called once")}this._iv=e;return this}async encrypt(e,n){if(!this._protectedHeader&&!this._unprotectedHeader&&!this._sharedUnprotectedHeader){throw new a.JWEInvalid("either setProtectedHeader, setUnprotectedHeader, or sharedUnprotectedHeader must be called before #encrypt()")}if(!(0,c.default)(this._protectedHeader,this._unprotectedHeader,this._sharedUnprotectedHeader)){throw new a.JWEInvalid("JWE Protected, JWE Shared Unprotected and JWE Per-Recipient Header Parameter names must be disjoint")}const d={...this._protectedHeader,...this._unprotectedHeader,...this._sharedUnprotectedHeader};(0,l.default)(a.JWEInvalid,new Map,n===null||n===void 0?void 0:n.crit,this._protectedHeader,d);if(d.zip!==undefined){if(!this._protectedHeader||!this._protectedHeader.zip){throw new a.JWEInvalid('JWE "zip" (Compression Algorithm) Header MUST be integrity protected')}if(d.zip!=="DEF"){throw new a.JOSENotSupported('Unsupported JWE "zip" (Compression Algorithm) Header Parameter value')}}const{alg:p,enc:g}=d;if(typeof p!=="string"||!p){throw new a.JWEInvalid('JWE "alg" (Algorithm) Header Parameter missing or invalid')}if(typeof g!=="string"||!g){throw new a.JWEInvalid('JWE "enc" (Encryption Algorithm) Header Parameter missing or invalid')}let h;if(p==="dir"){if(this._cek){throw new TypeError("setContentEncryptionKey cannot be called when using Direct Encryption")}}else if(p==="ECDH-ES"){if(this._cek){throw new TypeError("setContentEncryptionKey cannot be called when using Direct Key Agreement")}}let f;{let s;({cek:f,encryptedKey:h,parameters:s}=await(0,A.default)(p,g,e,this._cek,this._keyManagementParameters));if(s){if(n&&t.unprotected in n){if(!this._unprotectedHeader){this.setUnprotectedHeader(s)}else{this._unprotectedHeader={...this._unprotectedHeader,...s}}}else{if(!this._protectedHeader){this.setProtectedHeader(s)}else{this._protectedHeader={...this._protectedHeader,...s}}}}}this._iv||(this._iv=(0,o.default)(g));let E;let m;let C;if(this._protectedHeader){m=u.encoder.encode((0,s.encode)(JSON.stringify(this._protectedHeader)))}else{m=u.encoder.encode("")}if(this._aad){C=(0,s.encode)(this._aad);E=(0,u.concat)(m,u.encoder.encode("."),u.encoder.encode(C))}else{E=m}let Q;let I;if(d.zip==="DEF"){const e=await((n===null||n===void 0?void 0:n.deflateRaw)||r.deflate)(this._plaintext);({ciphertext:Q,tag:I}=await(0,i.default)(g,e,f,this._iv,E))}else{({ciphertext:Q,tag:I}=await(0,i.default)(g,this._plaintext,f,this._iv,E))}const B={ciphertext:(0,s.encode)(Q),iv:(0,s.encode)(this._iv),tag:(0,s.encode)(I)};if(h){B.encrypted_key=(0,s.encode)(h)}if(C){B.aad=C}if(this._protectedHeader){B.protected=u.decoder.decode(m)}if(this._sharedUnprotectedHeader){B.unprotected=this._sharedUnprotectedHeader}if(this._unprotectedHeader){B.header=this._unprotectedHeader}return B}}t.FlattenedEncrypt=FlattenedEncrypt},5684:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.generalDecrypt=void 0;const s=n(7566);const i=n(4419);const r=n(9127);async function generalDecrypt(e,t,n){if(!(0,r.default)(e)){throw new i.JWEInvalid("General JWE must be an object")}if(!Array.isArray(e.recipients)||!e.recipients.every(r.default)){throw new i.JWEInvalid("JWE Recipients missing or incorrect type")}if(!e.recipients.length){throw new i.JWEInvalid("JWE Recipients has no members")}for(const i of e.recipients){try{return await(0,s.flattenedDecrypt)({aad:e.aad,ciphertext:e.ciphertext,encrypted_key:i.encrypted_key,header:i.header,iv:e.iv,protected:e.protected,tag:e.tag,unprotected:e.unprotected},t,n)}catch{}}throw new i.JWEDecryptionFailed}t.generalDecrypt=generalDecrypt},3992:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.GeneralEncrypt=void 0;const s=n(1555);const i=n(4419);const r=n(3987);const o=n(6063);const A=n(3286);const a=n(518);const c=n(863);class IndividualRecipient{constructor(e,t,n){this.parent=e;this.key=t;this.options=n}setUnprotectedHeader(e){if(this.unprotectedHeader){throw new TypeError("setUnprotectedHeader can only be called once")}this.unprotectedHeader=e;return this}addRecipient(...e){return this.parent.addRecipient(...e)}encrypt(...e){return this.parent.encrypt(...e)}done(){return this.parent}}class GeneralEncrypt{constructor(e){this._recipients=[];this._plaintext=e}addRecipient(e,t){const n=new IndividualRecipient(this,e,{crit:t===null||t===void 0?void 0:t.crit});this._recipients.push(n);return n}setProtectedHeader(e){if(this._protectedHeader){throw new TypeError("setProtectedHeader can only be called once")}this._protectedHeader=e;return this}setSharedUnprotectedHeader(e){if(this._unprotectedHeader){throw new TypeError("setSharedUnprotectedHeader can only be called once")}this._unprotectedHeader=e;return this}setAdditionalAuthenticatedData(e){this._aad=e;return this}async encrypt(e){var t,n,u;if(!this._recipients.length){throw new i.JWEInvalid("at least one recipient must be added")}e={deflateRaw:e===null||e===void 0?void 0:e.deflateRaw};if(this._recipients.length===1){const[t]=this._recipients;const n=await new s.FlattenedEncrypt(this._plaintext).setAdditionalAuthenticatedData(this._aad).setProtectedHeader(this._protectedHeader).setSharedUnprotectedHeader(this._unprotectedHeader).setUnprotectedHeader(t.unprotectedHeader).encrypt(t.key,{...t.options,...e});let i={ciphertext:n.ciphertext,iv:n.iv,recipients:[{}],tag:n.tag};if(n.aad)i.aad=n.aad;if(n.protected)i.protected=n.protected;if(n.unprotected)i.unprotected=n.unprotected;if(n.encrypted_key)i.recipients[0].encrypted_key=n.encrypted_key;if(n.header)i.recipients[0].header=n.header;return i}let l;for(let e=0;e{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.EmbeddedJWK=void 0;const s=n(4230);const i=n(9127);const r=n(4419);async function EmbeddedJWK(e,t){const n={...e,...t===null||t===void 0?void 0:t.header};if(!(0,i.default)(n.jwk)){throw new r.JWSInvalid('"jwk" (JSON Web Key) Header Parameter must be a JSON object')}const o=await(0,s.importJWK)({...n.jwk,ext:true},n.alg,true);if(o instanceof Uint8Array||o.type!=="public"){throw new r.JWSInvalid('"jwk" (JSON Web Key) Header Parameter must be a public key')}return o}t.EmbeddedJWK=EmbeddedJWK},3494:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.calculateJwkThumbprintUri=t.calculateJwkThumbprint=void 0;const s=n(2355);const i=n(518);const r=n(4419);const o=n(1691);const A=n(9127);const check=(e,t)=>{if(typeof e!=="string"||!e){throw new r.JWKInvalid(`${t} missing or invalid`)}};async function calculateJwkThumbprint(e,t){if(!(0,A.default)(e)){throw new TypeError("JWK must be an object")}t!==null&&t!==void 0?t:t="sha256";if(t!=="sha256"&&t!=="sha384"&&t!=="sha512"){throw new TypeError('digestAlgorithm must one of "sha256", "sha384", or "sha512"')}let n;switch(e.kty){case"EC":check(e.crv,'"crv" (Curve) Parameter');check(e.x,'"x" (X Coordinate) Parameter');check(e.y,'"y" (Y Coordinate) Parameter');n={crv:e.crv,kty:e.kty,x:e.x,y:e.y};break;case"OKP":check(e.crv,'"crv" (Subtype of Key Pair) Parameter');check(e.x,'"x" (Public Key) Parameter');n={crv:e.crv,kty:e.kty,x:e.x};break;case"RSA":check(e.e,'"e" (Exponent) Parameter');check(e.n,'"n" (Modulus) Parameter');n={e:e.e,kty:e.kty,n:e.n};break;case"oct":check(e.k,'"k" (Key Value) Parameter');n={k:e.k,kty:e.kty};break;default:throw new r.JOSENotSupported('"kty" (Key Type) Parameter missing or unsupported')}const a=o.encoder.encode(JSON.stringify(n));return(0,i.encode)(await(0,s.default)(t,a))}t.calculateJwkThumbprint=calculateJwkThumbprint;async function calculateJwkThumbprintUri(e,t){t!==null&&t!==void 0?t:t="sha256";const n=await calculateJwkThumbprint(e,t);return`urn:ietf:params:oauth:jwk-thumbprint:sha-${t.slice(-3)}:${n}`}t.calculateJwkThumbprintUri=calculateJwkThumbprintUri},9970:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createLocalJWKSet=t.LocalJWKSet=t.isJWKSLike=void 0;const s=n(4230);const i=n(4419);const r=n(9127);function getKtyFromAlg(e){switch(typeof e==="string"&&e.slice(0,2)){case"RS":case"PS":return"RSA";case"ES":return"EC";case"Ed":return"OKP";default:throw new i.JOSENotSupported('Unsupported "alg" value for a JSON Web Key Set')}}function isJWKSLike(e){return e&&typeof e==="object"&&Array.isArray(e.keys)&&e.keys.every(isJWKLike)}t.isJWKSLike=isJWKSLike;function isJWKLike(e){return(0,r.default)(e)}function clone(e){if(typeof structuredClone==="function"){return structuredClone(e)}return JSON.parse(JSON.stringify(e))}class LocalJWKSet{constructor(e){this._cached=new WeakMap;if(!isJWKSLike(e)){throw new i.JWKSInvalid("JSON Web Key Set malformed")}this._jwks=clone(e)}async getKey(e,t){const{alg:n,kid:s}={...e,...t===null||t===void 0?void 0:t.header};const r=getKtyFromAlg(n);const o=this._jwks.keys.filter((e=>{let t=r===e.kty;if(t&&typeof s==="string"){t=s===e.kid}if(t&&typeof e.alg==="string"){t=n===e.alg}if(t&&typeof e.use==="string"){t=e.use==="sig"}if(t&&Array.isArray(e.key_ops)){t=e.key_ops.includes("verify")}if(t&&n==="EdDSA"){t=e.crv==="Ed25519"||e.crv==="Ed448"}if(t){switch(n){case"ES256":t=e.crv==="P-256";break;case"ES256K":t=e.crv==="secp256k1";break;case"ES384":t=e.crv==="P-384";break;case"ES512":t=e.crv==="P-521";break}}return t}));const{0:A,length:a}=o;if(a===0){throw new i.JWKSNoMatchingKey}else if(a!==1){const e=new i.JWKSMultipleMatchingKeys;const{_cached:t}=this;e[Symbol.asyncIterator]=async function*(){for(const e of o){try{yield await importWithAlgCache(t,e,n)}catch{continue}}};throw e}return importWithAlgCache(this._cached,A,n)}}t.LocalJWKSet=LocalJWKSet;async function importWithAlgCache(e,t,n){const r=e.get(t)||e.set(t,{}).get(t);if(r[n]===undefined){const e=await(0,s.importJWK)({...t,ext:true},n);if(e instanceof Uint8Array||e.type!=="public"){throw new i.JWKSInvalid("JSON Web Key Set members must be public keys")}r[n]=e}return r[n]}function createLocalJWKSet(e){const t=new LocalJWKSet(e);return async function(e,n){return t.getKey(e,n)}}t.createLocalJWKSet=createLocalJWKSet},9035:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.createRemoteJWKSet=void 0;const s=n(3650);const i=n(4419);const r=n(9970);function isCloudflareWorkers(){return typeof WebSocketPair!=="undefined"||typeof navigator!=="undefined"&&navigator.userAgent==="Cloudflare-Workers"||typeof EdgeRuntime!=="undefined"&&EdgeRuntime==="vercel"}class RemoteJWKSet extends r.LocalJWKSet{constructor(e,t){super({keys:[]});this._jwks=undefined;if(!(e instanceof URL)){throw new TypeError("url must be an instance of URL")}this._url=new URL(e.href);this._options={agent:t===null||t===void 0?void 0:t.agent,headers:t===null||t===void 0?void 0:t.headers};this._timeoutDuration=typeof(t===null||t===void 0?void 0:t.timeoutDuration)==="number"?t===null||t===void 0?void 0:t.timeoutDuration:5e3;this._cooldownDuration=typeof(t===null||t===void 0?void 0:t.cooldownDuration)==="number"?t===null||t===void 0?void 0:t.cooldownDuration:3e4;this._cacheMaxAge=typeof(t===null||t===void 0?void 0:t.cacheMaxAge)==="number"?t===null||t===void 0?void 0:t.cacheMaxAge:6e5}coolingDown(){return typeof this._jwksTimestamp==="number"?Date.now(){if(!(0,r.isJWKSLike)(e)){throw new i.JWKSInvalid("JSON Web Key Set malformed")}this._jwks={keys:e.keys};this._jwksTimestamp=Date.now();this._pendingFetch=undefined})).catch((e=>{this._pendingFetch=undefined;throw e})));await this._pendingFetch}}function createRemoteJWKSet(e,t){const n=new RemoteJWKSet(e,t);return async function(e,t){return n.getKey(e,t)}}t.createRemoteJWKSet=createRemoteJWKSet},8257:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.CompactSign=void 0;const s=n(4825);class CompactSign{constructor(e){this._flattened=new s.FlattenedSign(e)}setProtectedHeader(e){this._flattened.setProtectedHeader(e);return this}async sign(e,t){const n=await this._flattened.sign(e,t);if(n.payload===undefined){throw new TypeError("use the flattened module for creating JWS with b64: false")}return`${n.protected}.${n.payload}.${n.signature}`}}t.CompactSign=CompactSign},5212:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.compactVerify=void 0;const s=n(2095);const i=n(4419);const r=n(1691);async function compactVerify(e,t,n){if(e instanceof Uint8Array){e=r.decoder.decode(e)}if(typeof e!=="string"){throw new i.JWSInvalid("Compact JWS must be a string or Uint8Array")}const{0:o,1:A,2:a,length:c}=e.split(".");if(c!==3){throw new i.JWSInvalid("Invalid Compact JWS")}const u=await(0,s.flattenedVerify)({payload:A,protected:o,signature:a},t,n);const l={payload:u.payload,protectedHeader:u.protectedHeader};if(typeof t==="function"){return{...l,key:u.key}}return l}t.compactVerify=compactVerify},4825:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.FlattenedSign=void 0;const s=n(518);const i=n(9935);const r=n(6063);const o=n(4419);const A=n(1691);const a=n(6241);const c=n(863);class FlattenedSign{constructor(e){if(!(e instanceof Uint8Array)){throw new TypeError("payload must be an instance of Uint8Array")}this._payload=e}setProtectedHeader(e){if(this._protectedHeader){throw new TypeError("setProtectedHeader can only be called once")}this._protectedHeader=e;return this}setUnprotectedHeader(e){if(this._unprotectedHeader){throw new TypeError("setUnprotectedHeader can only be called once")}this._unprotectedHeader=e;return this}async sign(e,t){if(!this._protectedHeader&&!this._unprotectedHeader){throw new o.JWSInvalid("either setProtectedHeader or setUnprotectedHeader must be called before #sign()")}if(!(0,r.default)(this._protectedHeader,this._unprotectedHeader)){throw new o.JWSInvalid("JWS Protected and JWS Unprotected Header Parameter names must be disjoint")}const n={...this._protectedHeader,...this._unprotectedHeader};const u=(0,c.default)(o.JWSInvalid,new Map([["b64",true]]),t===null||t===void 0?void 0:t.crit,this._protectedHeader,n);let l=true;if(u.has("b64")){l=this._protectedHeader.b64;if(typeof l!=="boolean"){throw new o.JWSInvalid('The "b64" (base64url-encode payload) Header Parameter must be a boolean')}}const{alg:d}=n;if(typeof d!=="string"||!d){throw new o.JWSInvalid('JWS "alg" (Algorithm) Header Parameter missing or invalid')}(0,a.default)(d,e,"sign");let p=this._payload;if(l){p=A.encoder.encode((0,s.encode)(p))}let g;if(this._protectedHeader){g=A.encoder.encode((0,s.encode)(JSON.stringify(this._protectedHeader)))}else{g=A.encoder.encode("")}const h=(0,A.concat)(g,A.encoder.encode("."),p);const f=await(0,i.default)(d,e,h);const E={signature:(0,s.encode)(f),payload:""};if(l){E.payload=A.decoder.decode(p)}if(this._unprotectedHeader){E.header=this._unprotectedHeader}if(this._protectedHeader){E.protected=A.decoder.decode(g)}return E}}t.FlattenedSign=FlattenedSign},2095:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.flattenedVerify=void 0;const s=n(518);const i=n(3569);const r=n(4419);const o=n(1691);const A=n(6063);const a=n(9127);const c=n(6241);const u=n(863);const l=n(5148);async function flattenedVerify(e,t,n){var d;if(!(0,a.default)(e)){throw new r.JWSInvalid("Flattened JWS must be an object")}if(e.protected===undefined&&e.header===undefined){throw new r.JWSInvalid('Flattened JWS must have either of the "protected" or "header" members')}if(e.protected!==undefined&&typeof e.protected!=="string"){throw new r.JWSInvalid("JWS Protected Header incorrect type")}if(e.payload===undefined){throw new r.JWSInvalid("JWS Payload missing")}if(typeof e.signature!=="string"){throw new r.JWSInvalid("JWS Signature missing or incorrect type")}if(e.header!==undefined&&!(0,a.default)(e.header)){throw new r.JWSInvalid("JWS Unprotected Header incorrect type")}let p={};if(e.protected){try{const t=(0,s.decode)(e.protected);p=JSON.parse(o.decoder.decode(t))}catch{throw new r.JWSInvalid("JWS Protected Header is invalid")}}if(!(0,A.default)(p,e.header)){throw new r.JWSInvalid("JWS Protected and JWS Unprotected Header Parameter names must be disjoint")}const g={...p,...e.header};const h=(0,u.default)(r.JWSInvalid,new Map([["b64",true]]),n===null||n===void 0?void 0:n.crit,p,g);let f=true;if(h.has("b64")){f=p.b64;if(typeof f!=="boolean"){throw new r.JWSInvalid('The "b64" (base64url-encode payload) Header Parameter must be a boolean')}}const{alg:E}=g;if(typeof E!=="string"||!E){throw new r.JWSInvalid('JWS "alg" (Algorithm) Header Parameter missing or invalid')}const m=n&&(0,l.default)("algorithms",n.algorithms);if(m&&!m.has(E)){throw new r.JOSEAlgNotAllowed('"alg" (Algorithm) Header Parameter not allowed')}if(f){if(typeof e.payload!=="string"){throw new r.JWSInvalid("JWS Payload must be a string")}}else if(typeof e.payload!=="string"&&!(e.payload instanceof Uint8Array)){throw new r.JWSInvalid("JWS Payload must be a string or an Uint8Array instance")}let C=false;if(typeof t==="function"){t=await t(p,e);C=true}(0,c.default)(E,t,"verify");const Q=(0,o.concat)(o.encoder.encode((d=e.protected)!==null&&d!==void 0?d:""),o.encoder.encode("."),typeof e.payload==="string"?o.encoder.encode(e.payload):e.payload);let I;try{I=(0,s.decode)(e.signature)}catch{throw new r.JWSInvalid("Failed to base64url decode the signature")}const B=await(0,i.default)(E,t,I,Q);if(!B){throw new r.JWSSignatureVerificationFailed}let y;if(f){try{y=(0,s.decode)(e.payload)}catch{throw new r.JWSInvalid("Failed to base64url decode the payload")}}else if(typeof e.payload==="string"){y=o.encoder.encode(e.payload)}else{y=e.payload}const b={payload:y};if(e.protected!==undefined){b.protectedHeader=p}if(e.header!==undefined){b.unprotectedHeader=e.header}if(C){return{...b,key:t}}return b}t.flattenedVerify=flattenedVerify},4268:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.GeneralSign=void 0;const s=n(4825);const i=n(4419);class IndividualSignature{constructor(e,t,n){this.parent=e;this.key=t;this.options=n}setProtectedHeader(e){if(this.protectedHeader){throw new TypeError("setProtectedHeader can only be called once")}this.protectedHeader=e;return this}setUnprotectedHeader(e){if(this.unprotectedHeader){throw new TypeError("setUnprotectedHeader can only be called once")}this.unprotectedHeader=e;return this}addSignature(...e){return this.parent.addSignature(...e)}sign(...e){return this.parent.sign(...e)}done(){return this.parent}}class GeneralSign{constructor(e){this._signatures=[];this._payload=e}addSignature(e,t){const n=new IndividualSignature(this,e,t);this._signatures.push(n);return n}async sign(){if(!this._signatures.length){throw new i.JWSInvalid("at least one signature must be added")}const e={signatures:[],payload:""};for(let t=0;t{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.generalVerify=void 0;const s=n(2095);const i=n(4419);const r=n(9127);async function generalVerify(e,t,n){if(!(0,r.default)(e)){throw new i.JWSInvalid("General JWS must be an object")}if(!Array.isArray(e.signatures)||!e.signatures.every(r.default)){throw new i.JWSInvalid("JWS Signatures missing or incorrect type")}for(const i of e.signatures){try{return await(0,s.flattenedVerify)({header:i.header,payload:e.payload,protected:i.protected,signature:i.signature},t,n)}catch{}}throw new i.JWSSignatureVerificationFailed}t.generalVerify=generalVerify},3378:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.jwtDecrypt=void 0;const s=n(7651);const i=n(7274);const r=n(4419);async function jwtDecrypt(e,t,n){const o=await(0,s.compactDecrypt)(e,t,n);const A=(0,i.default)(o.protectedHeader,o.plaintext,n);const{protectedHeader:a}=o;if(a.iss!==undefined&&a.iss!==A.iss){throw new r.JWTClaimValidationFailed('replicated "iss" claim header parameter mismatch',"iss","mismatch")}if(a.sub!==undefined&&a.sub!==A.sub){throw new r.JWTClaimValidationFailed('replicated "sub" claim header parameter mismatch',"sub","mismatch")}if(a.aud!==undefined&&JSON.stringify(a.aud)!==JSON.stringify(A.aud)){throw new r.JWTClaimValidationFailed('replicated "aud" claim header parameter mismatch',"aud","mismatch")}const c={payload:A,protectedHeader:a};if(typeof t==="function"){return{...c,key:o.key}}return c}t.jwtDecrypt=jwtDecrypt},960:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.EncryptJWT=void 0;const s=n(6203);const i=n(1691);const r=n(1908);class EncryptJWT extends r.ProduceJWT{setProtectedHeader(e){if(this._protectedHeader){throw new TypeError("setProtectedHeader can only be called once")}this._protectedHeader=e;return this}setKeyManagementParameters(e){if(this._keyManagementParameters){throw new TypeError("setKeyManagementParameters can only be called once")}this._keyManagementParameters=e;return this}setContentEncryptionKey(e){if(this._cek){throw new TypeError("setContentEncryptionKey can only be called once")}this._cek=e;return this}setInitializationVector(e){if(this._iv){throw new TypeError("setInitializationVector can only be called once")}this._iv=e;return this}replicateIssuerAsHeader(){this._replicateIssuerAsHeader=true;return this}replicateSubjectAsHeader(){this._replicateSubjectAsHeader=true;return this}replicateAudienceAsHeader(){this._replicateAudienceAsHeader=true;return this}async encrypt(e,t){const n=new s.CompactEncrypt(i.encoder.encode(JSON.stringify(this._payload)));if(this._replicateIssuerAsHeader){this._protectedHeader={...this._protectedHeader,iss:this._payload.iss}}if(this._replicateSubjectAsHeader){this._protectedHeader={...this._protectedHeader,sub:this._payload.sub}}if(this._replicateAudienceAsHeader){this._protectedHeader={...this._protectedHeader,aud:this._payload.aud}}n.setProtectedHeader(this._protectedHeader);if(this._iv){n.setInitializationVector(this._iv)}if(this._cek){n.setContentEncryptionKey(this._cek)}if(this._keyManagementParameters){n.setKeyManagementParameters(this._keyManagementParameters)}return n.encrypt(e,t)}}t.EncryptJWT=EncryptJWT},1908:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.ProduceJWT=void 0;const s=n(4476);const i=n(9127);const r=n(7810);class ProduceJWT{constructor(e){if(!(0,i.default)(e)){throw new TypeError("JWT Claims Set MUST be an object")}this._payload=e}setIssuer(e){this._payload={...this._payload,iss:e};return this}setSubject(e){this._payload={...this._payload,sub:e};return this}setAudience(e){this._payload={...this._payload,aud:e};return this}setJti(e){this._payload={...this._payload,jti:e};return this}setNotBefore(e){if(typeof e==="number"){this._payload={...this._payload,nbf:e}}else{this._payload={...this._payload,nbf:(0,s.default)(new Date)+(0,r.default)(e)}}return this}setExpirationTime(e){if(typeof e==="number"){this._payload={...this._payload,exp:e}}else{this._payload={...this._payload,exp:(0,s.default)(new Date)+(0,r.default)(e)}}return this}setIssuedAt(e){if(typeof e==="undefined"){this._payload={...this._payload,iat:(0,s.default)(new Date)}}else{this._payload={...this._payload,iat:e}}return this}}t.ProduceJWT=ProduceJWT},8882:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.SignJWT=void 0;const s=n(8257);const i=n(4419);const r=n(1691);const o=n(1908);class SignJWT extends o.ProduceJWT{setProtectedHeader(e){this._protectedHeader=e;return this}async sign(e,t){var n;const o=new s.CompactSign(r.encoder.encode(JSON.stringify(this._payload)));o.setProtectedHeader(this._protectedHeader);if(Array.isArray((n=this._protectedHeader)===null||n===void 0?void 0:n.crit)&&this._protectedHeader.crit.includes("b64")&&this._protectedHeader.b64===false){throw new i.JWTInvalid("JWTs MUST NOT use unencoded payload")}return o.sign(e,t)}}t.SignJWT=SignJWT},8568:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.UnsecuredJWT=void 0;const s=n(518);const i=n(1691);const r=n(4419);const o=n(7274);const A=n(1908);class UnsecuredJWT extends A.ProduceJWT{encode(){const e=s.encode(JSON.stringify({alg:"none"}));const t=s.encode(JSON.stringify(this._payload));return`${e}.${t}.`}static decode(e,t){if(typeof e!=="string"){throw new r.JWTInvalid("Unsecured JWT must be a string")}const{0:n,1:A,2:a,length:c}=e.split(".");if(c!==3||a!==""){throw new r.JWTInvalid("Invalid Unsecured JWT")}let u;try{u=JSON.parse(i.decoder.decode(s.decode(n)));if(u.alg!=="none")throw new Error}catch{throw new r.JWTInvalid("Invalid Unsecured JWT")}const l=(0,o.default)(u,s.decode(A),t);return{payload:l,header:u}}}t.UnsecuredJWT=UnsecuredJWT},9887:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.jwtVerify=void 0;const s=n(5212);const i=n(7274);const r=n(4419);async function jwtVerify(e,t,n){var o;const A=await(0,s.compactVerify)(e,t,n);if(((o=A.protectedHeader.crit)===null||o===void 0?void 0:o.includes("b64"))&&A.protectedHeader.b64===false){throw new r.JWTInvalid("JWTs MUST NOT use unencoded payload")}const a=(0,i.default)(A.protectedHeader,A.payload,n);const c={payload:a,protectedHeader:A.protectedHeader};if(typeof t==="function"){return{...c,key:A.key}}return c}t.jwtVerify=jwtVerify},465:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.exportJWK=t.exportPKCS8=t.exportSPKI=void 0;const s=n(858);const i=n(858);const r=n(997);async function exportSPKI(e){return(0,s.toSPKI)(e)}t.exportSPKI=exportSPKI;async function exportPKCS8(e){return(0,i.toPKCS8)(e)}t.exportPKCS8=exportPKCS8;async function exportJWK(e){return(0,r.default)(e)}t.exportJWK=exportJWK},1036:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.generateKeyPair=void 0;const s=n(9378);async function generateKeyPair(e,t){return(0,s.generateKeyPair)(e,t)}t.generateKeyPair=generateKeyPair},6617:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.generateSecret=void 0;const s=n(9378);async function generateSecret(e,t){return(0,s.generateSecret)(e,t)}t.generateSecret=generateSecret},4230:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.importJWK=t.importPKCS8=t.importX509=t.importSPKI=void 0;const s=n(518);const i=n(858);const r=n(2659);const o=n(4419);const A=n(9127);async function importSPKI(e,t,n){if(typeof e!=="string"||e.indexOf("-----BEGIN PUBLIC KEY-----")!==0){throw new TypeError('"spki" must be SPKI formatted string')}return(0,i.fromSPKI)(e,t,n)}t.importSPKI=importSPKI;async function importX509(e,t,n){if(typeof e!=="string"||e.indexOf("-----BEGIN CERTIFICATE-----")!==0){throw new TypeError('"x509" must be X.509 formatted string')}return(0,i.fromX509)(e,t,n)}t.importX509=importX509;async function importPKCS8(e,t,n){if(typeof e!=="string"||e.indexOf("-----BEGIN PRIVATE KEY-----")!==0){throw new TypeError('"pkcs8" must be PKCS#8 formatted string')}return(0,i.fromPKCS8)(e,t,n)}t.importPKCS8=importPKCS8;async function importJWK(e,t,n){var i;if(!(0,A.default)(e)){throw new TypeError("JWK must be an object")}t||(t=e.alg);switch(e.kty){case"oct":if(typeof e.k!=="string"||!e.k){throw new TypeError('missing "k" (Key Value) Parameter value')}n!==null&&n!==void 0?n:n=e.ext!==true;if(n){return(0,r.default)({...e,alg:t,ext:(i=e.ext)!==null&&i!==void 0?i:false})}return(0,s.decode)(e.k);case"RSA":if(e.oth!==undefined){throw new o.JOSENotSupported('RSA JWK "oth" (Other Primes Info) Parameter value is not supported')}case"EC":case"OKP":return(0,r.default)({...e,alg:t});default:throw new o.JOSENotSupported('Unsupported "kty" (Key Type) Parameter value')}}t.importJWK=importJWK},233:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.unwrap=t.wrap=void 0;const s=n(6476);const i=n(6137);const r=n(4630);const o=n(518);async function wrap(e,t,n,i){const A=e.slice(0,7);i||(i=(0,r.default)(A));const{ciphertext:a,tag:c}=await(0,s.default)(A,n,t,i,new Uint8Array(0));return{encryptedKey:a,iv:(0,o.encode)(i),tag:(0,o.encode)(c)}}t.wrap=wrap;async function unwrap(e,t,n,s,r){const o=e.slice(0,7);return(0,i.default)(o,t,n,s,r,new Uint8Array(0))}t.unwrap=unwrap},1691:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.concatKdf=t.lengthAndInput=t.uint32be=t.uint64be=t.p2s=t.concat=t.decoder=t.encoder=void 0;const s=n(2355);t.encoder=new TextEncoder;t.decoder=new TextDecoder;const i=2**32;function concat(...e){const t=e.reduce(((e,{length:t})=>e+t),0);const n=new Uint8Array(t);let s=0;e.forEach((e=>{n.set(e,s);s+=e.length}));return n}t.concat=concat;function p2s(e,n){return concat(t.encoder.encode(e),new Uint8Array([0]),n)}t.p2s=p2s;function writeUInt32BE(e,t,n){if(t<0||t>=i){throw new RangeError(`value must be >= 0 and <= ${i-1}. Received ${t}`)}e.set([t>>>24,t>>>16,t>>>8,t&255],n)}function uint64be(e){const t=Math.floor(e/i);const n=e%i;const s=new Uint8Array(8);writeUInt32BE(s,t,0);writeUInt32BE(s,n,4);return s}t.uint64be=uint64be;function uint32be(e){const t=new Uint8Array(4);writeUInt32BE(t,e);return t}t.uint32be=uint32be;function lengthAndInput(e){return concat(uint32be(e.length),e)}t.lengthAndInput=lengthAndInput;async function concatKdf(e,t,n){const i=Math.ceil((t>>3)/32);const r=new Uint8Array(i*32);for(let t=0;t>3)}t.concatKdf=concatKdf},3987:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.bitLength=void 0;const s=n(4419);const i=n(5770);function bitLength(e){switch(e){case"A128GCM":return 128;case"A192GCM":return 192;case"A256GCM":case"A128CBC-HS256":return 256;case"A192CBC-HS384":return 384;case"A256CBC-HS512":return 512;default:throw new s.JOSENotSupported(`Unsupported JWE Algorithm: ${e}`)}}t.bitLength=bitLength;t["default"]=e=>(0,i.default)(new Uint8Array(bitLength(e)>>3))},1120:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(4419);const i=n(4630);const checkIvLength=(e,t)=>{if(t.length<<3!==(0,i.bitLength)(e)){throw new s.JWEInvalid("Invalid Initialization Vector length")}};t["default"]=checkIvLength},6241:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(1146);const i=n(7947);const symmetricTypeCheck=(e,t)=>{if(t instanceof Uint8Array)return;if(!(0,i.default)(t)){throw new TypeError((0,s.withAlg)(e,t,...i.types,"Uint8Array"))}if(t.type!=="secret"){throw new TypeError(`${i.types.join(" or ")} instances for symmetric algorithms must be of type "secret"`)}};const asymmetricTypeCheck=(e,t,n)=>{if(!(0,i.default)(t)){throw new TypeError((0,s.withAlg)(e,t,...i.types))}if(t.type==="secret"){throw new TypeError(`${i.types.join(" or ")} instances for asymmetric algorithms must not be of type "secret"`)}if(n==="sign"&&t.type==="public"){throw new TypeError(`${i.types.join(" or ")} instances for asymmetric algorithm signing must be of type "private"`)}if(n==="decrypt"&&t.type==="public"){throw new TypeError(`${i.types.join(" or ")} instances for asymmetric algorithm decryption must be of type "private"`)}if(t.algorithm&&n==="verify"&&t.type==="private"){throw new TypeError(`${i.types.join(" or ")} instances for asymmetric algorithm verifying must be of type "public"`)}if(t.algorithm&&n==="encrypt"&&t.type==="private"){throw new TypeError(`${i.types.join(" or ")} instances for asymmetric algorithm encryption must be of type "public"`)}};const checkKeyType=(e,t,n)=>{const s=e.startsWith("HS")||e==="dir"||e.startsWith("PBES2")||/^A\d{3}(?:GCM)?KW$/.test(e);if(s){symmetricTypeCheck(e,t)}else{asymmetricTypeCheck(e,t,n)}};t["default"]=checkKeyType},3499:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(4419);function checkP2s(e){if(!(e instanceof Uint8Array)||e.length<8){throw new s.JWEInvalid("PBES2 Salt Input must be 8 or more octets")}}t["default"]=checkP2s},3386:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.checkEncCryptoKey=t.checkSigCryptoKey=void 0;function unusable(e,t="algorithm.name"){return new TypeError(`CryptoKey does not support this operation, its ${t} must be ${e}`)}function isAlgorithm(e,t){return e.name===t}function getHashLength(e){return parseInt(e.name.slice(4),10)}function getNamedCurve(e){switch(e){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}function checkUsage(e,t){if(t.length&&!t.some((t=>e.usages.includes(t)))){let e="CryptoKey does not support this operation, its usages must include ";if(t.length>2){const n=t.pop();e+=`one of ${t.join(", ")}, or ${n}.`}else if(t.length===2){e+=`one of ${t[0]} or ${t[1]}.`}else{e+=`${t[0]}.`}throw new TypeError(e)}}function checkSigCryptoKey(e,t,...n){switch(t){case"HS256":case"HS384":case"HS512":{if(!isAlgorithm(e.algorithm,"HMAC"))throw unusable("HMAC");const n=parseInt(t.slice(2),10);const s=getHashLength(e.algorithm.hash);if(s!==n)throw unusable(`SHA-${n}`,"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!isAlgorithm(e.algorithm,"RSASSA-PKCS1-v1_5"))throw unusable("RSASSA-PKCS1-v1_5");const n=parseInt(t.slice(2),10);const s=getHashLength(e.algorithm.hash);if(s!==n)throw unusable(`SHA-${n}`,"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!isAlgorithm(e.algorithm,"RSA-PSS"))throw unusable("RSA-PSS");const n=parseInt(t.slice(2),10);const s=getHashLength(e.algorithm.hash);if(s!==n)throw unusable(`SHA-${n}`,"algorithm.hash");break}case"EdDSA":{if(e.algorithm.name!=="Ed25519"&&e.algorithm.name!=="Ed448"){throw unusable("Ed25519 or Ed448")}break}case"ES256":case"ES384":case"ES512":{if(!isAlgorithm(e.algorithm,"ECDSA"))throw unusable("ECDSA");const n=getNamedCurve(t);const s=e.algorithm.namedCurve;if(s!==n)throw unusable(n,"algorithm.namedCurve");break}default:throw new TypeError("CryptoKey does not support this operation")}checkUsage(e,n)}t.checkSigCryptoKey=checkSigCryptoKey;function checkEncCryptoKey(e,t,...n){switch(t){case"A128GCM":case"A192GCM":case"A256GCM":{if(!isAlgorithm(e.algorithm,"AES-GCM"))throw unusable("AES-GCM");const n=parseInt(t.slice(1,4),10);const s=e.algorithm.length;if(s!==n)throw unusable(n,"algorithm.length");break}case"A128KW":case"A192KW":case"A256KW":{if(!isAlgorithm(e.algorithm,"AES-KW"))throw unusable("AES-KW");const n=parseInt(t.slice(1,4),10);const s=e.algorithm.length;if(s!==n)throw unusable(n,"algorithm.length");break}case"ECDH":{switch(e.algorithm.name){case"ECDH":case"X25519":case"X448":break;default:throw unusable("ECDH, X25519, or X448")}break}case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":if(!isAlgorithm(e.algorithm,"PBKDF2"))throw unusable("PBKDF2");break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":{if(!isAlgorithm(e.algorithm,"RSA-OAEP"))throw unusable("RSA-OAEP");const n=parseInt(t.slice(9),10)||1;const s=getHashLength(e.algorithm.hash);if(s!==n)throw unusable(`SHA-${n}`,"algorithm.hash");break}default:throw new TypeError("CryptoKey does not support this operation")}checkUsage(e,n)}t.checkEncCryptoKey=checkEncCryptoKey},6127:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(6083);const i=n(3706);const r=n(6898);const o=n(9526);const A=n(518);const a=n(4419);const c=n(3987);const u=n(4230);const l=n(6241);const d=n(9127);const p=n(233);async function decryptKeyManagement(e,t,n,g,h){(0,l.default)(e,t,"decrypt");switch(e){case"dir":{if(n!==undefined)throw new a.JWEInvalid("Encountered unexpected JWE Encrypted Key");return t}case"ECDH-ES":if(n!==undefined)throw new a.JWEInvalid("Encountered unexpected JWE Encrypted Key");case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":{if(!(0,d.default)(g.epk))throw new a.JWEInvalid(`JOSE Header "epk" (Ephemeral Public Key) missing or invalid`);if(!i.ecdhAllowed(t))throw new a.JOSENotSupported("ECDH with the provided key is not allowed or not supported by your javascript runtime");const r=await(0,u.importJWK)(g.epk,e);let o;let l;if(g.apu!==undefined){if(typeof g.apu!=="string")throw new a.JWEInvalid(`JOSE Header "apu" (Agreement PartyUInfo) invalid`);try{o=(0,A.decode)(g.apu)}catch{throw new a.JWEInvalid("Failed to base64url decode the apu")}}if(g.apv!==undefined){if(typeof g.apv!=="string")throw new a.JWEInvalid(`JOSE Header "apv" (Agreement PartyVInfo) invalid`);try{l=(0,A.decode)(g.apv)}catch{throw new a.JWEInvalid("Failed to base64url decode the apv")}}const p=await i.deriveKey(r,t,e==="ECDH-ES"?g.enc:e,e==="ECDH-ES"?(0,c.bitLength)(g.enc):parseInt(e.slice(-5,-2),10),o,l);if(e==="ECDH-ES")return p;if(n===undefined)throw new a.JWEInvalid("JWE Encrypted Key missing");return(0,s.unwrap)(e.slice(-6),p,n)}case"RSA1_5":case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":{if(n===undefined)throw new a.JWEInvalid("JWE Encrypted Key missing");return(0,o.decrypt)(e,t,n)}case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":{if(n===undefined)throw new a.JWEInvalid("JWE Encrypted Key missing");if(typeof g.p2c!=="number")throw new a.JWEInvalid(`JOSE Header "p2c" (PBES2 Count) missing or invalid`);const s=(h===null||h===void 0?void 0:h.maxPBES2Count)||1e4;if(g.p2c>s)throw new a.JWEInvalid(`JOSE Header "p2c" (PBES2 Count) out is of acceptable bounds`);if(typeof g.p2s!=="string")throw new a.JWEInvalid(`JOSE Header "p2s" (PBES2 Salt) missing or invalid`);let i;try{i=(0,A.decode)(g.p2s)}catch{throw new a.JWEInvalid("Failed to base64url decode the p2s")}return(0,r.decrypt)(e,t,n,g.p2c,i)}case"A128KW":case"A192KW":case"A256KW":{if(n===undefined)throw new a.JWEInvalid("JWE Encrypted Key missing");return(0,s.unwrap)(e,t,n)}case"A128GCMKW":case"A192GCMKW":case"A256GCMKW":{if(n===undefined)throw new a.JWEInvalid("JWE Encrypted Key missing");if(typeof g.iv!=="string")throw new a.JWEInvalid(`JOSE Header "iv" (Initialization Vector) missing or invalid`);if(typeof g.tag!=="string")throw new a.JWEInvalid(`JOSE Header "tag" (Authentication Tag) missing or invalid`);let s;try{s=(0,A.decode)(g.iv)}catch{throw new a.JWEInvalid("Failed to base64url decode the iv")}let i;try{i=(0,A.decode)(g.tag)}catch{throw new a.JWEInvalid("Failed to base64url decode the tag")}return(0,p.unwrap)(e,t,n,s,i)}default:{throw new a.JOSENotSupported('Invalid or unsupported "alg" (JWE Algorithm) header value')}}}t["default"]=decryptKeyManagement},3286:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(6083);const i=n(3706);const r=n(6898);const o=n(9526);const A=n(518);const a=n(3987);const c=n(4419);const u=n(465);const l=n(6241);const d=n(233);async function encryptKeyManagement(e,t,n,p,g={}){let h;let f;let E;(0,l.default)(e,n,"encrypt");switch(e){case"dir":{E=n;break}case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":{if(!i.ecdhAllowed(n)){throw new c.JOSENotSupported("ECDH with the provided key is not allowed or not supported by your javascript runtime")}const{apu:r,apv:o}=g;let{epk:l}=g;l||(l=(await i.generateEpk(n)).privateKey);const{x:d,y:m,crv:C,kty:Q}=await(0,u.exportJWK)(l);const I=await i.deriveKey(n,l,e==="ECDH-ES"?t:e,e==="ECDH-ES"?(0,a.bitLength)(t):parseInt(e.slice(-5,-2),10),r,o);f={epk:{x:d,crv:C,kty:Q}};if(Q==="EC")f.epk.y=m;if(r)f.apu=(0,A.encode)(r);if(o)f.apv=(0,A.encode)(o);if(e==="ECDH-ES"){E=I;break}E=p||(0,a.default)(t);const B=e.slice(-6);h=await(0,s.wrap)(B,I,E);break}case"RSA1_5":case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":{E=p||(0,a.default)(t);h=await(0,o.encrypt)(e,n,E);break}case"PBES2-HS256+A128KW":case"PBES2-HS384+A192KW":case"PBES2-HS512+A256KW":{E=p||(0,a.default)(t);const{p2c:s,p2s:i}=g;({encryptedKey:h,...f}=await(0,r.encrypt)(e,n,E,s,i));break}case"A128KW":case"A192KW":case"A256KW":{E=p||(0,a.default)(t);h=await(0,s.wrap)(e,n,E);break}case"A128GCMKW":case"A192GCMKW":case"A256GCMKW":{E=p||(0,a.default)(t);const{iv:s}=g;({encryptedKey:h,...f}=await(0,d.wrap)(e,n,E,s));break}default:{throw new c.JOSENotSupported('Invalid or unsupported "alg" (JWE Algorithm) header value')}}return{cek:E,encryptedKey:h,parameters:f}}t["default"]=encryptKeyManagement},4476:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=e=>Math.floor(e.getTime()/1e3)},1146:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.withAlg=void 0;function message(e,t,...n){if(n.length>2){const t=n.pop();e+=`one of type ${n.join(", ")}, or ${t}.`}else if(n.length===2){e+=`one of type ${n[0]} or ${n[1]}.`}else{e+=`of type ${n[0]}.`}if(t==null){e+=` Received ${t}`}else if(typeof t==="function"&&t.name){e+=` Received function ${t.name}`}else if(typeof t==="object"&&t!=null){if(t.constructor&&t.constructor.name){e+=` Received an instance of ${t.constructor.name}`}}return e}t["default"]=(e,...t)=>message("Key must be ",e,...t);function withAlg(e,t,...n){return message(`Key for the ${e} algorithm must be `,t,...n)}t.withAlg=withAlg},6063:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const isDisjoint=(...e)=>{const t=e.filter(Boolean);if(t.length===0||t.length===1){return true}let n;for(const e of t){const t=Object.keys(e);if(!n||n.size===0){n=new Set(t);continue}for(const e of t){if(n.has(e)){return false}n.add(e)}}return true};t["default"]=isDisjoint},9127:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});function isObjectLike(e){return typeof e==="object"&&e!==null}function isObject(e){if(!isObjectLike(e)||Object.prototype.toString.call(e)!=="[object Object]"){return false}if(Object.getPrototypeOf(e)===null){return true}let t=e;while(Object.getPrototypeOf(t)!==null){t=Object.getPrototypeOf(t)}return Object.getPrototypeOf(e)===t}t["default"]=isObject},4630:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.bitLength=void 0;const s=n(4419);const i=n(5770);function bitLength(e){switch(e){case"A128GCM":case"A128GCMKW":case"A192GCM":case"A192GCMKW":case"A256GCM":case"A256GCMKW":return 96;case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":return 128;default:throw new s.JOSENotSupported(`Unsupported JWE Algorithm: ${e}`)}}t.bitLength=bitLength;t["default"]=e=>(0,i.default)(new Uint8Array(bitLength(e)>>3))},7274:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(4419);const i=n(1691);const r=n(4476);const o=n(7810);const A=n(9127);const normalizeTyp=e=>e.toLowerCase().replace(/^application\//,"");const checkAudiencePresence=(e,t)=>{if(typeof e==="string"){return t.includes(e)}if(Array.isArray(e)){return t.some(Set.prototype.has.bind(new Set(e)))}return false};t["default"]=(e,t,n={})=>{const{typ:a}=n;if(a&&(typeof e.typ!=="string"||normalizeTyp(e.typ)!==normalizeTyp(a))){throw new s.JWTClaimValidationFailed('unexpected "typ" JWT header value',"typ","check_failed")}let c;try{c=JSON.parse(i.decoder.decode(t))}catch{}if(!(0,A.default)(c)){throw new s.JWTInvalid("JWT Claims Set must be a top-level JSON object")}const{requiredClaims:u=[],issuer:l,subject:d,audience:p,maxTokenAge:g}=n;if(g!==undefined)u.push("iat");if(p!==undefined)u.push("aud");if(d!==undefined)u.push("sub");if(l!==undefined)u.push("iss");for(const e of new Set(u.reverse())){if(!(e in c)){throw new s.JWTClaimValidationFailed(`missing required "${e}" claim`,e,"missing")}}if(l&&!(Array.isArray(l)?l:[l]).includes(c.iss)){throw new s.JWTClaimValidationFailed('unexpected "iss" claim value',"iss","check_failed")}if(d&&c.sub!==d){throw new s.JWTClaimValidationFailed('unexpected "sub" claim value',"sub","check_failed")}if(p&&!checkAudiencePresence(c.aud,typeof p==="string"?[p]:p)){throw new s.JWTClaimValidationFailed('unexpected "aud" claim value',"aud","check_failed")}let h;switch(typeof n.clockTolerance){case"string":h=(0,o.default)(n.clockTolerance);break;case"number":h=n.clockTolerance;break;case"undefined":h=0;break;default:throw new TypeError("Invalid clockTolerance option type")}const{currentDate:f}=n;const E=(0,r.default)(f||new Date);if((c.iat!==undefined||g)&&typeof c.iat!=="number"){throw new s.JWTClaimValidationFailed('"iat" claim must be a number',"iat","invalid")}if(c.nbf!==undefined){if(typeof c.nbf!=="number"){throw new s.JWTClaimValidationFailed('"nbf" claim must be a number',"nbf","invalid")}if(c.nbf>E+h){throw new s.JWTClaimValidationFailed('"nbf" claim timestamp check failed',"nbf","check_failed")}}if(c.exp!==undefined){if(typeof c.exp!=="number"){throw new s.JWTClaimValidationFailed('"exp" claim must be a number',"exp","invalid")}if(c.exp<=E-h){throw new s.JWTExpired('"exp" claim timestamp check failed',"exp","check_failed")}}if(g){const e=E-c.iat;const t=typeof g==="number"?g:(0,o.default)(g);if(e-h>t){throw new s.JWTExpired('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed")}if(e<0-h){throw new s.JWTClaimValidationFailed('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}}return c}},7810:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const n=60;const s=n*60;const i=s*24;const r=i*7;const o=i*365.25;const A=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;t["default"]=e=>{const t=A.exec(e);if(!t){throw new TypeError("Invalid time period format")}const a=parseFloat(t[1]);const c=t[2].toLowerCase();switch(c){case"sec":case"secs":case"second":case"seconds":case"s":return Math.round(a);case"minute":case"minutes":case"min":case"mins":case"m":return Math.round(a*n);case"hour":case"hours":case"hr":case"hrs":case"h":return Math.round(a*s);case"day":case"days":case"d":return Math.round(a*i);case"week":case"weeks":case"w":return Math.round(a*r);default:return Math.round(a*o)}}},5148:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const validateAlgorithms=(e,t)=>{if(t!==undefined&&(!Array.isArray(t)||t.some((e=>typeof e!=="string")))){throw new TypeError(`"${e}" option must be an array of strings`)}if(!t){return undefined}return new Set(t)};t["default"]=validateAlgorithms},863:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(4419);function validateCrit(e,t,n,i,r){if(r.crit!==undefined&&i.crit===undefined){throw new e('"crit" (Critical) Header Parameter MUST be integrity protected')}if(!i||i.crit===undefined){return new Set}if(!Array.isArray(i.crit)||i.crit.length===0||i.crit.some((e=>typeof e!=="string"||e.length===0))){throw new e('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present')}let o;if(n!==undefined){o=new Map([...Object.entries(n),...t.entries()])}else{o=t}for(const t of i.crit){if(!o.has(t)){throw new s.JOSENotSupported(`Extension Header Parameter "${t}" is not recognized`)}if(r[t]===undefined){throw new e(`Extension Header Parameter "${t}" is missing`)}else if(o.get(t)&&i[t]===undefined){throw new e(`Extension Header Parameter "${t}" MUST be integrity protected`)}}return new Set(i.crit)}t["default"]=validateCrit},6083:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.unwrap=t.wrap=void 0;const s=n(4300);const i=n(6113);const r=n(4419);const o=n(1691);const A=n(6852);const a=n(3386);const c=n(2768);const u=n(1146);const l=n(4618);const d=n(7947);function checkKeySize(e,t){if(e.symmetricKeySize<<3!==parseInt(t.slice(1,4),10)){throw new TypeError(`Invalid key size for alg: ${t}`)}}function ensureKeyObject(e,t,n){if((0,c.default)(e)){return e}if(e instanceof Uint8Array){return(0,i.createSecretKey)(e)}if((0,A.isCryptoKey)(e)){(0,a.checkEncCryptoKey)(e,t,n);return i.KeyObject.from(e)}throw new TypeError((0,u.default)(e,...d.types,"Uint8Array"))}const wrap=(e,t,n)=>{const A=parseInt(e.slice(1,4),10);const a=`aes${A}-wrap`;if(!(0,l.default)(a)){throw new r.JOSENotSupported(`alg ${e} is not supported either by JOSE or your javascript runtime`)}const c=ensureKeyObject(t,e,"wrapKey");checkKeySize(c,e);const u=(0,i.createCipheriv)(a,c,s.Buffer.alloc(8,166));return(0,o.concat)(u.update(n),u.final())};t.wrap=wrap;const unwrap=(e,t,n)=>{const A=parseInt(e.slice(1,4),10);const a=`aes${A}-wrap`;if(!(0,l.default)(a)){throw new r.JOSENotSupported(`alg ${e} is not supported either by JOSE or your javascript runtime`)}const c=ensureKeyObject(t,e,"unwrapKey");checkKeySize(c,e);const u=(0,i.createDecipheriv)(a,c,s.Buffer.alloc(8,166));return(0,o.concat)(u.update(n),u.final())};t.unwrap=unwrap},858:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.fromX509=t.fromSPKI=t.fromPKCS8=t.toPKCS8=t.toSPKI=void 0;const s=n(6113);const i=n(4300);const r=n(6852);const o=n(2768);const A=n(1146);const a=n(7947);const genericExport=(e,t,n)=>{let i;if((0,r.isCryptoKey)(n)){if(!n.extractable){throw new TypeError("CryptoKey is not extractable")}i=s.KeyObject.from(n)}else if((0,o.default)(n)){i=n}else{throw new TypeError((0,A.default)(n,...a.types))}if(i.type!==e){throw new TypeError(`key is not a ${e} key`)}return i.export({format:"pem",type:t})};const toSPKI=e=>genericExport("public","spki",e);t.toSPKI=toSPKI;const toPKCS8=e=>genericExport("private","pkcs8",e);t.toPKCS8=toPKCS8;const fromPKCS8=e=>(0,s.createPrivateKey)({key:i.Buffer.from(e.replace(/(?:-----(?:BEGIN|END) PRIVATE KEY-----|\s)/g,""),"base64"),type:"pkcs8",format:"der"});t.fromPKCS8=fromPKCS8;const fromSPKI=e=>(0,s.createPublicKey)({key:i.Buffer.from(e.replace(/(?:-----(?:BEGIN|END) PUBLIC KEY-----|\s)/g,""),"base64"),type:"spki",format:"der"});t.fromSPKI=fromSPKI;const fromX509=e=>(0,s.createPublicKey)({key:e,type:"spki",format:"pem"});t.fromX509=fromX509},3888:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const n=2;const s=48;class Asn1SequenceDecoder{constructor(e){if(e[0]!==s){throw new TypeError}this.buffer=e;this.offset=1;const t=this.decodeLength();if(t!==e.length-this.offset){throw new TypeError}}decodeLength(){let e=this.buffer[this.offset++];if(e&128){const t=e&~128;e=0;for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(4300);const i=n(4419);const r=2;const o=3;const A=4;const a=48;const c=s.Buffer.from([0]);const u=s.Buffer.from([r]);const l=s.Buffer.from([o]);const d=s.Buffer.from([a]);const p=s.Buffer.from([A]);const encodeLength=e=>{if(e<128)return s.Buffer.from([e]);const t=s.Buffer.alloc(5);t.writeUInt32BE(e,1);let n=1;while(t[n]===0)n++;t[n-1]=128|5-n;return t.slice(n-1)};const g=new Map([["P-256",s.Buffer.from("06 08 2A 86 48 CE 3D 03 01 07".replace(/ /g,""),"hex")],["secp256k1",s.Buffer.from("06 05 2B 81 04 00 0A".replace(/ /g,""),"hex")],["P-384",s.Buffer.from("06 05 2B 81 04 00 22".replace(/ /g,""),"hex")],["P-521",s.Buffer.from("06 05 2B 81 04 00 23".replace(/ /g,""),"hex")],["ecPublicKey",s.Buffer.from("06 07 2A 86 48 CE 3D 02 01".replace(/ /g,""),"hex")],["X25519",s.Buffer.from("06 03 2B 65 6E".replace(/ /g,""),"hex")],["X448",s.Buffer.from("06 03 2B 65 6F".replace(/ /g,""),"hex")],["Ed25519",s.Buffer.from("06 03 2B 65 70".replace(/ /g,""),"hex")],["Ed448",s.Buffer.from("06 03 2B 65 71".replace(/ /g,""),"hex")]]);class DumbAsn1Encoder{constructor(){this.length=0;this.elements=[]}oidFor(e){const t=g.get(e);if(!t){throw new i.JOSENotSupported("Invalid or unsupported OID")}this.elements.push(t);this.length+=t.length}zero(){this.elements.push(u,s.Buffer.from([1]),c);this.length+=3}one(){this.elements.push(u,s.Buffer.from([1]),s.Buffer.from([1]));this.length+=3}unsignedInteger(e){if(e[0]&128){const t=encodeLength(e.length+1);this.elements.push(u,t,c,e);this.length+=2+t.length+e.length}else{let t=0;while(e[t]===0&&(e[t+1]&128)===0)t++;const n=encodeLength(e.length-t);this.elements.push(u,encodeLength(e.length-t),e.slice(t));this.length+=1+n.length+e.length-t}}octStr(e){const t=encodeLength(e.length);this.elements.push(p,encodeLength(e.length),e);this.length+=1+t.length+e.length}bitStr(e){const t=encodeLength(e.length+1);this.elements.push(l,encodeLength(e.length+1),c,e);this.length+=1+t.length+e.length+1}add(e){this.elements.push(e);this.length+=e.length}end(e=d){const t=encodeLength(this.length);return s.Buffer.concat([e,t,...this.elements],1+t.length+this.length)}}t["default"]=DumbAsn1Encoder},518:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.decode=t.encode=t.encodeBase64=t.decodeBase64=void 0;const s=n(4300);const i=n(1691);let r;function normalize(e){let t=e;if(t instanceof Uint8Array){t=i.decoder.decode(t)}return t}if(s.Buffer.isEncoding("base64url")){t.encode=r=e=>s.Buffer.from(e).toString("base64url")}else{t.encode=r=e=>s.Buffer.from(e).toString("base64").replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}const decodeBase64=e=>s.Buffer.from(e,"base64");t.decodeBase64=decodeBase64;const encodeBase64=e=>s.Buffer.from(e).toString("base64");t.encodeBase64=encodeBase64;const decode=e=>s.Buffer.from(normalize(e),"base64");t.decode=decode},4519:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(6113);const i=n(1691);function cbcTag(e,t,n,r,o,A){const a=(0,i.concat)(e,t,n,(0,i.uint64be)(e.length<<3));const c=(0,s.createHmac)(`sha${r}`,o);c.update(a);return c.digest().slice(0,A>>3)}t["default"]=cbcTag},4047:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(4419);const i=n(2768);const checkCekLength=(e,t)=>{let n;switch(e){case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":n=parseInt(e.slice(-3),10);break;case"A128GCM":case"A192GCM":case"A256GCM":n=parseInt(e.slice(1,4),10);break;default:throw new s.JOSENotSupported(`Content Encryption Algorithm ${e} is not supported either by JOSE or your javascript runtime`)}if(t instanceof Uint8Array){const e=t.byteLength<<3;if(e!==n){throw new s.JWEInvalid(`Invalid Content Encryption Key length. Expected ${n} bits, got ${e} bits`)}return}if((0,i.default)(t)&&t.type==="secret"){const e=t.symmetricKeySize<<3;if(e!==n){throw new s.JWEInvalid(`Invalid Content Encryption Key length. Expected ${n} bits, got ${e} bits`)}return}throw new TypeError("Invalid Content Encryption Key type")};t["default"]=checkCekLength},122:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.setModulusLength=t.weakMap=void 0;t.weakMap=new WeakMap;const getLength=(e,t)=>{let n=e.readUInt8(1);if((n&128)===0){if(t===0){return n}return getLength(e.subarray(2+n),t-1)}const s=n&127;n=0;for(let t=0;t{const n=e.readUInt8(1);if((n&128)===0){return getLength(e.subarray(2),t)}const s=n&127;return getLength(e.subarray(2+s),t)};const getModulusLength=e=>{var n,s;if(t.weakMap.has(e)){return t.weakMap.get(e)}const i=(s=(n=e.asymmetricKeyDetails)===null||n===void 0?void 0:n.modulusLength)!==null&&s!==void 0?s:getLengthOfSeqIndex(e.export({format:"der",type:"pkcs1"}),e.type==="private"?1:0)-1<<3;t.weakMap.set(e,i);return i};const setModulusLength=(e,n)=>{t.weakMap.set(e,n)};t.setModulusLength=setModulusLength;t["default"]=(e,t)=>{if(getModulusLength(e)<2048){throw new TypeError(`${t} requires key modulusLength to be 2048 bits or larger`)}}},4618:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(6113);let i;t["default"]=e=>{i||(i=new Set((0,s.getCiphers)()));return i.has(e)}},6137:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(6113);const i=n(1120);const r=n(4047);const o=n(1691);const A=n(4419);const a=n(5390);const c=n(4519);const u=n(6852);const l=n(3386);const d=n(2768);const p=n(1146);const g=n(4618);const h=n(7947);function cbcDecrypt(e,t,n,i,r,u){const l=parseInt(e.slice(1,4),10);if((0,d.default)(t)){t=t.export()}const p=t.subarray(l>>3);const h=t.subarray(0,l>>3);const f=parseInt(e.slice(-3),10);const E=`aes-${l}-cbc`;if(!(0,g.default)(E)){throw new A.JOSENotSupported(`alg ${e} is not supported by your javascript runtime`)}const m=(0,c.default)(u,i,n,f,h,l);let C;try{C=(0,a.default)(r,m)}catch{}if(!C){throw new A.JWEDecryptionFailed}let Q;try{const e=(0,s.createDecipheriv)(E,p,i);Q=(0,o.concat)(e.update(n),e.final())}catch{}if(!Q){throw new A.JWEDecryptionFailed}return Q}function gcmDecrypt(e,t,n,i,r,o){const a=parseInt(e.slice(1,4),10);const c=`aes-${a}-gcm`;if(!(0,g.default)(c)){throw new A.JOSENotSupported(`alg ${e} is not supported by your javascript runtime`)}try{const e=(0,s.createDecipheriv)(c,t,i,{authTagLength:16});e.setAuthTag(r);if(o.byteLength){e.setAAD(o,{plaintextLength:n.length})}const A=e.update(n);e.final();return A}catch{throw new A.JWEDecryptionFailed}}const decrypt=(e,t,n,o,a,c)=>{let g;if((0,u.isCryptoKey)(t)){(0,l.checkEncCryptoKey)(t,e,"decrypt");g=s.KeyObject.from(t)}else if(t instanceof Uint8Array||(0,d.default)(t)){g=t}else{throw new TypeError((0,p.default)(t,...h.types,"Uint8Array"))}(0,r.default)(e,g);(0,i.default)(e,o);switch(e){case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":return cbcDecrypt(e,g,n,o,a,c);case"A128GCM":case"A192GCM":case"A256GCM":return gcmDecrypt(e,g,n,o,a,c);default:throw new A.JOSENotSupported("Unsupported JWE Content Encryption Algorithm")}};t["default"]=decrypt},2355:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(6113);const digest=(e,t)=>(0,s.createHash)(e).update(t).digest();t["default"]=digest},4965:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(4419);function dsaDigest(e){switch(e){case"PS256":case"RS256":case"ES256":case"ES256K":return"sha256";case"PS384":case"RS384":case"ES384":return"sha384";case"PS512":case"RS512":case"ES512":return"sha512";case"EdDSA":return undefined;default:throw new s.JOSENotSupported(`alg ${e} is not supported either by JOSE or your javascript runtime`)}}t["default"]=dsaDigest},3706:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.ecdhAllowed=t.generateEpk=t.deriveKey=void 0;const s=n(6113);const i=n(3837);const r=n(9302);const o=n(1691);const A=n(4419);const a=n(6852);const c=n(3386);const u=n(2768);const l=n(1146);const d=n(7947);const p=(0,i.promisify)(s.generateKeyPair);async function deriveKey(e,t,n,i,r=new Uint8Array(0),A=new Uint8Array(0)){let p;if((0,a.isCryptoKey)(e)){(0,c.checkEncCryptoKey)(e,"ECDH");p=s.KeyObject.from(e)}else if((0,u.default)(e)){p=e}else{throw new TypeError((0,l.default)(e,...d.types))}let g;if((0,a.isCryptoKey)(t)){(0,c.checkEncCryptoKey)(t,"ECDH","deriveBits");g=s.KeyObject.from(t)}else if((0,u.default)(t)){g=t}else{throw new TypeError((0,l.default)(t,...d.types))}const h=(0,o.concat)((0,o.lengthAndInput)(o.encoder.encode(n)),(0,o.lengthAndInput)(r),(0,o.lengthAndInput)(A),(0,o.uint32be)(i));const f=(0,s.diffieHellman)({privateKey:g,publicKey:p});return(0,o.concatKdf)(f,i,h)}t.deriveKey=deriveKey;async function generateEpk(e){let t;if((0,a.isCryptoKey)(e)){t=s.KeyObject.from(e)}else if((0,u.default)(e)){t=e}else{throw new TypeError((0,l.default)(e,...d.types))}switch(t.asymmetricKeyType){case"x25519":return p("x25519");case"x448":{return p("x448")}case"ec":{const e=(0,r.default)(t);return p("ec",{namedCurve:e})}default:throw new A.JOSENotSupported("Invalid or unsupported EPK")}}t.generateEpk=generateEpk;const ecdhAllowed=e=>["P-256","P-384","P-521","X25519","X448"].includes((0,r.default)(e));t.ecdhAllowed=ecdhAllowed},6476:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(6113);const i=n(1120);const r=n(4047);const o=n(1691);const A=n(4519);const a=n(6852);const c=n(3386);const u=n(2768);const l=n(1146);const d=n(4419);const p=n(4618);const g=n(7947);function cbcEncrypt(e,t,n,i,r){const a=parseInt(e.slice(1,4),10);if((0,u.default)(n)){n=n.export()}const c=n.subarray(a>>3);const l=n.subarray(0,a>>3);const g=`aes-${a}-cbc`;if(!(0,p.default)(g)){throw new d.JOSENotSupported(`alg ${e} is not supported by your javascript runtime`)}const h=(0,s.createCipheriv)(g,c,i);const f=(0,o.concat)(h.update(t),h.final());const E=parseInt(e.slice(-3),10);const m=(0,A.default)(r,i,f,E,l,a);return{ciphertext:f,tag:m}}function gcmEncrypt(e,t,n,i,r){const o=parseInt(e.slice(1,4),10);const A=`aes-${o}-gcm`;if(!(0,p.default)(A)){throw new d.JOSENotSupported(`alg ${e} is not supported by your javascript runtime`)}const a=(0,s.createCipheriv)(A,n,i,{authTagLength:16});if(r.byteLength){a.setAAD(r,{plaintextLength:t.length})}const c=a.update(t);a.final();const u=a.getAuthTag();return{ciphertext:c,tag:u}}const encrypt=(e,t,n,o,A)=>{let p;if((0,a.isCryptoKey)(n)){(0,c.checkEncCryptoKey)(n,e,"encrypt");p=s.KeyObject.from(n)}else if(n instanceof Uint8Array||(0,u.default)(n)){p=n}else{throw new TypeError((0,l.default)(n,...g.types,"Uint8Array"))}(0,r.default)(e,p);(0,i.default)(e,o);switch(e){case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":return cbcEncrypt(e,t,p,o,A);case"A128GCM":case"A192GCM":case"A256GCM":return gcmEncrypt(e,t,p,o,A);default:throw new d.JOSENotSupported("Unsupported JWE Content Encryption Algorithm")}};t["default"]=encrypt},3650:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(3685);const i=n(5687);const r=n(2361);const o=n(4419);const A=n(1691);const fetchJwks=async(e,t,n)=>{let a;switch(e.protocol){case"https:":a=i.get;break;case"http:":a=s.get;break;default:throw new TypeError("Unsupported URL protocol.")}const{agent:c,headers:u}=n;const l=a(e.href,{agent:c,timeout:t,headers:u});const[d]=await Promise.race([(0,r.once)(l,"response"),(0,r.once)(l,"timeout")]);if(!d){l.destroy();throw new o.JWKSTimeout}if(d.statusCode!==200){throw new o.JOSEError("Expected 200 OK from the JSON Web Key Set HTTP response")}const p=[];for await(const e of d){p.push(e)}try{return JSON.parse(A.decoder.decode((0,A.concat)(...p)))}catch{throw new o.JOSEError("Failed to parse the JSON Web Key Set HTTP response as JSON")}};t["default"]=fetchJwks},9737:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.jwkImport=t.jwkExport=t.rsaPssParams=t.oneShotCallback=void 0;const[n,s]=process.versions.node.split(".").map((e=>parseInt(e,10)));t.oneShotCallback=n>=16||n===15&&s>=13;t.rsaPssParams=!("electron"in process.versions)&&(n>=17||n===16&&s>=9);t.jwkExport=n>=16||n===15&&s>=9;t.jwkImport=n>=16||n===15&&s>=12},9378:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.generateKeyPair=t.generateSecret=void 0;const s=n(6113);const i=n(3837);const r=n(5770);const o=n(122);const A=n(4419);const a=(0,i.promisify)(s.generateKeyPair);async function generateSecret(e,t){let n;switch(e){case"HS256":case"HS384":case"HS512":case"A128CBC-HS256":case"A192CBC-HS384":case"A256CBC-HS512":n=parseInt(e.slice(-3),10);break;case"A128KW":case"A192KW":case"A256KW":case"A128GCMKW":case"A192GCMKW":case"A256GCMKW":case"A128GCM":case"A192GCM":case"A256GCM":n=parseInt(e.slice(1,4),10);break;default:throw new A.JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}return(0,s.createSecretKey)((0,r.default)(new Uint8Array(n>>3)))}t.generateSecret=generateSecret;async function generateKeyPair(e,t){var n,s;switch(e){case"RS256":case"RS384":case"RS512":case"PS256":case"PS384":case"PS512":case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":case"RSA1_5":{const e=(n=t===null||t===void 0?void 0:t.modulusLength)!==null&&n!==void 0?n:2048;if(typeof e!=="number"||e<2048){throw new A.JOSENotSupported("Invalid or unsupported modulusLength option provided, 2048 bits or larger keys must be used")}const s=await a("rsa",{modulusLength:e,publicExponent:65537});(0,o.setModulusLength)(s.privateKey,e);(0,o.setModulusLength)(s.publicKey,e);return s}case"ES256":return a("ec",{namedCurve:"P-256"});case"ES256K":return a("ec",{namedCurve:"secp256k1"});case"ES384":return a("ec",{namedCurve:"P-384"});case"ES512":return a("ec",{namedCurve:"P-521"});case"EdDSA":{switch(t===null||t===void 0?void 0:t.crv){case undefined:case"Ed25519":return a("ed25519");case"Ed448":return a("ed448");default:throw new A.JOSENotSupported("Invalid or unsupported crv option provided, supported values are Ed25519 and Ed448")}}case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":const e=(s=t===null||t===void 0?void 0:t.crv)!==null&&s!==void 0?s:"P-256";switch(e){case undefined:case"P-256":case"P-384":case"P-521":return a("ec",{namedCurve:e});case"X25519":return a("x25519");case"X448":return a("x448");default:throw new A.JOSENotSupported("Invalid or unsupported crv option provided, supported values are P-256, P-384, P-521, X25519, and X448")}default:throw new A.JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value')}}t.generateKeyPair=generateKeyPair},9302:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.setCurve=t.weakMap=void 0;const s=n(4300);const i=n(6113);const r=n(4419);const o=n(6852);const A=n(2768);const a=n(1146);const c=n(7947);const u=s.Buffer.from([42,134,72,206,61,3,1,7]);const l=s.Buffer.from([43,129,4,0,34]);const d=s.Buffer.from([43,129,4,0,35]);const p=s.Buffer.from([43,129,4,0,10]);t.weakMap=new WeakMap;const namedCurveToJOSE=e=>{switch(e){case"prime256v1":return"P-256";case"secp384r1":return"P-384";case"secp521r1":return"P-521";case"secp256k1":return"secp256k1";default:throw new r.JOSENotSupported("Unsupported key curve for this operation")}};const getNamedCurve=(e,n)=>{var s;let g;if((0,o.isCryptoKey)(e)){g=i.KeyObject.from(e)}else if((0,A.default)(e)){g=e}else{throw new TypeError((0,a.default)(e,...c.types))}if(g.type==="secret"){throw new TypeError('only "private" or "public" type keys can be used for this operation')}switch(g.asymmetricKeyType){case"ed25519":case"ed448":return`Ed${g.asymmetricKeyType.slice(2)}`;case"x25519":case"x448":return`X${g.asymmetricKeyType.slice(1)}`;case"ec":{if(t.weakMap.has(g)){return t.weakMap.get(g)}let e=(s=g.asymmetricKeyDetails)===null||s===void 0?void 0:s.namedCurve;if(!e&&g.type==="private"){e=getNamedCurve((0,i.createPublicKey)(g),true)}else if(!e){const t=g.export({format:"der",type:"spki"});const n=t[1]<128?14:15;const s=t[n];const i=t.slice(n+1,n+1+s);if(i.equals(u)){e="prime256v1"}else if(i.equals(l)){e="secp384r1"}else if(i.equals(d)){e="secp521r1"}else if(i.equals(p)){e="secp256k1"}else{throw new r.JOSENotSupported("Unsupported key curve for this operation")}}if(n)return e;const o=namedCurveToJOSE(e);t.weakMap.set(g,o);return o}default:throw new TypeError("Invalid asymmetric key type for this operation")}};function setCurve(e,n){t.weakMap.set(e,n)}t.setCurve=setCurve;t["default"]=getNamedCurve},3170:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(6113);const i=n(6852);const r=n(3386);const o=n(1146);const A=n(7947);function getSignVerifyKey(e,t,n){if(t instanceof Uint8Array){if(!e.startsWith("HS")){throw new TypeError((0,o.default)(t,...A.types))}return(0,s.createSecretKey)(t)}if(t instanceof s.KeyObject){return t}if((0,i.isCryptoKey)(t)){(0,r.checkSigCryptoKey)(t,e,n);return s.KeyObject.from(t)}throw new TypeError((0,o.default)(t,...A.types,"Uint8Array"))}t["default"]=getSignVerifyKey},3811:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(4419);function hmacDigest(e){switch(e){case"HS256":return"sha256";case"HS384":return"sha384";case"HS512":return"sha512";default:throw new s.JOSENotSupported(`alg ${e} is not supported either by JOSE or your javascript runtime`)}}t["default"]=hmacDigest},7947:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.types=void 0;const s=n(6852);const i=n(2768);t["default"]=e=>(0,i.default)(e)||(0,s.isCryptoKey)(e);const r=["KeyObject"];t.types=r;if(globalThis.CryptoKey||(s.default===null||s.default===void 0?void 0:s.default.CryptoKey)){r.push("CryptoKey")}},2768:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(6113);const i=n(3837);t["default"]=i.types.isKeyObject?e=>i.types.isKeyObject(e):e=>e!=null&&e instanceof s.KeyObject},2659:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(4300);const i=n(6113);const r=n(518);const o=n(4419);const A=n(9302);const a=n(122);const c=n(3341);const u=n(9737);const parse=e=>{if(u.jwkImport&&e.kty!=="oct"){return e.d?(0,i.createPrivateKey)({format:"jwk",key:e}):(0,i.createPublicKey)({format:"jwk",key:e})}switch(e.kty){case"oct":{return(0,i.createSecretKey)((0,r.decode)(e.k))}case"RSA":{const t=new c.default;const n=e.d!==undefined;const r=s.Buffer.from(e.n,"base64");const o=s.Buffer.from(e.e,"base64");if(n){t.zero();t.unsignedInteger(r);t.unsignedInteger(o);t.unsignedInteger(s.Buffer.from(e.d,"base64"));t.unsignedInteger(s.Buffer.from(e.p,"base64"));t.unsignedInteger(s.Buffer.from(e.q,"base64"));t.unsignedInteger(s.Buffer.from(e.dp,"base64"));t.unsignedInteger(s.Buffer.from(e.dq,"base64"));t.unsignedInteger(s.Buffer.from(e.qi,"base64"))}else{t.unsignedInteger(r);t.unsignedInteger(o)}const A=t.end();const u={key:A,format:"der",type:"pkcs1"};const l=n?(0,i.createPrivateKey)(u):(0,i.createPublicKey)(u);(0,a.setModulusLength)(l,r.length<<3);return l}case"EC":{const t=new c.default;const n=e.d!==undefined;const r=s.Buffer.concat([s.Buffer.alloc(1,4),s.Buffer.from(e.x,"base64"),s.Buffer.from(e.y,"base64")]);if(n){t.zero();const n=new c.default;n.oidFor("ecPublicKey");n.oidFor(e.crv);t.add(n.end());const o=new c.default;o.one();o.octStr(s.Buffer.from(e.d,"base64"));const a=new c.default;a.bitStr(r);const u=a.end(s.Buffer.from([161]));o.add(u);const l=o.end();const d=new c.default;d.add(l);const p=d.end(s.Buffer.from([4]));t.add(p);const g=t.end();const h=(0,i.createPrivateKey)({key:g,format:"der",type:"pkcs8"});(0,A.setCurve)(h,e.crv);return h}const o=new c.default;o.oidFor("ecPublicKey");o.oidFor(e.crv);t.add(o.end());t.bitStr(r);const a=t.end();const u=(0,i.createPublicKey)({key:a,format:"der",type:"spki"});(0,A.setCurve)(u,e.crv);return u}case"OKP":{const t=new c.default;const n=e.d!==undefined;if(n){t.zero();const n=new c.default;n.oidFor(e.crv);t.add(n.end());const r=new c.default;r.octStr(s.Buffer.from(e.d,"base64"));const o=r.end(s.Buffer.from([4]));t.add(o);const A=t.end();return(0,i.createPrivateKey)({key:A,format:"der",type:"pkcs8"})}const r=new c.default;r.oidFor(e.crv);t.add(r.end());t.bitStr(s.Buffer.from(e.x,"base64"));const o=t.end();return(0,i.createPublicKey)({key:o,format:"der",type:"spki"})}default:throw new o.JOSENotSupported('Invalid or unsupported JWK "kty" (Key Type) Parameter value')}};t["default"]=parse},997:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(6113);const i=n(518);const r=n(3888);const o=n(4419);const A=n(9302);const a=n(6852);const c=n(2768);const u=n(1146);const l=n(7947);const d=n(9737);const keyToJWK=e=>{let t;if((0,a.isCryptoKey)(e)){if(!e.extractable){throw new TypeError("CryptoKey is not extractable")}t=s.KeyObject.from(e)}else if((0,c.default)(e)){t=e}else if(e instanceof Uint8Array){return{kty:"oct",k:(0,i.encode)(e)}}else{throw new TypeError((0,u.default)(e,...l.types,"Uint8Array"))}if(d.jwkExport){if(t.type!=="secret"&&!["rsa","ec","ed25519","x25519","ed448","x448"].includes(t.asymmetricKeyType)){throw new o.JOSENotSupported("Unsupported key asymmetricKeyType")}return t.export({format:"jwk"})}switch(t.type){case"secret":return{kty:"oct",k:(0,i.encode)(t.export())};case"private":case"public":{switch(t.asymmetricKeyType){case"rsa":{const e=t.export({format:"der",type:"pkcs1"});const n=new r.default(e);if(t.type==="private"){n.unsignedInteger()}const s=(0,i.encode)(n.unsignedInteger());const o=(0,i.encode)(n.unsignedInteger());let A;if(t.type==="private"){A={d:(0,i.encode)(n.unsignedInteger()),p:(0,i.encode)(n.unsignedInteger()),q:(0,i.encode)(n.unsignedInteger()),dp:(0,i.encode)(n.unsignedInteger()),dq:(0,i.encode)(n.unsignedInteger()),qi:(0,i.encode)(n.unsignedInteger())}}n.end();return{kty:"RSA",n:s,e:o,...A}}case"ec":{const e=(0,A.default)(t);let n;let r;let a;switch(e){case"secp256k1":n=64;r=31+2;a=-1;break;case"P-256":n=64;r=34+2;a=-1;break;case"P-384":n=96;r=33+2;a=-3;break;case"P-521":n=132;r=33+2;a=-3;break;default:throw new o.JOSENotSupported("Unsupported curve")}if(t.type==="public"){const s=t.export({type:"spki",format:"der"});return{kty:"EC",crv:e,x:(0,i.encode)(s.subarray(-n,-n/2)),y:(0,i.encode)(s.subarray(-n/2))}}const c=t.export({type:"pkcs8",format:"der"});if(c.length<100){r+=a}return{...keyToJWK((0,s.createPublicKey)(t)),d:(0,i.encode)(c.subarray(r,r+n/2))}}case"ed25519":case"x25519":{const e=(0,A.default)(t);if(t.type==="public"){const n=t.export({type:"spki",format:"der"});return{kty:"OKP",crv:e,x:(0,i.encode)(n.subarray(-32))}}const n=t.export({type:"pkcs8",format:"der"});return{...keyToJWK((0,s.createPublicKey)(t)),d:(0,i.encode)(n.subarray(-32))}}case"ed448":case"x448":{const e=(0,A.default)(t);if(t.type==="public"){const n=t.export({type:"spki",format:"der"});return{kty:"OKP",crv:e,x:(0,i.encode)(n.subarray(e==="Ed448"?-57:-56))}}const n=t.export({type:"pkcs8",format:"der"});return{...keyToJWK((0,s.createPublicKey)(t)),d:(0,i.encode)(n.subarray(e==="Ed448"?-57:-56))}}default:throw new o.JOSENotSupported("Unsupported key asymmetricKeyType")}}default:throw new o.JOSENotSupported("Unsupported key type")}};t["default"]=keyToJWK},2413:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(6113);const i=n(9302);const r=n(4419);const o=n(122);const A=n(9737);const a={padding:s.constants.RSA_PKCS1_PSS_PADDING,saltLength:s.constants.RSA_PSS_SALTLEN_DIGEST};const c=new Map([["ES256","P-256"],["ES256K","secp256k1"],["ES384","P-384"],["ES512","P-521"]]);function keyForCrypto(e,t){switch(e){case"EdDSA":if(!["ed25519","ed448"].includes(t.asymmetricKeyType)){throw new TypeError("Invalid key for this operation, its asymmetricKeyType must be ed25519 or ed448")}return t;case"RS256":case"RS384":case"RS512":if(t.asymmetricKeyType!=="rsa"){throw new TypeError("Invalid key for this operation, its asymmetricKeyType must be rsa")}(0,o.default)(t,e);return t;case A.rsaPssParams&&"PS256":case A.rsaPssParams&&"PS384":case A.rsaPssParams&&"PS512":if(t.asymmetricKeyType==="rsa-pss"){const{hashAlgorithm:n,mgf1HashAlgorithm:s,saltLength:i}=t.asymmetricKeyDetails;const r=parseInt(e.slice(-3),10);if(n!==undefined&&(n!==`sha${r}`||s!==n)){throw new TypeError(`Invalid key for this operation, its RSA-PSS parameters do not meet the requirements of "alg" ${e}`)}if(i!==undefined&&i>r>>3){throw new TypeError(`Invalid key for this operation, its RSA-PSS parameter saltLength does not meet the requirements of "alg" ${e}`)}}else if(t.asymmetricKeyType!=="rsa"){throw new TypeError("Invalid key for this operation, its asymmetricKeyType must be rsa or rsa-pss")}(0,o.default)(t,e);return{key:t,...a};case!A.rsaPssParams&&"PS256":case!A.rsaPssParams&&"PS384":case!A.rsaPssParams&&"PS512":if(t.asymmetricKeyType!=="rsa"){throw new TypeError("Invalid key for this operation, its asymmetricKeyType must be rsa")}(0,o.default)(t,e);return{key:t,...a};case"ES256":case"ES256K":case"ES384":case"ES512":{if(t.asymmetricKeyType!=="ec"){throw new TypeError("Invalid key for this operation, its asymmetricKeyType must be ec")}const n=(0,i.default)(t);const s=c.get(e);if(n!==s){throw new TypeError(`Invalid key curve for the algorithm, its curve must be ${s}, got ${n}`)}return{dsaEncoding:"ieee-p1363",key:t}}default:throw new r.JOSENotSupported(`alg ${e} is not supported either by JOSE or your javascript runtime`)}}t["default"]=keyForCrypto},6898:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.decrypt=t.encrypt=void 0;const s=n(3837);const i=n(6113);const r=n(5770);const o=n(1691);const A=n(518);const a=n(6083);const c=n(3499);const u=n(6852);const l=n(3386);const d=n(2768);const p=n(1146);const g=n(7947);const h=(0,s.promisify)(i.pbkdf2);function getPassword(e,t){if((0,d.default)(e)){return e.export()}if(e instanceof Uint8Array){return e}if((0,u.isCryptoKey)(e)){(0,l.checkEncCryptoKey)(e,t,"deriveBits","deriveKey");return i.KeyObject.from(e).export()}throw new TypeError((0,p.default)(e,...g.types,"Uint8Array"))}const encrypt=async(e,t,n,s=2048,i=(0,r.default)(new Uint8Array(16)))=>{(0,c.default)(i);const u=(0,o.p2s)(e,i);const l=parseInt(e.slice(13,16),10)>>3;const d=getPassword(t,e);const p=await h(d,u,s,l,`sha${e.slice(8,11)}`);const g=await(0,a.wrap)(e.slice(-6),p,n);return{encryptedKey:g,p2c:s,p2s:(0,A.encode)(i)}};t.encrypt=encrypt;const decrypt=async(e,t,n,s,i)=>{(0,c.default)(i);const r=(0,o.p2s)(e,i);const A=parseInt(e.slice(13,16),10)>>3;const u=getPassword(t,e);const l=await h(u,r,s,A,`sha${e.slice(8,11)}`);return(0,a.unwrap)(e.slice(-6),l,n)};t.decrypt=decrypt},5770:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=n(6113);Object.defineProperty(t,"default",{enumerable:true,get:function(){return s.randomFillSync}})},9526:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.decrypt=t.encrypt=void 0;const s=n(6113);const i=n(122);const r=n(6852);const o=n(3386);const A=n(2768);const a=n(1146);const c=n(7947);const checkKey=(e,t)=>{if(e.asymmetricKeyType!=="rsa"){throw new TypeError("Invalid key for this operation, its asymmetricKeyType must be rsa")}(0,i.default)(e,t)};const resolvePadding=e=>{switch(e){case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":return s.constants.RSA_PKCS1_OAEP_PADDING;case"RSA1_5":return s.constants.RSA_PKCS1_PADDING;default:return undefined}};const resolveOaepHash=e=>{switch(e){case"RSA-OAEP":return"sha1";case"RSA-OAEP-256":return"sha256";case"RSA-OAEP-384":return"sha384";case"RSA-OAEP-512":return"sha512";default:return undefined}};function ensureKeyObject(e,t,...n){if((0,A.default)(e)){return e}if((0,r.isCryptoKey)(e)){(0,o.checkEncCryptoKey)(e,t,...n);return s.KeyObject.from(e)}throw new TypeError((0,a.default)(e,...c.types))}const encrypt=(e,t,n)=>{const i=resolvePadding(e);const r=resolveOaepHash(e);const o=ensureKeyObject(t,e,"wrapKey","encrypt");checkKey(o,e);return(0,s.publicEncrypt)({key:o,oaepHash:r,padding:i},n)};t.encrypt=encrypt;const decrypt=(e,t,n)=>{const i=resolvePadding(e);const r=resolveOaepHash(e);const o=ensureKeyObject(t,e,"unwrapKey","decrypt");checkKey(o,e);return(0,s.privateDecrypt)({key:o,oaepHash:r,padding:i},n)};t.decrypt=decrypt},1622:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]="node:crypto"},9935:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(6113);const i=n(3837);const r=n(4965);const o=n(3811);const A=n(2413);const a=n(3170);let c;if(s.sign.length>3){c=(0,i.promisify)(s.sign)}else{c=s.sign}const sign=async(e,t,n)=>{const i=(0,a.default)(e,t,"sign");if(e.startsWith("HS")){const t=s.createHmac((0,o.default)(e),i);t.update(n);return t.digest()}return c((0,r.default)(e),n,(0,A.default)(e,i))};t["default"]=sign},5390:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(6113);const i=s.timingSafeEqual;t["default"]=i},3569:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(6113);const i=n(3837);const r=n(4965);const o=n(2413);const A=n(9935);const a=n(3170);const c=n(9737);let u;if(s.verify.length>4&&c.oneShotCallback){u=(0,i.promisify)(s.verify)}else{u=s.verify}const verify=async(e,t,n,i)=>{const c=(0,a.default)(e,t,"verify");if(e.startsWith("HS")){const t=await(0,A.default)(e,c,i);const r=n;try{return s.timingSafeEqual(r,t)}catch{return false}}const l=(0,r.default)(e);const d=(0,o.default)(e,c);try{return await u(l,i,d,n)}catch{return false}};t["default"]=verify},6852:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.isCryptoKey=void 0;const s=n(6113);const i=n(3837);const r=s.webcrypto;t["default"]=r;t.isCryptoKey=i.types.isCryptoKey?e=>i.types.isCryptoKey(e):e=>false},7022:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.deflate=t.inflate=void 0;const s=n(3837);const i=n(9796);const r=(0,s.promisify)(i.inflateRaw);const o=(0,s.promisify)(i.deflateRaw);const inflate=e=>r(e);t.inflate=inflate;const deflate=e=>o(e);t.deflate=deflate},3238:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.decode=t.encode=void 0;const s=n(518);t.encode=s.encode;t.decode=s.decode},5611:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.decodeJwt=void 0;const s=n(3238);const i=n(1691);const r=n(9127);const o=n(4419);function decodeJwt(e){if(typeof e!=="string")throw new o.JWTInvalid("JWTs must use Compact JWS serialization, JWT must be a string");const{1:t,length:n}=e.split(".");if(n===5)throw new o.JWTInvalid("Only JWTs using Compact JWS serialization can be decoded");if(n!==3)throw new o.JWTInvalid("Invalid JWT");if(!t)throw new o.JWTInvalid("JWTs must contain a payload");let A;try{A=(0,s.decode)(t)}catch{throw new o.JWTInvalid("Failed to base64url decode the payload")}let a;try{a=JSON.parse(i.decoder.decode(A))}catch{throw new o.JWTInvalid("Failed to parse the decoded payload as JSON")}if(!(0,r.default)(a))throw new o.JWTInvalid("Invalid JWT Claims Set");return a}t.decodeJwt=decodeJwt},3991:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.decodeProtectedHeader=void 0;const s=n(3238);const i=n(1691);const r=n(9127);function decodeProtectedHeader(e){let t;if(typeof e==="string"){const n=e.split(".");if(n.length===3||n.length===5){[t]=n}}else if(typeof e==="object"&&e){if("protected"in e){t=e.protected}else{throw new TypeError("Token does not contain a Protected Header")}}try{if(typeof t!=="string"||!t){throw new Error}const e=JSON.parse(i.decoder.decode((0,s.decode)(t)));if(!(0,r.default)(e)){throw new Error}return e}catch{throw new TypeError("Invalid Token or Protected Header formatting")}}t.decodeProtectedHeader=decodeProtectedHeader},4419:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.JWSSignatureVerificationFailed=t.JWKSTimeout=t.JWKSMultipleMatchingKeys=t.JWKSNoMatchingKey=t.JWKSInvalid=t.JWKInvalid=t.JWTInvalid=t.JWSInvalid=t.JWEInvalid=t.JWEDecryptionFailed=t.JOSENotSupported=t.JOSEAlgNotAllowed=t.JWTExpired=t.JWTClaimValidationFailed=t.JOSEError=void 0;class JOSEError extends Error{static get code(){return"ERR_JOSE_GENERIC"}constructor(e){var t;super(e);this.code="ERR_JOSE_GENERIC";this.name=this.constructor.name;(t=Error.captureStackTrace)===null||t===void 0?void 0:t.call(Error,this,this.constructor)}}t.JOSEError=JOSEError;class JWTClaimValidationFailed extends JOSEError{static get code(){return"ERR_JWT_CLAIM_VALIDATION_FAILED"}constructor(e,t="unspecified",n="unspecified"){super(e);this.code="ERR_JWT_CLAIM_VALIDATION_FAILED";this.claim=t;this.reason=n}}t.JWTClaimValidationFailed=JWTClaimValidationFailed;class JWTExpired extends JOSEError{static get code(){return"ERR_JWT_EXPIRED"}constructor(e,t="unspecified",n="unspecified"){super(e);this.code="ERR_JWT_EXPIRED";this.claim=t;this.reason=n}}t.JWTExpired=JWTExpired;class JOSEAlgNotAllowed extends JOSEError{constructor(){super(...arguments);this.code="ERR_JOSE_ALG_NOT_ALLOWED"}static get code(){return"ERR_JOSE_ALG_NOT_ALLOWED"}}t.JOSEAlgNotAllowed=JOSEAlgNotAllowed;class JOSENotSupported extends JOSEError{constructor(){super(...arguments);this.code="ERR_JOSE_NOT_SUPPORTED"}static get code(){return"ERR_JOSE_NOT_SUPPORTED"}}t.JOSENotSupported=JOSENotSupported;class JWEDecryptionFailed extends JOSEError{constructor(){super(...arguments);this.code="ERR_JWE_DECRYPTION_FAILED";this.message="decryption operation failed"}static get code(){return"ERR_JWE_DECRYPTION_FAILED"}}t.JWEDecryptionFailed=JWEDecryptionFailed;class JWEInvalid extends JOSEError{constructor(){super(...arguments);this.code="ERR_JWE_INVALID"}static get code(){return"ERR_JWE_INVALID"}}t.JWEInvalid=JWEInvalid;class JWSInvalid extends JOSEError{constructor(){super(...arguments);this.code="ERR_JWS_INVALID"}static get code(){return"ERR_JWS_INVALID"}}t.JWSInvalid=JWSInvalid;class JWTInvalid extends JOSEError{constructor(){super(...arguments);this.code="ERR_JWT_INVALID"}static get code(){return"ERR_JWT_INVALID"}}t.JWTInvalid=JWTInvalid;class JWKInvalid extends JOSEError{constructor(){super(...arguments);this.code="ERR_JWK_INVALID"}static get code(){return"ERR_JWK_INVALID"}}t.JWKInvalid=JWKInvalid;class JWKSInvalid extends JOSEError{constructor(){super(...arguments);this.code="ERR_JWKS_INVALID"}static get code(){return"ERR_JWKS_INVALID"}}t.JWKSInvalid=JWKSInvalid;class JWKSNoMatchingKey extends JOSEError{constructor(){super(...arguments);this.code="ERR_JWKS_NO_MATCHING_KEY";this.message="no applicable key found in the JSON Web Key Set"}static get code(){return"ERR_JWKS_NO_MATCHING_KEY"}}t.JWKSNoMatchingKey=JWKSNoMatchingKey;class JWKSMultipleMatchingKeys extends JOSEError{constructor(){super(...arguments);this.code="ERR_JWKS_MULTIPLE_MATCHING_KEYS";this.message="multiple matching keys found in the JSON Web Key Set"}static get code(){return"ERR_JWKS_MULTIPLE_MATCHING_KEYS"}}t.JWKSMultipleMatchingKeys=JWKSMultipleMatchingKeys;Symbol.asyncIterator;class JWKSTimeout extends JOSEError{constructor(){super(...arguments);this.code="ERR_JWKS_TIMEOUT";this.message="request timed out"}static get code(){return"ERR_JWKS_TIMEOUT"}}t.JWKSTimeout=JWKSTimeout;class JWSSignatureVerificationFailed extends JOSEError{constructor(){super(...arguments);this.code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED";this.message="signature verification failed"}static get code(){return"ERR_JWS_SIGNATURE_VERIFICATION_FAILED"}}t.JWSSignatureVerificationFailed=JWSSignatureVerificationFailed},1173:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});const s=n(1622);t["default"]=s.default},7426:(e,t,n)=>{ -/*! - * mime-db - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2015-2022 Douglas Christopher Wilson - * MIT Licensed - */ -e.exports=n(3765)},3583:(e,t,n)=>{"use strict"; -/*! - * mime-types - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2015 Douglas Christopher Wilson - * MIT Licensed - */var s=n(7426);var i=n(1017).extname;var r=/^\s*([^;\s]*)(?:;|\s|$)/;var o=/^text\//i;t.charset=charset;t.charsets={lookup:charset};t.contentType=contentType;t.extension=extension;t.extensions=Object.create(null);t.lookup=lookup;t.types=Object.create(null);populateMaps(t.extensions,t.types);function charset(e){if(!e||typeof e!=="string"){return false}var t=r.exec(e);var n=t&&s[t[1].toLowerCase()];if(n&&n.charset){return n.charset}if(t&&o.test(t[1])){return"UTF-8"}return false}function contentType(e){if(!e||typeof e!=="string"){return false}var n=e.indexOf("/")===-1?t.lookup(e):e;if(!n){return false}if(n.indexOf("charset")===-1){var s=t.charset(n);if(s)n+="; charset="+s.toLowerCase()}return n}function extension(e){if(!e||typeof e!=="string"){return false}var n=r.exec(e);var s=n&&t.extensions[n[1].toLowerCase()];if(!s||!s.length){return false}return s[0]}function lookup(e){if(!e||typeof e!=="string"){return false}var n=i("x."+e).toLowerCase().substr(1);if(!n){return false}return t.types[n]||false}function populateMaps(e,t){var n=["nginx","apache",undefined,"iana"];Object.keys(s).forEach((function forEachMimeType(i){var r=s[i];var o=r.extensions;if(!o||!o.length){return}e[i]=o;for(var A=0;Au||c===u&&t[a].substr(0,12)==="application/")){continue}}t[a]=i}}))}},3329:(e,t,n)=>{"use strict";var s=n(7310).parse;var i={ftp:21,gopher:70,http:80,https:443,ws:80,wss:443};var r=String.prototype.endsWith||function(e){return e.length<=this.length&&this.indexOf(e,this.length-e.length)!==-1};function getProxyForUrl(e){var t=typeof e==="string"?s(e):e||{};var n=t.protocol;var r=t.host;var o=t.port;if(typeof r!=="string"||!r||typeof n!=="string"){return""}n=n.split(":",1)[0];r=r.replace(/:\d*$/,"");o=parseInt(o)||i[n]||0;if(!shouldProxy(r,o)){return""}var A=getEnv("npm_config_"+n+"_proxy")||getEnv(n+"_proxy")||getEnv("npm_config_proxy")||getEnv("all_proxy");if(A&&A.indexOf("://")===-1){A=n+"://"+A}return A}function shouldProxy(e,t){var n=(getEnv("npm_config_no_proxy")||getEnv("no_proxy")).toLowerCase();if(!n){return true}if(n==="*"){return false}return n.split(/[,\s]/).every((function(n){if(!n){return true}var s=n.match(/^(.+):(\d+)$/);var i=s?s[1]:n;var o=s?parseInt(s[2]):0;if(o&&o!==t){return true}if(!/^[.*]/.test(i)){return e!==i}if(i.charAt(0)==="*"){i=i.slice(1)}return!r.call(e,i)}))}function getEnv(e){return process.env[e.toLowerCase()]||process.env[e.toUpperCase()]||""}t.getProxyForUrl=getProxyForUrl},4294:(e,t,n)=>{e.exports=n(4219)},4219:(e,t,n)=>{"use strict";var s=n(1808);var i=n(4404);var r=n(3685);var o=n(5687);var A=n(2361);var a=n(9491);var c=n(3837);t.httpOverHttp=httpOverHttp;t.httpsOverHttp=httpsOverHttp;t.httpOverHttps=httpOverHttps;t.httpsOverHttps=httpsOverHttps;function httpOverHttp(e){var t=new TunnelingAgent(e);t.request=r.request;return t}function httpsOverHttp(e){var t=new TunnelingAgent(e);t.request=r.request;t.createSocket=createSecureSocket;t.defaultPort=443;return t}function httpOverHttps(e){var t=new TunnelingAgent(e);t.request=o.request;return t}function httpsOverHttps(e){var t=new TunnelingAgent(e);t.request=o.request;t.createSocket=createSecureSocket;t.defaultPort=443;return t}function TunnelingAgent(e){var t=this;t.options=e||{};t.proxyOptions=t.options.proxy||{};t.maxSockets=t.options.maxSockets||r.Agent.defaultMaxSockets;t.requests=[];t.sockets=[];t.on("free",(function onFree(e,n,s,i){var r=toOptions(n,s,i);for(var o=0,A=t.requests.length;o=this.maxSockets){i.requests.push(r);return}i.createSocket(r,(function(t){t.on("free",onFree);t.on("close",onCloseOrRemove);t.on("agentRemove",onCloseOrRemove);e.onSocket(t);function onFree(){i.emit("free",t,r)}function onCloseOrRemove(e){i.removeSocket(t);t.removeListener("free",onFree);t.removeListener("close",onCloseOrRemove);t.removeListener("agentRemove",onCloseOrRemove)}}))};TunnelingAgent.prototype.createSocket=function createSocket(e,t){var n=this;var s={};n.sockets.push(s);var i=mergeOptions({},n.proxyOptions,{method:"CONNECT",path:e.host+":"+e.port,agent:false,headers:{host:e.host+":"+e.port}});if(e.localAddress){i.localAddress=e.localAddress}if(i.proxyAuth){i.headers=i.headers||{};i.headers["Proxy-Authorization"]="Basic "+new Buffer(i.proxyAuth).toString("base64")}u("making CONNECT request");var r=n.request(i);r.useChunkedEncodingByDefault=false;r.once("response",onResponse);r.once("upgrade",onUpgrade);r.once("connect",onConnect);r.once("error",onError);r.end();function onResponse(e){e.upgrade=true}function onUpgrade(e,t,n){process.nextTick((function(){onConnect(e,t,n)}))}function onConnect(i,o,A){r.removeAllListeners();o.removeAllListeners();if(i.statusCode!==200){u("tunneling socket could not be established, statusCode=%d",i.statusCode);o.destroy();var a=new Error("tunneling socket could not be established, "+"statusCode="+i.statusCode);a.code="ECONNRESET";e.request.emit("error",a);n.removeSocket(s);return}if(A.length>0){u("got illegal response body from proxy");o.destroy();var a=new Error("got illegal response body from proxy");a.code="ECONNRESET";e.request.emit("error",a);n.removeSocket(s);return}u("tunneling connection has established");n.sockets[n.sockets.indexOf(s)]=o;return t(o)}function onError(t){r.removeAllListeners();u("tunneling socket could not be established, cause=%s\n",t.message,t.stack);var i=new Error("tunneling socket could not be established, "+"cause="+t.message);i.code="ECONNRESET";e.request.emit("error",i);n.removeSocket(s)}};TunnelingAgent.prototype.removeSocket=function removeSocket(e){var t=this.sockets.indexOf(e);if(t===-1){return}this.sockets.splice(t,1);var n=this.requests.shift();if(n){this.createSocket(n,(function(e){n.request.onSocket(e)}))}};function createSecureSocket(e,t){var n=this;TunnelingAgent.prototype.createSocket.call(n,e,(function(s){var r=e.request.getHeader("host");var o=mergeOptions({},n.options,{socket:s,servername:r?r.replace(/:.*$/,""):e.host});var A=i.connect(0,o);n.sockets[n.sockets.indexOf(s)]=A;t(A)}))}function toOptions(e,t,n){if(typeof e==="string"){return{host:e,port:t,localAddress:n}}return e}function mergeOptions(e){for(var t=1,n=arguments.length;t{"use strict";const s=n(3598);const i=n(412);const r=n(8045);const o=n(4634);const A=n(7931);const a=n(7890);const c=n(3983);const{InvalidArgumentError:u}=r;const l=n(4059);const d=n(2067);const p=n(8687);const g=n(6771);const h=n(6193);const f=n(888);const E=n(7858);const{getGlobalDispatcher:m,setGlobalDispatcher:C}=n(1892);const Q=n(6930);const I=n(2860);const B=n(8861);let y;try{n(6113);y=true}catch{y=false}Object.assign(i.prototype,l);e.exports.Dispatcher=i;e.exports.Client=s;e.exports.Pool=o;e.exports.BalancedPool=A;e.exports.Agent=a;e.exports.ProxyAgent=E;e.exports.DecoratorHandler=Q;e.exports.RedirectHandler=I;e.exports.createRedirectInterceptor=B;e.exports.buildConnector=d;e.exports.errors=r;function makeDispatcher(e){return(t,n,s)=>{if(typeof n==="function"){s=n;n=null}if(!t||typeof t!=="string"&&typeof t!=="object"&&!(t instanceof URL)){throw new u("invalid url")}if(n!=null&&typeof n!=="object"){throw new u("invalid opts")}if(n&&n.path!=null){if(typeof n.path!=="string"){throw new u("invalid opts.path")}let e=n.path;if(!n.path.startsWith("/")){e=`/${e}`}t=new URL(c.parseOrigin(t).origin+e)}else{if(!n){n=typeof t==="object"?t:{}}t=c.parseURL(t)}const{agent:i,dispatcher:r=m()}=n;if(i){throw new u("unsupported opts.agent. Did you mean opts.client?")}return e.call(r,{...n,origin:t.origin,path:t.search?`${t.pathname}${t.search}`:t.pathname,method:n.method||(n.body?"PUT":"GET")},s)}}e.exports.setGlobalDispatcher=C;e.exports.getGlobalDispatcher=m;if(c.nodeMajor>16||c.nodeMajor===16&&c.nodeMinor>=8){let t=null;e.exports.fetch=async function fetch(e){if(!t){t=n(4881).fetch}try{return await t(...arguments)}catch(e){if(typeof e==="object"){Error.captureStackTrace(e,this)}throw e}};e.exports.Headers=n(554).Headers;e.exports.Response=n(7823).Response;e.exports.Request=n(8359).Request;e.exports.FormData=n(2015).FormData;e.exports.File=n(8511).File;e.exports.FileReader=n(1446).FileReader;const{setGlobalOrigin:s,getGlobalOrigin:i}=n(1246);e.exports.setGlobalOrigin=s;e.exports.getGlobalOrigin=i;const{CacheStorage:r}=n(7907);const{kConstruct:o}=n(9174);e.exports.caches=new r(o)}if(c.nodeMajor>=16){const{deleteCookie:t,getCookies:s,getSetCookies:i,setCookie:r}=n(1724);e.exports.deleteCookie=t;e.exports.getCookies=s;e.exports.getSetCookies=i;e.exports.setCookie=r;const{parseMIMEType:o,serializeAMimeType:A}=n(685);e.exports.parseMIMEType=o;e.exports.serializeAMimeType=A}if(c.nodeMajor>=18&&y){const{WebSocket:t}=n(4284);e.exports.WebSocket=t}e.exports.request=makeDispatcher(l.request);e.exports.stream=makeDispatcher(l.stream);e.exports.pipeline=makeDispatcher(l.pipeline);e.exports.connect=makeDispatcher(l.connect);e.exports.upgrade=makeDispatcher(l.upgrade);e.exports.MockClient=p;e.exports.MockPool=h;e.exports.MockAgent=g;e.exports.mockErrors=f},7890:(e,t,n)=>{"use strict";const{InvalidArgumentError:s}=n(8045);const{kClients:i,kRunning:r,kClose:o,kDestroy:A,kDispatch:a,kInterceptors:c}=n(2785);const u=n(4839);const l=n(4634);const d=n(3598);const p=n(3983);const g=n(8861);const{WeakRef:h,FinalizationRegistry:f}=n(6436)();const E=Symbol("onConnect");const m=Symbol("onDisconnect");const C=Symbol("onConnectionError");const Q=Symbol("maxRedirections");const I=Symbol("onDrain");const B=Symbol("factory");const y=Symbol("finalizer");const b=Symbol("options");function defaultFactory(e,t){return t&&t.connections===1?new d(e,t):new l(e,t)}class Agent extends u{constructor({factory:e=defaultFactory,maxRedirections:t=0,connect:n,...r}={}){super();if(typeof e!=="function"){throw new s("factory must be a function.")}if(n!=null&&typeof n!=="function"&&typeof n!=="object"){throw new s("connect must be a function or an object")}if(!Number.isInteger(t)||t<0){throw new s("maxRedirections must be a positive number")}if(n&&typeof n!=="function"){n={...n}}this[c]=r.interceptors&&r.interceptors.Agent&&Array.isArray(r.interceptors.Agent)?r.interceptors.Agent:[g({maxRedirections:t})];this[b]={...p.deepClone(r),connect:n};this[b].interceptors=r.interceptors?{...r.interceptors}:undefined;this[Q]=t;this[B]=e;this[i]=new Map;this[y]=new f((e=>{const t=this[i].get(e);if(t!==undefined&&t.deref()===undefined){this[i].delete(e)}}));const o=this;this[I]=(e,t)=>{o.emit("drain",e,[o,...t])};this[E]=(e,t)=>{o.emit("connect",e,[o,...t])};this[m]=(e,t,n)=>{o.emit("disconnect",e,[o,...t],n)};this[C]=(e,t,n)=>{o.emit("connectionError",e,[o,...t],n)}}get[r](){let e=0;for(const t of this[i].values()){const n=t.deref();if(n){e+=n[r]}}return e}[a](e,t){let n;if(e.origin&&(typeof e.origin==="string"||e.origin instanceof URL)){n=String(e.origin)}else{throw new s("opts.origin must be a non-empty string or URL.")}const r=this[i].get(n);let o=r?r.deref():null;if(!o){o=this[B](e.origin,this[b]).on("drain",this[I]).on("connect",this[E]).on("disconnect",this[m]).on("connectionError",this[C]);this[i].set(n,new h(o));this[y].register(o,n)}return o.dispatch(e,t)}async[o](){const e=[];for(const t of this[i].values()){const n=t.deref();if(n){e.push(n.close())}}await Promise.all(e)}async[A](e){const t=[];for(const n of this[i].values()){const s=n.deref();if(s){t.push(s.destroy(e))}}await Promise.all(t)}}e.exports=Agent},7032:(e,t,n)=>{const{addAbortListener:s}=n(3983);const{RequestAbortedError:i}=n(8045);const r=Symbol("kListener");const o=Symbol("kSignal");function abort(e){if(e.abort){e.abort()}else{e.onError(new i)}}function addSignal(e,t){e[o]=null;e[r]=null;if(!t){return}if(t.aborted){abort(e);return}e[o]=t;e[r]=()=>{abort(e)};s(e[o],e[r])}function removeSignal(e){if(!e[o]){return}if("removeEventListener"in e[o]){e[o].removeEventListener("abort",e[r])}else{e[o].removeListener("abort",e[r])}e[o]=null;e[r]=null}e.exports={addSignal:addSignal,removeSignal:removeSignal}},9744:(e,t,n)=>{"use strict";const{AsyncResource:s}=n(852);const{InvalidArgumentError:i,RequestAbortedError:r,SocketError:o}=n(8045);const A=n(3983);const{addSignal:a,removeSignal:c}=n(7032);class ConnectHandler extends s{constructor(e,t){if(!e||typeof e!=="object"){throw new i("invalid opts")}if(typeof t!=="function"){throw new i("invalid callback")}const{signal:n,opaque:s,responseHeaders:r}=e;if(n&&typeof n.on!=="function"&&typeof n.addEventListener!=="function"){throw new i("signal must be an EventEmitter or EventTarget")}super("UNDICI_CONNECT");this.opaque=s||null;this.responseHeaders=r||null;this.callback=t;this.abort=null;a(this,n)}onConnect(e,t){if(!this.callback){throw new r}this.abort=e;this.context=t}onHeaders(){throw new o("bad connect",null)}onUpgrade(e,t,n){const{callback:s,opaque:i,context:r}=this;c(this);this.callback=null;let o=t;if(o!=null){o=this.responseHeaders==="raw"?A.parseRawHeaders(t):A.parseHeaders(t)}this.runInAsyncScope(s,null,null,{statusCode:e,headers:o,socket:n,opaque:i,context:r})}onError(e){const{callback:t,opaque:n}=this;c(this);if(t){this.callback=null;queueMicrotask((()=>{this.runInAsyncScope(t,null,e,{opaque:n})}))}}}function connect(e,t){if(t===undefined){return new Promise(((t,n)=>{connect.call(this,e,((e,s)=>e?n(e):t(s)))}))}try{const n=new ConnectHandler(e,t);this.dispatch({...e,method:"CONNECT"},n)}catch(n){if(typeof t!=="function"){throw n}const s=e&&e.opaque;queueMicrotask((()=>t(n,{opaque:s})))}}e.exports=connect},8752:(e,t,n)=>{"use strict";const{Readable:s,Duplex:i,PassThrough:r}=n(2781);const{InvalidArgumentError:o,InvalidReturnValueError:A,RequestAbortedError:a}=n(8045);const c=n(3983);const{AsyncResource:u}=n(852);const{addSignal:l,removeSignal:d}=n(7032);const p=n(9491);const g=Symbol("resume");class PipelineRequest extends s{constructor(){super({autoDestroy:true});this[g]=null}_read(){const{[g]:e}=this;if(e){this[g]=null;e()}}_destroy(e,t){this._read();t(e)}}class PipelineResponse extends s{constructor(e){super({autoDestroy:true});this[g]=e}_read(){this[g]()}_destroy(e,t){if(!e&&!this._readableState.endEmitted){e=new a}t(e)}}class PipelineHandler extends u{constructor(e,t){if(!e||typeof e!=="object"){throw new o("invalid opts")}if(typeof t!=="function"){throw new o("invalid handler")}const{signal:n,method:s,opaque:r,onInfo:A,responseHeaders:u}=e;if(n&&typeof n.on!=="function"&&typeof n.addEventListener!=="function"){throw new o("signal must be an EventEmitter or EventTarget")}if(s==="CONNECT"){throw new o("invalid method")}if(A&&typeof A!=="function"){throw new o("invalid onInfo callback")}super("UNDICI_PIPELINE");this.opaque=r||null;this.responseHeaders=u||null;this.handler=t;this.abort=null;this.context=null;this.onInfo=A||null;this.req=(new PipelineRequest).on("error",c.nop);this.ret=new i({readableObjectMode:e.objectMode,autoDestroy:true,read:()=>{const{body:e}=this;if(e&&e.resume){e.resume()}},write:(e,t,n)=>{const{req:s}=this;if(s.push(e,t)||s._readableState.destroyed){n()}else{s[g]=n}},destroy:(e,t)=>{const{body:n,req:s,res:i,ret:r,abort:o}=this;if(!e&&!r._readableState.endEmitted){e=new a}if(o&&e){o()}c.destroy(n,e);c.destroy(s,e);c.destroy(i,e);d(this);t(e)}}).on("prefinish",(()=>{const{req:e}=this;e.push(null)}));this.res=null;l(this,n)}onConnect(e,t){const{ret:n,res:s}=this;p(!s,"pipeline cannot be retried");if(n.destroyed){throw new a}this.abort=e;this.context=t}onHeaders(e,t,n){const{opaque:s,handler:i,context:r}=this;if(e<200){if(this.onInfo){const n=this.responseHeaders==="raw"?c.parseRawHeaders(t):c.parseHeaders(t);this.onInfo({statusCode:e,headers:n})}return}this.res=new PipelineResponse(n);let o;try{this.handler=null;const n=this.responseHeaders==="raw"?c.parseRawHeaders(t):c.parseHeaders(t);o=this.runInAsyncScope(i,null,{statusCode:e,headers:n,opaque:s,body:this.res,context:r})}catch(e){this.res.on("error",c.nop);throw e}if(!o||typeof o.on!=="function"){throw new A("expected Readable")}o.on("data",(e=>{const{ret:t,body:n}=this;if(!t.push(e)&&n.pause){n.pause()}})).on("error",(e=>{const{ret:t}=this;c.destroy(t,e)})).on("end",(()=>{const{ret:e}=this;e.push(null)})).on("close",(()=>{const{ret:e}=this;if(!e._readableState.ended){c.destroy(e,new a)}}));this.body=o}onData(e){const{res:t}=this;return t.push(e)}onComplete(e){const{res:t}=this;t.push(null)}onError(e){const{ret:t}=this;this.handler=null;c.destroy(t,e)}}function pipeline(e,t){try{const n=new PipelineHandler(e,t);this.dispatch({...e,body:n.req},n);return n.ret}catch(e){return(new r).destroy(e)}}e.exports=pipeline},5448:(e,t,n)=>{"use strict";const s=n(3858);const{InvalidArgumentError:i,RequestAbortedError:r}=n(8045);const o=n(3983);const{getResolveErrorBodyCallback:A}=n(7474);const{AsyncResource:a}=n(852);const{addSignal:c,removeSignal:u}=n(7032);class RequestHandler extends a{constructor(e,t){if(!e||typeof e!=="object"){throw new i("invalid opts")}const{signal:n,method:s,opaque:r,body:A,onInfo:a,responseHeaders:u,throwOnError:l,highWaterMark:d}=e;try{if(typeof t!=="function"){throw new i("invalid callback")}if(d&&(typeof d!=="number"||d<0)){throw new i("invalid highWaterMark")}if(n&&typeof n.on!=="function"&&typeof n.addEventListener!=="function"){throw new i("signal must be an EventEmitter or EventTarget")}if(s==="CONNECT"){throw new i("invalid method")}if(a&&typeof a!=="function"){throw new i("invalid onInfo callback")}super("UNDICI_REQUEST")}catch(e){if(o.isStream(A)){o.destroy(A.on("error",o.nop),e)}throw e}this.responseHeaders=u||null;this.opaque=r||null;this.callback=t;this.res=null;this.abort=null;this.body=A;this.trailers={};this.context=null;this.onInfo=a||null;this.throwOnError=l;this.highWaterMark=d;if(o.isStream(A)){A.on("error",(e=>{this.onError(e)}))}c(this,n)}onConnect(e,t){if(!this.callback){throw new r}this.abort=e;this.context=t}onHeaders(e,t,n,i){const{callback:r,opaque:a,abort:c,context:u,responseHeaders:l,highWaterMark:d}=this;const p=l==="raw"?o.parseRawHeaders(t):o.parseHeaders(t);if(e<200){if(this.onInfo){this.onInfo({statusCode:e,headers:p})}return}const g=l==="raw"?o.parseHeaders(t):p;const h=g["content-type"];const f=new s({resume:n,abort:c,contentType:h,highWaterMark:d});this.callback=null;this.res=f;if(r!==null){if(this.throwOnError&&e>=400){this.runInAsyncScope(A,null,{callback:r,body:f,contentType:h,statusCode:e,statusMessage:i,headers:p})}else{this.runInAsyncScope(r,null,null,{statusCode:e,headers:p,trailers:this.trailers,opaque:a,body:f,context:u})}}}onData(e){const{res:t}=this;return t.push(e)}onComplete(e){const{res:t}=this;u(this);o.parseHeaders(e,this.trailers);t.push(null)}onError(e){const{res:t,callback:n,body:s,opaque:i}=this;u(this);if(n){this.callback=null;queueMicrotask((()=>{this.runInAsyncScope(n,null,e,{opaque:i})}))}if(t){this.res=null;queueMicrotask((()=>{o.destroy(t,e)}))}if(s){this.body=null;o.destroy(s,e)}}}function request(e,t){if(t===undefined){return new Promise(((t,n)=>{request.call(this,e,((e,s)=>e?n(e):t(s)))}))}try{this.dispatch(e,new RequestHandler(e,t))}catch(n){if(typeof t!=="function"){throw n}const s=e&&e.opaque;queueMicrotask((()=>t(n,{opaque:s})))}}e.exports=request},5395:(e,t,n)=>{"use strict";const{finished:s,PassThrough:i}=n(2781);const{InvalidArgumentError:r,InvalidReturnValueError:o,RequestAbortedError:A}=n(8045);const a=n(3983);const{getResolveErrorBodyCallback:c}=n(7474);const{AsyncResource:u}=n(852);const{addSignal:l,removeSignal:d}=n(7032);class StreamHandler extends u{constructor(e,t,n){if(!e||typeof e!=="object"){throw new r("invalid opts")}const{signal:s,method:i,opaque:o,body:A,onInfo:c,responseHeaders:u,throwOnError:d}=e;try{if(typeof n!=="function"){throw new r("invalid callback")}if(typeof t!=="function"){throw new r("invalid factory")}if(s&&typeof s.on!=="function"&&typeof s.addEventListener!=="function"){throw new r("signal must be an EventEmitter or EventTarget")}if(i==="CONNECT"){throw new r("invalid method")}if(c&&typeof c!=="function"){throw new r("invalid onInfo callback")}super("UNDICI_STREAM")}catch(e){if(a.isStream(A)){a.destroy(A.on("error",a.nop),e)}throw e}this.responseHeaders=u||null;this.opaque=o||null;this.factory=t;this.callback=n;this.res=null;this.abort=null;this.context=null;this.trailers=null;this.body=A;this.onInfo=c||null;this.throwOnError=d||false;if(a.isStream(A)){A.on("error",(e=>{this.onError(e)}))}l(this,s)}onConnect(e,t){if(!this.callback){throw new A}this.abort=e;this.context=t}onHeaders(e,t,n,r){const{factory:A,opaque:u,context:l,callback:d,responseHeaders:p}=this;const g=p==="raw"?a.parseRawHeaders(t):a.parseHeaders(t);if(e<200){if(this.onInfo){this.onInfo({statusCode:e,headers:g})}return}this.factory=null;let h;if(this.throwOnError&&e>=400){const n=p==="raw"?a.parseHeaders(t):g;const s=n["content-type"];h=new i;this.callback=null;this.runInAsyncScope(c,null,{callback:d,body:h,contentType:s,statusCode:e,statusMessage:r,headers:g})}else{if(A===null){return}h=this.runInAsyncScope(A,null,{statusCode:e,headers:g,opaque:u,context:l});if(!h||typeof h.write!=="function"||typeof h.end!=="function"||typeof h.on!=="function"){throw new o("expected Writable")}s(h,{readable:false},(e=>{const{callback:t,res:n,opaque:s,trailers:i,abort:r}=this;this.res=null;if(e||!n.readable){a.destroy(n,e)}this.callback=null;this.runInAsyncScope(t,null,e||null,{opaque:s,trailers:i});if(e){r()}}))}h.on("drain",n);this.res=h;const f=h.writableNeedDrain!==undefined?h.writableNeedDrain:h._writableState&&h._writableState.needDrain;return f!==true}onData(e){const{res:t}=this;return t?t.write(e):true}onComplete(e){const{res:t}=this;d(this);if(!t){return}this.trailers=a.parseHeaders(e);t.end()}onError(e){const{res:t,callback:n,opaque:s,body:i}=this;d(this);this.factory=null;if(t){this.res=null;a.destroy(t,e)}else if(n){this.callback=null;queueMicrotask((()=>{this.runInAsyncScope(n,null,e,{opaque:s})}))}if(i){this.body=null;a.destroy(i,e)}}}function stream(e,t,n){if(n===undefined){return new Promise(((n,s)=>{stream.call(this,e,t,((e,t)=>e?s(e):n(t)))}))}try{this.dispatch(e,new StreamHandler(e,t,n))}catch(t){if(typeof n!=="function"){throw t}const s=e&&e.opaque;queueMicrotask((()=>n(t,{opaque:s})))}}e.exports=stream},6923:(e,t,n)=>{"use strict";const{InvalidArgumentError:s,RequestAbortedError:i,SocketError:r}=n(8045);const{AsyncResource:o}=n(852);const A=n(3983);const{addSignal:a,removeSignal:c}=n(7032);const u=n(9491);class UpgradeHandler extends o{constructor(e,t){if(!e||typeof e!=="object"){throw new s("invalid opts")}if(typeof t!=="function"){throw new s("invalid callback")}const{signal:n,opaque:i,responseHeaders:r}=e;if(n&&typeof n.on!=="function"&&typeof n.addEventListener!=="function"){throw new s("signal must be an EventEmitter or EventTarget")}super("UNDICI_UPGRADE");this.responseHeaders=r||null;this.opaque=i||null;this.callback=t;this.abort=null;this.context=null;a(this,n)}onConnect(e,t){if(!this.callback){throw new i}this.abort=e;this.context=null}onHeaders(){throw new r("bad upgrade",null)}onUpgrade(e,t,n){const{callback:s,opaque:i,context:r}=this;u.strictEqual(e,101);c(this);this.callback=null;const o=this.responseHeaders==="raw"?A.parseRawHeaders(t):A.parseHeaders(t);this.runInAsyncScope(s,null,null,{headers:o,socket:n,opaque:i,context:r})}onError(e){const{callback:t,opaque:n}=this;c(this);if(t){this.callback=null;queueMicrotask((()=>{this.runInAsyncScope(t,null,e,{opaque:n})}))}}}function upgrade(e,t){if(t===undefined){return new Promise(((t,n)=>{upgrade.call(this,e,((e,s)=>e?n(e):t(s)))}))}try{const n=new UpgradeHandler(e,t);this.dispatch({...e,method:e.method||"GET",upgrade:e.protocol||"Websocket"},n)}catch(n){if(typeof t!=="function"){throw n}const s=e&&e.opaque;queueMicrotask((()=>t(n,{opaque:s})))}}e.exports=upgrade},4059:(e,t,n)=>{"use strict";e.exports.request=n(5448);e.exports.stream=n(5395);e.exports.pipeline=n(8752);e.exports.upgrade=n(6923);e.exports.connect=n(9744)},3858:(e,t,n)=>{"use strict";const s=n(9491);const{Readable:i}=n(2781);const{RequestAbortedError:r,NotSupportedError:o,InvalidArgumentError:A}=n(8045);const a=n(3983);const{ReadableStreamFrom:c,toUSVString:u}=n(3983);let l;const d=Symbol("kConsume");const p=Symbol("kReading");const g=Symbol("kBody");const h=Symbol("abort");const f=Symbol("kContentType");e.exports=class BodyReadable extends i{constructor({resume:e,abort:t,contentType:n="",highWaterMark:s=64*1024}){super({autoDestroy:true,read:e,highWaterMark:s});this._readableState.dataEmitted=false;this[h]=t;this[d]=null;this[g]=null;this[f]=n;this[p]=false}destroy(e){if(this.destroyed){return this}if(!e&&!this._readableState.endEmitted){e=new r}if(e){this[h]()}return super.destroy(e)}emit(e,...t){if(e==="data"){this._readableState.dataEmitted=true}else if(e==="error"){this._readableState.errorEmitted=true}return super.emit(e,...t)}on(e,...t){if(e==="data"||e==="readable"){this[p]=true}return super.on(e,...t)}addListener(e,...t){return this.on(e,...t)}off(e,...t){const n=super.off(e,...t);if(e==="data"||e==="readable"){this[p]=this.listenerCount("data")>0||this.listenerCount("readable")>0}return n}removeListener(e,...t){return this.off(e,...t)}push(e){if(this[d]&&e!==null&&this.readableLength===0){consumePush(this[d],e);return this[p]?super.push(e):true}return super.push(e)}async text(){return consume(this,"text")}async json(){return consume(this,"json")}async blob(){return consume(this,"blob")}async arrayBuffer(){return consume(this,"arrayBuffer")}async formData(){throw new o}get bodyUsed(){return a.isDisturbed(this)}get body(){if(!this[g]){this[g]=c(this);if(this[d]){this[g].getReader();s(this[g].locked)}}return this[g]}async dump(e){let t=e&&Number.isFinite(e.limit)?e.limit:262144;const n=e&&e.signal;const abortFn=()=>{this.destroy()};let s;if(n){if(typeof n!=="object"||!("aborted"in n)){throw new A("signal must be an AbortSignal")}a.throwIfAborted(n);s=a.addAbortListener(n,abortFn)}try{for await(const e of this){a.throwIfAborted(n);t-=Buffer.byteLength(e);if(t<0){return}}}catch{a.throwIfAborted(n)}finally{if(typeof s==="function"){s()}else if(s){s[Symbol.dispose]()}}}};function isLocked(e){return e[g]&&e[g].locked===true||e[d]}function isUnusable(e){return a.isDisturbed(e)||isLocked(e)}async function consume(e,t){if(isUnusable(e)){throw new TypeError("unusable")}s(!e[d]);return new Promise(((n,s)=>{e[d]={type:t,stream:e,resolve:n,reject:s,length:0,body:[]};e.on("error",(function(e){consumeFinish(this[d],e)})).on("close",(function(){if(this[d].body!==null){consumeFinish(this[d],new r)}}));process.nextTick(consumeStart,e[d])}))}function consumeStart(e){if(e.body===null){return}const{_readableState:t}=e.stream;for(const n of t.buffer){consumePush(e,n)}if(t.endEmitted){consumeEnd(this[d])}else{e.stream.on("end",(function(){consumeEnd(this[d])}))}e.stream.resume();while(e.stream.read()!=null){}}function consumeEnd(e){const{type:t,body:s,resolve:i,stream:r,length:o}=e;try{if(t==="text"){i(u(Buffer.concat(s)))}else if(t==="json"){i(JSON.parse(Buffer.concat(s)))}else if(t==="arrayBuffer"){const e=new Uint8Array(o);let t=0;for(const n of s){e.set(n,t);t+=n.byteLength}i(e.buffer)}else if(t==="blob"){if(!l){l=n(4300).Blob}i(new l(s,{type:r[f]}))}consumeFinish(e)}catch(e){r.destroy(e)}}function consumePush(e,t){e.length+=t.length;e.body.push(t)}function consumeFinish(e,t){if(e.body===null){return}if(t){e.reject(t)}else{e.resolve()}e.type=null;e.stream=null;e.resolve=null;e.reject=null;e.length=0;e.body=null}},7474:(e,t,n)=>{const s=n(9491);const{ResponseStatusCodeError:i}=n(8045);const{toUSVString:r}=n(3983);async function getResolveErrorBodyCallback({callback:e,body:t,contentType:n,statusCode:o,statusMessage:A,headers:a}){s(t);let c=[];let u=0;for await(const e of t){c.push(e);u+=e.length;if(u>128*1024){c=null;break}}if(o===204||!n||!c){process.nextTick(e,new i(`Response status code ${o}${A?`: ${A}`:""}`,o,a));return}try{if(n.startsWith("application/json")){const t=JSON.parse(r(Buffer.concat(c)));process.nextTick(e,new i(`Response status code ${o}${A?`: ${A}`:""}`,o,a,t));return}if(n.startsWith("text/")){const t=r(Buffer.concat(c));process.nextTick(e,new i(`Response status code ${o}${A?`: ${A}`:""}`,o,a,t));return}}catch(e){}process.nextTick(e,new i(`Response status code ${o}${A?`: ${A}`:""}`,o,a))}e.exports={getResolveErrorBodyCallback:getResolveErrorBodyCallback}},7931:(e,t,n)=>{"use strict";const{BalancedPoolMissingUpstreamError:s,InvalidArgumentError:i}=n(8045);const{PoolBase:r,kClients:o,kNeedDrain:A,kAddClient:a,kRemoveClient:c,kGetDispatcher:u}=n(3198);const l=n(4634);const{kUrl:d,kInterceptors:p}=n(2785);const{parseOrigin:g}=n(3983);const h=Symbol("factory");const f=Symbol("options");const E=Symbol("kGreatestCommonDivisor");const m=Symbol("kCurrentWeight");const C=Symbol("kIndex");const Q=Symbol("kWeight");const I=Symbol("kMaxWeightPerServer");const B=Symbol("kErrorPenalty");function getGreatestCommonDivisor(e,t){if(t===0)return e;return getGreatestCommonDivisor(t,e%t)}function defaultFactory(e,t){return new l(e,t)}class BalancedPool extends r{constructor(e=[],{factory:t=defaultFactory,...n}={}){super();this[f]=n;this[C]=-1;this[m]=0;this[I]=this[f].maxWeightPerServer||100;this[B]=this[f].errorPenalty||15;if(!Array.isArray(e)){e=[e]}if(typeof t!=="function"){throw new i("factory must be a function.")}this[p]=n.interceptors&&n.interceptors.BalancedPool&&Array.isArray(n.interceptors.BalancedPool)?n.interceptors.BalancedPool:[];this[h]=t;for(const t of e){this.addUpstream(t)}this._updateBalancedPoolStats()}addUpstream(e){const t=g(e).origin;if(this[o].find((e=>e[d].origin===t&&e.closed!==true&&e.destroyed!==true))){return this}const n=this[h](t,Object.assign({},this[f]));this[a](n);n.on("connect",(()=>{n[Q]=Math.min(this[I],n[Q]+this[B])}));n.on("connectionError",(()=>{n[Q]=Math.max(1,n[Q]-this[B]);this._updateBalancedPoolStats()}));n.on("disconnect",((...e)=>{const t=e[2];if(t&&t.code==="UND_ERR_SOCKET"){n[Q]=Math.max(1,n[Q]-this[B]);this._updateBalancedPoolStats()}}));for(const e of this[o]){e[Q]=this[I]}this._updateBalancedPoolStats();return this}_updateBalancedPoolStats(){this[E]=this[o].map((e=>e[Q])).reduce(getGreatestCommonDivisor,0)}removeUpstream(e){const t=g(e).origin;const n=this[o].find((e=>e[d].origin===t&&e.closed!==true&&e.destroyed!==true));if(n){this[c](n)}return this}get upstreams(){return this[o].filter((e=>e.closed!==true&&e.destroyed!==true)).map((e=>e[d].origin))}[u](){if(this[o].length===0){throw new s}const e=this[o].find((e=>!e[A]&&e.closed!==true&&e.destroyed!==true));if(!e){return}const t=this[o].map((e=>e[A])).reduce(((e,t)=>e&&t),true);if(t){return}let n=0;let i=this[o].findIndex((e=>!e[A]));while(n++this[o][i][Q]&&!e[A]){i=this[C]}if(this[C]===0){this[m]=this[m]-this[E];if(this[m]<=0){this[m]=this[I]}}if(e[Q]>=this[m]&&!e[A]){return e}}this[m]=this[o][i][Q];this[C]=i;return this[o][i]}}e.exports=BalancedPool},6101:(e,t,n)=>{"use strict";const{kConstruct:s}=n(9174);const{urlEquals:i,fieldValues:r}=n(2396);const{kEnumerableProperty:o,isDisturbed:A}=n(3983);const{kHeadersList:a}=n(2785);const{webidl:c}=n(1744);const{Response:u,cloneResponse:l}=n(7823);const{Request:d}=n(8359);const{kState:p,kHeaders:g,kGuard:h,kRealm:f}=n(5861);const{fetching:E}=n(4881);const{urlIsHttpHttpsScheme:m,createDeferredPromise:C,readAllBytes:Q}=n(2538);const I=n(9491);const{getGlobalDispatcher:B}=n(1892);class Cache{#e;constructor(){if(arguments[0]!==s){c.illegalConstructor()}this.#e=arguments[1]}async match(e,t={}){c.brandCheck(this,Cache);c.argumentLengthCheck(arguments,1,{header:"Cache.match"});e=c.converters.RequestInfo(e);t=c.converters.CacheQueryOptions(t);const n=await this.matchAll(e,t);if(n.length===0){return}return n[0]}async matchAll(e=undefined,t={}){c.brandCheck(this,Cache);if(e!==undefined)e=c.converters.RequestInfo(e);t=c.converters.CacheQueryOptions(t);let n=null;if(e!==undefined){if(e instanceof d){n=e[p];if(n.method!=="GET"&&!t.ignoreMethod){return[]}}else if(typeof e==="string"){n=new d(e)[p]}}const s=[];if(e===undefined){for(const e of this.#e){s.push(e[1])}}else{const e=this.#t(n,t);for(const t of e){s.push(t[1])}}const i=[];for(const e of s){const t=new u(e.body?.source??null);const n=t[p].body;t[p]=e;t[p].body=n;t[g][a]=e.headersList;t[g][h]="immutable";i.push(t)}return Object.freeze(i)}async add(e){c.brandCheck(this,Cache);c.argumentLengthCheck(arguments,1,{header:"Cache.add"});e=c.converters.RequestInfo(e);const t=[e];const n=this.addAll(t);return await n}async addAll(e){c.brandCheck(this,Cache);c.argumentLengthCheck(arguments,1,{header:"Cache.addAll"});e=c.converters["sequence"](e);const t=[];const n=[];for(const t of e){if(typeof t==="string"){continue}const e=t[p];if(!m(e.url)||e.method!=="GET"){throw c.errors.exception({header:"Cache.addAll",message:"Expected http/s scheme when method is not GET."})}}const s=[];for(const i of e){const e=new d(i)[p];if(!m(e.url)){throw c.errors.exception({header:"Cache.addAll",message:"Expected http/s scheme."})}e.initiator="fetch";e.destination="subresource";n.push(e);const o=C();s.push(E({request:e,dispatcher:B(),processResponse(e){if(e.type==="error"||e.status===206||e.status<200||e.status>299){o.reject(c.errors.exception({header:"Cache.addAll",message:"Received an invalid status code or the request failed."}))}else if(e.headersList.contains("vary")){const t=r(e.headersList.get("vary"));for(const e of t){if(e==="*"){o.reject(c.errors.exception({header:"Cache.addAll",message:"invalid vary field value"}));for(const e of s){e.abort()}return}}}},processResponseEndOfBody(e){if(e.aborted){o.reject(new DOMException("aborted","AbortError"));return}o.resolve(e)}}));t.push(o.promise)}const i=Promise.all(t);const o=await i;const A=[];let a=0;for(const e of o){const t={type:"put",request:n[a],response:e};A.push(t);a++}const u=C();let l=null;try{this.#n(A)}catch(e){l=e}queueMicrotask((()=>{if(l===null){u.resolve(undefined)}else{u.reject(l)}}));return u.promise}async put(e,t){c.brandCheck(this,Cache);c.argumentLengthCheck(arguments,2,{header:"Cache.put"});e=c.converters.RequestInfo(e);t=c.converters.Response(t);let n=null;if(e instanceof d){n=e[p]}else{n=new d(e)[p]}if(!m(n.url)||n.method!=="GET"){throw c.errors.exception({header:"Cache.put",message:"Expected an http/s scheme when method is not GET"})}const s=t[p];if(s.status===206){throw c.errors.exception({header:"Cache.put",message:"Got 206 status"})}if(s.headersList.contains("vary")){const e=r(s.headersList.get("vary"));for(const t of e){if(t==="*"){throw c.errors.exception({header:"Cache.put",message:"Got * vary field value"})}}}if(s.body&&(A(s.body.stream)||s.body.stream.locked)){throw c.errors.exception({header:"Cache.put",message:"Response body is locked or disturbed"})}const i=l(s);const o=C();if(s.body!=null){const e=s.body.stream;const t=e.getReader();Q(t).then(o.resolve,o.reject)}else{o.resolve(undefined)}const a=[];const u={type:"put",request:n,response:i};a.push(u);const g=await o.promise;if(i.body!=null){i.body.source=g}const h=C();let f=null;try{this.#n(a)}catch(e){f=e}queueMicrotask((()=>{if(f===null){h.resolve()}else{h.reject(f)}}));return h.promise}async delete(e,t={}){c.brandCheck(this,Cache);c.argumentLengthCheck(arguments,1,{header:"Cache.delete"});e=c.converters.RequestInfo(e);t=c.converters.CacheQueryOptions(t);let n=null;if(e instanceof d){n=e[p];if(n.method!=="GET"&&!t.ignoreMethod){return false}}else{I(typeof e==="string");n=new d(e)[p]}const s=[];const i={type:"delete",request:n,options:t};s.push(i);const r=C();let o=null;let A;try{A=this.#n(s)}catch(e){o=e}queueMicrotask((()=>{if(o===null){r.resolve(!!A?.length)}else{r.reject(o)}}));return r.promise}async keys(e=undefined,t={}){c.brandCheck(this,Cache);if(e!==undefined)e=c.converters.RequestInfo(e);t=c.converters.CacheQueryOptions(t);let n=null;if(e!==undefined){if(e instanceof d){n=e[p];if(n.method!=="GET"&&!t.ignoreMethod){return[]}}else if(typeof e==="string"){n=new d(e)[p]}}const s=C();const i=[];if(e===undefined){for(const e of this.#e){i.push(e[0])}}else{const e=this.#t(n,t);for(const t of e){i.push(t[0])}}queueMicrotask((()=>{const e=[];for(const t of i){const n=new d("https://a");n[p]=t;n[g][a]=t.headersList;n[g][h]="immutable";n[f]=t.client;e.push(n)}s.resolve(Object.freeze(e))}));return s.promise}#n(e){const t=this.#e;const n=[...t];const s=[];const i=[];try{for(const n of e){if(n.type!=="delete"&&n.type!=="put"){throw c.errors.exception({header:"Cache.#batchCacheOperations",message:'operation type does not match "delete" or "put"'})}if(n.type==="delete"&&n.response!=null){throw c.errors.exception({header:"Cache.#batchCacheOperations",message:"delete operation should not have an associated response"})}if(this.#t(n.request,n.options,s).length){throw new DOMException("???","InvalidStateError")}let e;if(n.type==="delete"){e=this.#t(n.request,n.options);if(e.length===0){return[]}for(const n of e){const e=t.indexOf(n);I(e!==-1);t.splice(e,1)}}else if(n.type==="put"){if(n.response==null){throw c.errors.exception({header:"Cache.#batchCacheOperations",message:"put operation should have an associated response"})}const i=n.request;if(!m(i.url)){throw c.errors.exception({header:"Cache.#batchCacheOperations",message:"expected http or https scheme"})}if(i.method!=="GET"){throw c.errors.exception({header:"Cache.#batchCacheOperations",message:"not get method"})}if(n.options!=null){throw c.errors.exception({header:"Cache.#batchCacheOperations",message:"options must not be defined"})}e=this.#t(n.request);for(const n of e){const e=t.indexOf(n);I(e!==-1);t.splice(e,1)}t.push([n.request,n.response]);s.push([n.request,n.response])}i.push([n.request,n.response])}return i}catch(e){this.#e.length=0;this.#e=n;throw e}}#t(e,t,n){const s=[];const i=n??this.#e;for(const n of i){const[i,r]=n;if(this.#s(e,i,r,t)){s.push(n)}}return s}#s(e,t,n=null,s){const o=new URL(e.url);const A=new URL(t.url);if(s?.ignoreSearch){A.search="";o.search=""}if(!i(o,A,true)){return false}if(n==null||s?.ignoreVary||!n.headersList.contains("vary")){return true}const a=r(n.headersList.get("vary"));for(const n of a){if(n==="*"){return false}const s=t.headersList.get(n);const i=e.headersList.get(n);if(s!==i){return false}}return true}}Object.defineProperties(Cache.prototype,{[Symbol.toStringTag]:{value:"Cache",configurable:true},match:o,matchAll:o,add:o,addAll:o,put:o,delete:o,keys:o});const y=[{key:"ignoreSearch",converter:c.converters.boolean,defaultValue:false},{key:"ignoreMethod",converter:c.converters.boolean,defaultValue:false},{key:"ignoreVary",converter:c.converters.boolean,defaultValue:false}];c.converters.CacheQueryOptions=c.dictionaryConverter(y);c.converters.MultiCacheQueryOptions=c.dictionaryConverter([...y,{key:"cacheName",converter:c.converters.DOMString}]);c.converters.Response=c.interfaceConverter(u);c.converters["sequence"]=c.sequenceConverter(c.converters.RequestInfo);e.exports={Cache:Cache}},7907:(e,t,n)=>{"use strict";const{kConstruct:s}=n(9174);const{Cache:i}=n(6101);const{webidl:r}=n(1744);const{kEnumerableProperty:o}=n(3983);class CacheStorage{#i=new Map;constructor(){if(arguments[0]!==s){r.illegalConstructor()}}async match(e,t={}){r.brandCheck(this,CacheStorage);r.argumentLengthCheck(arguments,1,{header:"CacheStorage.match"});e=r.converters.RequestInfo(e);t=r.converters.MultiCacheQueryOptions(t);if(t.cacheName!=null){if(this.#i.has(t.cacheName)){const n=this.#i.get(t.cacheName);const r=new i(s,n);return await r.match(e,t)}}else{for(const n of this.#i.values()){const r=new i(s,n);const o=await r.match(e,t);if(o!==undefined){return o}}}}async has(e){r.brandCheck(this,CacheStorage);r.argumentLengthCheck(arguments,1,{header:"CacheStorage.has"});e=r.converters.DOMString(e);return this.#i.has(e)}async open(e){r.brandCheck(this,CacheStorage);r.argumentLengthCheck(arguments,1,{header:"CacheStorage.open"});e=r.converters.DOMString(e);if(this.#i.has(e)){const t=this.#i.get(e);return new i(s,t)}const t=[];this.#i.set(e,t);return new i(s,t)}async delete(e){r.brandCheck(this,CacheStorage);r.argumentLengthCheck(arguments,1,{header:"CacheStorage.delete"});e=r.converters.DOMString(e);return this.#i.delete(e)}async keys(){r.brandCheck(this,CacheStorage);const e=this.#i.keys();return[...e]}}Object.defineProperties(CacheStorage.prototype,{[Symbol.toStringTag]:{value:"CacheStorage",configurable:true},match:o,has:o,open:o,delete:o,keys:o});e.exports={CacheStorage:CacheStorage}},9174:e=>{"use strict";e.exports={kConstruct:Symbol("constructable")}},2396:(e,t,n)=>{"use strict";const s=n(9491);const{URLSerializer:i}=n(685);const{isValidHeaderName:r}=n(2538);function urlEquals(e,t,n=false){const s=i(e,n);const r=i(t,n);return s===r}function fieldValues(e){s(e!==null);const t=[];for(let n of e.split(",")){n=n.trim();if(!n.length){continue}else if(!r(n)){continue}t.push(n)}return t}e.exports={urlEquals:urlEquals,fieldValues:fieldValues}},3598:(e,t,n)=>{"use strict";const s=n(9491);const i=n(1808);const r=n(3685);const{pipeline:o}=n(2781);const A=n(3983);const a=n(9459);const c=n(2905);const u=n(4839);const{RequestContentLengthMismatchError:l,ResponseContentLengthMismatchError:d,InvalidArgumentError:p,RequestAbortedError:g,HeadersTimeoutError:h,HeadersOverflowError:f,SocketError:E,InformationalError:m,BodyTimeoutError:C,HTTPParserError:Q,ResponseExceededMaxSizeError:I,ClientDestroyedError:B}=n(8045);const y=n(2067);const{kUrl:b,kReset:w,kServerName:R,kClient:v,kBusy:k,kParser:S,kConnect:x,kBlocking:D,kResuming:_,kRunning:N,kPending:F,kSize:U,kWriting:T,kQueue:M,kConnected:L,kConnecting:O,kNeedDrain:P,kNoRef:J,kKeepAliveDefaultTimeout:H,kHostHeader:q,kPendingIdx:G,kRunningIdx:Y,kError:V,kPipelining:j,kSocket:W,kKeepAliveTimeoutValue:K,kMaxHeadersSize:z,kKeepAliveMaxTimeout:Z,kKeepAliveTimeoutThreshold:X,kHeadersTimeout:$,kBodyTimeout:ee,kStrictContentLength:te,kConnector:ne,kMaxRedirections:se,kMaxRequests:ie,kCounter:re,kClose:oe,kDestroy:Ae,kDispatch:ae,kInterceptors:ce,kLocalAddress:ue,kMaxResponseSize:le,kHTTPConnVersion:de,kHost:pe,kHTTP2Session:ge,kHTTP2SessionState:he,kHTTP2BuildRequest:fe,kHTTP2CopyHeaders:Ee,kHTTP1BuildRequest:me}=n(2785);let Ce;try{Ce=n(5158)}catch{Ce={constants:{}}}const{constants:{HTTP2_HEADER_AUTHORITY:Qe,HTTP2_HEADER_METHOD:Ie,HTTP2_HEADER_PATH:Be,HTTP2_HEADER_SCHEME:ye,HTTP2_HEADER_CONTENT_LENGTH:be,HTTP2_HEADER_EXPECT:we,HTTP2_HEADER_STATUS:Re}}=Ce;let ve=false;const ke=Buffer[Symbol.species];const Se=Symbol("kClosedResolve");const xe={};try{const e=n(7643);xe.sendHeaders=e.channel("undici:client:sendHeaders");xe.beforeConnect=e.channel("undici:client:beforeConnect");xe.connectError=e.channel("undici:client:connectError");xe.connected=e.channel("undici:client:connected")}catch{xe.sendHeaders={hasSubscribers:false};xe.beforeConnect={hasSubscribers:false};xe.connectError={hasSubscribers:false};xe.connected={hasSubscribers:false}}class Client extends u{constructor(e,{interceptors:t,maxHeaderSize:n,headersTimeout:s,socketTimeout:o,requestTimeout:a,connectTimeout:c,bodyTimeout:u,idleTimeout:l,keepAlive:d,keepAliveTimeout:g,maxKeepAliveTimeout:h,keepAliveMaxTimeout:f,keepAliveTimeoutThreshold:E,socketPath:m,pipelining:C,tls:Q,strictContentLength:I,maxCachedSessions:B,maxRedirections:w,connect:v,maxRequestsPerClient:k,localAddress:S,maxResponseSize:x,autoSelectFamily:D,autoSelectFamilyAttemptTimeout:N,allowH2:F,maxConcurrentStreams:U}={}){super();if(d!==undefined){throw new p("unsupported keepAlive, use pipelining=0 instead")}if(o!==undefined){throw new p("unsupported socketTimeout, use headersTimeout & bodyTimeout instead")}if(a!==undefined){throw new p("unsupported requestTimeout, use headersTimeout & bodyTimeout instead")}if(l!==undefined){throw new p("unsupported idleTimeout, use keepAliveTimeout instead")}if(h!==undefined){throw new p("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead")}if(n!=null&&!Number.isFinite(n)){throw new p("invalid maxHeaderSize")}if(m!=null&&typeof m!=="string"){throw new p("invalid socketPath")}if(c!=null&&(!Number.isFinite(c)||c<0)){throw new p("invalid connectTimeout")}if(g!=null&&(!Number.isFinite(g)||g<=0)){throw new p("invalid keepAliveTimeout")}if(f!=null&&(!Number.isFinite(f)||f<=0)){throw new p("invalid keepAliveMaxTimeout")}if(E!=null&&!Number.isFinite(E)){throw new p("invalid keepAliveTimeoutThreshold")}if(s!=null&&(!Number.isInteger(s)||s<0)){throw new p("headersTimeout must be a positive integer or zero")}if(u!=null&&(!Number.isInteger(u)||u<0)){throw new p("bodyTimeout must be a positive integer or zero")}if(v!=null&&typeof v!=="function"&&typeof v!=="object"){throw new p("connect must be a function or an object")}if(w!=null&&(!Number.isInteger(w)||w<0)){throw new p("maxRedirections must be a positive number")}if(k!=null&&(!Number.isInteger(k)||k<0)){throw new p("maxRequestsPerClient must be a positive number")}if(S!=null&&(typeof S!=="string"||i.isIP(S)===0)){throw new p("localAddress must be valid string IP address")}if(x!=null&&(!Number.isInteger(x)||x<-1)){throw new p("maxResponseSize must be a positive number")}if(N!=null&&(!Number.isInteger(N)||N<-1)){throw new p("autoSelectFamilyAttemptTimeout must be a positive number")}if(F!=null&&typeof F!=="boolean"){throw new p("allowH2 must be a valid boolean value")}if(U!=null&&(typeof U!=="number"||U<1)){throw new p("maxConcurrentStreams must be a possitive integer, greater than 0")}if(typeof v!=="function"){v=y({...Q,maxCachedSessions:B,allowH2:F,socketPath:m,timeout:c,...A.nodeHasAutoSelectFamily&&D?{autoSelectFamily:D,autoSelectFamilyAttemptTimeout:N}:undefined,...v})}this[ce]=t&&t.Client&&Array.isArray(t.Client)?t.Client:[_e({maxRedirections:w})];this[b]=A.parseOrigin(e);this[ne]=v;this[W]=null;this[j]=C!=null?C:1;this[z]=n||r.maxHeaderSize;this[H]=g==null?4e3:g;this[Z]=f==null?6e5:f;this[X]=E==null?1e3:E;this[K]=this[H];this[R]=null;this[ue]=S!=null?S:null;this[_]=0;this[P]=0;this[q]=`host: ${this[b].hostname}${this[b].port?`:${this[b].port}`:""}\r\n`;this[ee]=u!=null?u:3e5;this[$]=s!=null?s:3e5;this[te]=I==null?true:I;this[se]=w;this[ie]=k;this[Se]=null;this[le]=x>-1?x:-1;this[de]="h1";this[ge]=null;this[he]=!F?null:{openStreams:0,maxConcurrentStreams:U!=null?U:100};this[pe]=`${this[b].hostname}${this[b].port?`:${this[b].port}`:""}`;this[M]=[];this[Y]=0;this[G]=0}get pipelining(){return this[j]}set pipelining(e){this[j]=e;resume(this,true)}get[F](){return this[M].length-this[G]}get[N](){return this[G]-this[Y]}get[U](){return this[M].length-this[Y]}get[L](){return!!this[W]&&!this[O]&&!this[W].destroyed}get[k](){const e=this[W];return e&&(e[w]||e[T]||e[D])||this[U]>=(this[j]||1)||this[F]>0}[x](e){connect(this);this.once("connect",e)}[ae](e,t){const n=e.origin||this[b].origin;const s=this[de]==="h2"?c[fe](n,e,t):c[me](n,e,t);this[M].push(s);if(this[_]){}else if(A.bodyLength(s.body)==null&&A.isIterable(s.body)){this[_]=1;process.nextTick(resume,this)}else{resume(this,true)}if(this[_]&&this[P]!==2&&this[k]){this[P]=2}return this[P]<2}async[oe](){return new Promise((e=>{if(!this[U]){e(null)}else{this[Se]=e}}))}async[Ae](e){return new Promise((t=>{const n=this[M].splice(this[G]);for(let t=0;t{if(this[Se]){this[Se]();this[Se]=null}t()};if(this[ge]!=null){A.destroy(this[ge],e);this[ge]=null;this[he]=null}if(!this[W]){queueMicrotask(callback)}else{A.destroy(this[W].on("close",callback),e)}resume(this)}))}}function onHttp2SessionError(e){s(e.code!=="ERR_TLS_CERT_ALTNAME_INVALID");this[W][V]=e;onError(this[v],e)}function onHttp2FrameError(e,t,n){const s=new m(`HTTP/2: "frameError" received - type ${e}, code ${t}`);if(n===0){this[W][V]=s;onError(this[v],s)}}function onHttp2SessionEnd(){A.destroy(this,new E("other side closed"));A.destroy(this[W],new E("other side closed"))}function onHTTP2GoAway(e){const t=this[v];const n=new m(`HTTP/2: "GOAWAY" frame received with code ${e}`);t[W]=null;t[ge]=null;if(t.destroyed){s(this[F]===0);const e=t[M].splice(t[Y]);for(let t=0;t0){const e=t[M][t[Y]];t[M][t[Y]++]=null;errorRequest(t,e,n)}t[G]=t[Y];s(t[N]===0);t.emit("disconnect",t[b],[t],n);resume(t)}const De=n(953);const _e=n(8861);const Ne=Buffer.alloc(0);async function lazyllhttp(){const e=process.env.JEST_WORKER_ID?n(1145):undefined;let t;try{t=await WebAssembly.compile(Buffer.from(n(5627),"base64"))}catch(s){t=await WebAssembly.compile(Buffer.from(e||n(1145),"base64"))}return await WebAssembly.instantiate(t,{env:{wasm_on_url:(e,t,n)=>0,wasm_on_status:(e,t,n)=>{s.strictEqual(Te.ptr,e);const i=t-Oe+Me.byteOffset;return Te.onStatus(new ke(Me.buffer,i,n))||0},wasm_on_message_begin:e=>{s.strictEqual(Te.ptr,e);return Te.onMessageBegin()||0},wasm_on_header_field:(e,t,n)=>{s.strictEqual(Te.ptr,e);const i=t-Oe+Me.byteOffset;return Te.onHeaderField(new ke(Me.buffer,i,n))||0},wasm_on_header_value:(e,t,n)=>{s.strictEqual(Te.ptr,e);const i=t-Oe+Me.byteOffset;return Te.onHeaderValue(new ke(Me.buffer,i,n))||0},wasm_on_headers_complete:(e,t,n,i)=>{s.strictEqual(Te.ptr,e);return Te.onHeadersComplete(t,Boolean(n),Boolean(i))||0},wasm_on_body:(e,t,n)=>{s.strictEqual(Te.ptr,e);const i=t-Oe+Me.byteOffset;return Te.onBody(new ke(Me.buffer,i,n))||0},wasm_on_message_complete:e=>{s.strictEqual(Te.ptr,e);return Te.onMessageComplete()||0}}})}let Fe=null;let Ue=lazyllhttp();Ue.catch();let Te=null;let Me=null;let Le=0;let Oe=null;const Pe=1;const Je=2;const He=3;class Parser{constructor(e,t,{exports:n}){s(Number.isFinite(e[z])&&e[z]>0);this.llhttp=n;this.ptr=this.llhttp.llhttp_alloc(De.TYPE.RESPONSE);this.client=e;this.socket=t;this.timeout=null;this.timeoutValue=null;this.timeoutType=null;this.statusCode=null;this.statusText="";this.upgrade=false;this.headers=[];this.headersSize=0;this.headersMaxSize=e[z];this.shouldKeepAlive=false;this.paused=false;this.resume=this.resume.bind(this);this.bytesRead=0;this.keepAlive="";this.contentLength="";this.connection="";this.maxResponseSize=e[le]}setTimeout(e,t){this.timeoutType=t;if(e!==this.timeoutValue){a.clearTimeout(this.timeout);if(e){this.timeout=a.setTimeout(onParserTimeout,e,this);if(this.timeout.unref){this.timeout.unref()}}else{this.timeout=null}this.timeoutValue=e}else if(this.timeout){if(this.timeout.refresh){this.timeout.refresh()}}}resume(){if(this.socket.destroyed||!this.paused){return}s(this.ptr!=null);s(Te==null);this.llhttp.llhttp_resume(this.ptr);s(this.timeoutType===Je);if(this.timeout){if(this.timeout.refresh){this.timeout.refresh()}}this.paused=false;this.execute(this.socket.read()||Ne);this.readMore()}readMore(){while(!this.paused&&this.ptr){const e=this.socket.read();if(e===null){break}this.execute(e)}}execute(e){s(this.ptr!=null);s(Te==null);s(!this.paused);const{socket:t,llhttp:n}=this;if(e.length>Le){if(Oe){n.free(Oe)}Le=Math.ceil(e.length/4096)*4096;Oe=n.malloc(Le)}new Uint8Array(n.memory.buffer,Oe,Le).set(e);try{let s;try{Me=e;Te=this;s=n.llhttp_execute(this.ptr,Oe,e.length)}catch(e){throw e}finally{Te=null;Me=null}const i=n.llhttp_get_error_pos(this.ptr)-Oe;if(s===De.ERROR.PAUSED_UPGRADE){this.onUpgrade(e.slice(i))}else if(s===De.ERROR.PAUSED){this.paused=true;t.unshift(e.slice(i))}else if(s!==De.ERROR.OK){const t=n.llhttp_get_error_reason(this.ptr);let r="";if(t){const e=new Uint8Array(n.memory.buffer,t).indexOf(0);r="Response does not match the HTTP/1.1 protocol ("+Buffer.from(n.memory.buffer,t,e).toString()+")"}throw new Q(r,De.ERROR[s],e.slice(i))}}catch(e){A.destroy(t,e)}}destroy(){s(this.ptr!=null);s(Te==null);this.llhttp.llhttp_free(this.ptr);this.ptr=null;a.clearTimeout(this.timeout);this.timeout=null;this.timeoutValue=null;this.timeoutType=null;this.paused=false}onStatus(e){this.statusText=e.toString()}onMessageBegin(){const{socket:e,client:t}=this;if(e.destroyed){return-1}const n=t[M][t[Y]];if(!n){return-1}}onHeaderField(e){const t=this.headers.length;if((t&1)===0){this.headers.push(e)}else{this.headers[t-1]=Buffer.concat([this.headers[t-1],e])}this.trackHeader(e.length)}onHeaderValue(e){let t=this.headers.length;if((t&1)===1){this.headers.push(e);t+=1}else{this.headers[t-1]=Buffer.concat([this.headers[t-1],e])}const n=this.headers[t-2];if(n.length===10&&n.toString().toLowerCase()==="keep-alive"){this.keepAlive+=e.toString()}else if(n.length===10&&n.toString().toLowerCase()==="connection"){this.connection+=e.toString()}else if(n.length===14&&n.toString().toLowerCase()==="content-length"){this.contentLength+=e.toString()}this.trackHeader(e.length)}trackHeader(e){this.headersSize+=e;if(this.headersSize>=this.headersMaxSize){A.destroy(this.socket,new f)}}onUpgrade(e){const{upgrade:t,client:n,socket:i,headers:r,statusCode:o}=this;s(t);const a=n[M][n[Y]];s(a);s(!i.destroyed);s(i===n[W]);s(!this.paused);s(a.upgrade||a.method==="CONNECT");this.statusCode=null;this.statusText="";this.shouldKeepAlive=null;s(this.headers.length%2===0);this.headers=[];this.headersSize=0;i.unshift(e);i[S].destroy();i[S]=null;i[v]=null;i[V]=null;i.removeListener("error",onSocketError).removeListener("readable",onSocketReadable).removeListener("end",onSocketEnd).removeListener("close",onSocketClose);n[W]=null;n[M][n[Y]++]=null;n.emit("disconnect",n[b],[n],new m("upgrade"));try{a.onUpgrade(o,r,i)}catch(e){A.destroy(i,e)}resume(n)}onHeadersComplete(e,t,n){const{client:i,socket:r,headers:o,statusText:a}=this;if(r.destroyed){return-1}const c=i[M][i[Y]];if(!c){return-1}s(!this.upgrade);s(this.statusCode<200);if(e===100){A.destroy(r,new E("bad response",A.getSocketInfo(r)));return-1}if(t&&!c.upgrade){A.destroy(r,new E("bad upgrade",A.getSocketInfo(r)));return-1}s.strictEqual(this.timeoutType,Pe);this.statusCode=e;this.shouldKeepAlive=n||c.method==="HEAD"&&!r[w]&&this.connection.toLowerCase()==="keep-alive";if(this.statusCode>=200){const e=c.bodyTimeout!=null?c.bodyTimeout:i[ee];this.setTimeout(e,Je)}else if(this.timeout){if(this.timeout.refresh){this.timeout.refresh()}}if(c.method==="CONNECT"){s(i[N]===1);this.upgrade=true;return 2}if(t){s(i[N]===1);this.upgrade=true;return 2}s(this.headers.length%2===0);this.headers=[];this.headersSize=0;if(this.shouldKeepAlive&&i[j]){const e=this.keepAlive?A.parseKeepAliveTimeout(this.keepAlive):null;if(e!=null){const t=Math.min(e-i[X],i[Z]);if(t<=0){r[w]=true}else{i[K]=t}}else{i[K]=i[H]}}else{r[w]=true}let u;try{u=c.onHeaders(e,o,this.resume,a)===false}catch(e){A.destroy(r,e);return-1}if(c.method==="HEAD"){return 1}if(e<200){return 1}if(r[D]){r[D]=false;resume(i)}return u?De.ERROR.PAUSED:0}onBody(e){const{client:t,socket:n,statusCode:i,maxResponseSize:r}=this;if(n.destroyed){return-1}const o=t[M][t[Y]];s(o);s.strictEqual(this.timeoutType,Je);if(this.timeout){if(this.timeout.refresh){this.timeout.refresh()}}s(i>=200);if(r>-1&&this.bytesRead+e.length>r){A.destroy(n,new I);return-1}this.bytesRead+=e.length;try{if(o.onData(e)===false){return De.ERROR.PAUSED}}catch(e){A.destroy(n,e);return-1}}onMessageComplete(){const{client:e,socket:t,statusCode:n,upgrade:i,headers:r,contentLength:o,bytesRead:a,shouldKeepAlive:c}=this;if(t.destroyed&&(!n||c)){return-1}if(i){return}const u=e[M][e[Y]];s(u);s(n>=100);this.statusCode=null;this.statusText="";this.bytesRead=0;this.contentLength="";this.keepAlive="";this.connection="";s(this.headers.length%2===0);this.headers=[];this.headersSize=0;if(n<200){return}if(u.method!=="HEAD"&&o&&a!==parseInt(o,10)){A.destroy(t,new d);return-1}try{u.onComplete(r)}catch(t){errorRequest(e,u,t)}e[M][e[Y]++]=null;if(t[T]){s.strictEqual(e[N],0);A.destroy(t,new m("reset"));return De.ERROR.PAUSED}else if(!c){A.destroy(t,new m("reset"));return De.ERROR.PAUSED}else if(t[w]&&e[N]===0){A.destroy(t,new m("reset"));return De.ERROR.PAUSED}else if(e[j]===1){setImmediate(resume,e)}else{resume(e)}}}function onParserTimeout(e){const{socket:t,timeoutType:n,client:i}=e;if(n===Pe){if(!t[T]||t.writableNeedDrain||i[N]>1){s(!e.paused,"cannot be paused while waiting for headers");A.destroy(t,new h)}}else if(n===Je){if(!e.paused){A.destroy(t,new C)}}else if(n===He){s(i[N]===0&&i[K]);A.destroy(t,new m("socket idle timeout"))}}function onSocketReadable(){const{[S]:e}=this;if(e){e.readMore()}}function onSocketError(e){const{[v]:t,[S]:n}=this;s(e.code!=="ERR_TLS_CERT_ALTNAME_INVALID");if(t[de]!=="h2"){if(e.code==="ECONNRESET"&&n.statusCode&&!n.shouldKeepAlive){n.onMessageComplete();return}}this[V]=e;onError(this[v],e)}function onError(e,t){if(e[N]===0&&t.code!=="UND_ERR_INFO"&&t.code!=="UND_ERR_SOCKET"){s(e[G]===e[Y]);const n=e[M].splice(e[Y]);for(let s=0;s0&&n.code!=="UND_ERR_INFO"){const t=e[M][e[Y]];e[M][e[Y]++]=null;errorRequest(e,t,n)}e[G]=e[Y];s(e[N]===0);e.emit("disconnect",e[b],[e],n);resume(e)}async function connect(e){s(!e[O]);s(!e[W]);let{host:t,hostname:n,protocol:r,port:o}=e[b];if(n[0]==="["){const e=n.indexOf("]");s(e!==-1);const t=n.substr(1,e-1);s(i.isIP(t));n=t}e[O]=true;if(xe.beforeConnect.hasSubscribers){xe.beforeConnect.publish({connectParams:{host:t,hostname:n,protocol:r,port:o,servername:e[R],localAddress:e[ue]},connector:e[ne]})}try{const i=await new Promise(((s,i)=>{e[ne]({host:t,hostname:n,protocol:r,port:o,servername:e[R],localAddress:e[ue]},((e,t)=>{if(e){i(e)}else{s(t)}}))}));if(e.destroyed){A.destroy(i.on("error",(()=>{})),new B);return}e[O]=false;s(i);const a=i.alpnProtocol==="h2";if(a){if(!ve){ve=true;process.emitWarning("H2 support is experimental, expect them to change at any time.",{code:"UNDICI-H2"})}const t=Ce.connect(e[b],{createConnection:()=>i,peerMaxConcurrentStreams:e[he].maxConcurrentStreams});e[de]="h2";t[v]=e;t[W]=i;t.on("error",onHttp2SessionError);t.on("frameError",onHttp2FrameError);t.on("end",onHttp2SessionEnd);t.on("goaway",onHTTP2GoAway);t.on("close",onSocketClose);t.unref();e[ge]=t;i[ge]=t}else{if(!Fe){Fe=await Ue;Ue=null}i[J]=false;i[T]=false;i[w]=false;i[D]=false;i[S]=new Parser(e,i,Fe)}i[re]=0;i[ie]=e[ie];i[v]=e;i[V]=null;i.on("error",onSocketError).on("readable",onSocketReadable).on("end",onSocketEnd).on("close",onSocketClose);e[W]=i;if(xe.connected.hasSubscribers){xe.connected.publish({connectParams:{host:t,hostname:n,protocol:r,port:o,servername:e[R],localAddress:e[ue]},connector:e[ne],socket:i})}e.emit("connect",e[b],[e])}catch(i){if(e.destroyed){return}e[O]=false;if(xe.connectError.hasSubscribers){xe.connectError.publish({connectParams:{host:t,hostname:n,protocol:r,port:o,servername:e[R],localAddress:e[ue]},connector:e[ne],error:i})}if(i.code==="ERR_TLS_CERT_ALTNAME_INVALID"){s(e[N]===0);while(e[F]>0&&e[M][e[G]].servername===e[R]){const t=e[M][e[G]++];errorRequest(e,t,i)}}else{onError(e,i)}e.emit("connectionError",e[b],[e],i)}resume(e)}function emitDrain(e){e[P]=0;e.emit("drain",e[b],[e])}function resume(e,t){if(e[_]===2){return}e[_]=2;_resume(e,t);e[_]=0;if(e[Y]>256){e[M].splice(0,e[Y]);e[G]-=e[Y];e[Y]=0}}function _resume(e,t){while(true){if(e.destroyed){s(e[F]===0);return}if(e[Se]&&!e[U]){e[Se]();e[Se]=null;return}const n=e[W];if(n&&!n.destroyed&&n.alpnProtocol!=="h2"){if(e[U]===0){if(!n[J]&&n.unref){n.unref();n[J]=true}}else if(n[J]&&n.ref){n.ref();n[J]=false}if(e[U]===0){if(n[S].timeoutType!==He){n[S].setTimeout(e[K],He)}}else if(e[N]>0&&n[S].statusCode<200){if(n[S].timeoutType!==Pe){const t=e[M][e[Y]];const s=t.headersTimeout!=null?t.headersTimeout:e[$];n[S].setTimeout(s,Pe)}}}if(e[k]){e[P]=2}else if(e[P]===2){if(t){e[P]=1;process.nextTick(emitDrain,e)}else{emitDrain(e)}continue}if(e[F]===0){return}if(e[N]>=(e[j]||1)){return}const i=e[M][e[G]];if(e[b].protocol==="https:"&&e[R]!==i.servername){if(e[N]>0){return}e[R]=i.servername;if(n&&n.servername!==i.servername){A.destroy(n,new m("servername changed"));return}}if(e[O]){return}if(!n&&!e[ge]){connect(e);return}if(n.destroyed||n[T]||n[w]||n[D]){return}if(e[N]>0&&!i.idempotent){return}if(e[N]>0&&(i.upgrade||i.method==="CONNECT")){return}if(A.isStream(i.body)&&A.bodyLength(i.body)===0){i.body.on("data",(function(){s(false)})).on("error",(function(t){errorRequest(e,i,t)})).on("end",(function(){A.destroy(this)}));i.body=null}if(e[N]>0&&(A.isStream(i.body)||A.isAsyncIterable(i.body))){return}if(!i.aborted&&write(e,i)){e[G]++}else{e[M].splice(e[G],1)}}}function write(e,t){if(e[de]==="h2"){writeH2(e,e[ge],t);return}const{body:n,method:i,path:r,host:o,upgrade:a,headers:c,blocking:u,reset:d}=t;const p=i==="PUT"||i==="POST"||i==="PATCH";if(n&&typeof n.read==="function"){n.read(0)}let h=A.bodyLength(n);if(h===null){h=t.contentLength}if(h===0&&!p){h=null}if(t.contentLength!==null&&t.contentLength!==h){if(e[te]){errorRequest(e,t,new l);return false}process.emitWarning(new l)}const f=e[W];try{t.onConnect((n=>{if(t.aborted||t.completed){return}errorRequest(e,t,n||new g);A.destroy(f,new m("aborted"))}))}catch(n){errorRequest(e,t,n)}if(t.aborted){return false}if(i==="HEAD"){f[w]=true}if(a||i==="CONNECT"){f[w]=true}if(d!=null){f[w]=d}if(e[ie]&&f[re]++>=e[ie]){f[w]=true}if(u){f[D]=true}let E=`${i} ${r} HTTP/1.1\r\n`;if(typeof o==="string"){E+=`host: ${o}\r\n`}else{E+=e[q]}if(a){E+=`connection: upgrade\r\nupgrade: ${a}\r\n`}else if(e[j]&&!f[w]){E+="connection: keep-alive\r\n"}else{E+="connection: close\r\n"}if(c){E+=c}if(xe.sendHeaders.hasSubscribers){xe.sendHeaders.publish({request:t,headers:E,socket:f})}if(!n){if(h===0){f.write(`${E}content-length: 0\r\n\r\n`,"latin1")}else{s(h===null,"no body must not have content length");f.write(`${E}\r\n`,"latin1")}t.onRequestSent()}else if(A.isBuffer(n)){s(h===n.byteLength,"buffer body must have content length");f.cork();f.write(`${E}content-length: ${h}\r\n\r\n`,"latin1");f.write(n);f.uncork();t.onBodySent(n);t.onRequestSent();if(!p){f[w]=true}}else if(A.isBlobLike(n)){if(typeof n.stream==="function"){writeIterable({body:n.stream(),client:e,request:t,socket:f,contentLength:h,header:E,expectsPayload:p})}else{writeBlob({body:n,client:e,request:t,socket:f,contentLength:h,header:E,expectsPayload:p})}}else if(A.isStream(n)){writeStream({body:n,client:e,request:t,socket:f,contentLength:h,header:E,expectsPayload:p})}else if(A.isIterable(n)){writeIterable({body:n,client:e,request:t,socket:f,contentLength:h,header:E,expectsPayload:p})}else{s(false)}return true}function writeH2(e,t,n){const{body:i,method:r,path:o,host:a,upgrade:u,expectContinue:d,signal:p,headers:h}=n;let f;if(typeof h==="string")f=c[Ee](h.trim());else f=h;if(u){errorRequest(e,n,new Error("Upgrade not supported for H2"));return false}try{n.onConnect((t=>{if(n.aborted||n.completed){return}errorRequest(e,n,t||new g)}))}catch(t){errorRequest(e,n,t)}if(n.aborted){return false}let E;const C=e[he];f[Qe]=a||e[pe];f[Ie]=r;if(r==="CONNECT"){t.ref();E=t.request(f,{endStream:false,signal:p});if(E.id&&!E.pending){n.onUpgrade(null,null,E);++C.openStreams}else{E.once("ready",(()=>{n.onUpgrade(null,null,E);++C.openStreams}))}E.once("close",(()=>{C.openStreams-=1;if(C.openStreams===0)t.unref()}));return true}f[Be]=o;f[ye]="https";const Q=r==="PUT"||r==="POST"||r==="PATCH";if(i&&typeof i.read==="function"){i.read(0)}let I=A.bodyLength(i);if(I==null){I=n.contentLength}if(I===0||!Q){I=null}if(n.contentLength!=null&&n.contentLength!==I){if(e[te]){errorRequest(e,n,new l);return false}process.emitWarning(new l)}if(I!=null){s(i,"no body must not have content length");f[be]=`${I}`}t.ref();const B=r==="GET"||r==="HEAD";if(d){f[we]="100-continue";E=t.request(f,{endStream:B,signal:p});E.once("continue",writeBodyH2)}else{E=t.request(f,{endStream:B,signal:p});writeBodyH2()}++C.openStreams;E.once("response",(e=>{if(n.onHeaders(Number(e[Re]),e,E.resume.bind(E),"")===false){E.pause()}}));E.once("end",(()=>{n.onComplete([])}));E.on("data",(e=>{if(n.onData(e)===false)E.pause()}));E.once("close",(()=>{C.openStreams-=1;if(C.openStreams===0)t.unref()}));E.once("error",(function(t){if(e[ge]&&!e[ge].destroyed&&!this.closed&&!this.destroyed){C.streams-=1;A.destroy(E,t)}}));E.once("frameError",((t,s)=>{const i=new m(`HTTP/2: "frameError" received - type ${t}, code ${s}`);errorRequest(e,n,i);if(e[ge]&&!e[ge].destroyed&&!this.closed&&!this.destroyed){C.streams-=1;A.destroy(E,i)}}));return true;function writeBodyH2(){if(!i){n.onRequestSent()}else if(A.isBuffer(i)){s(I===i.byteLength,"buffer body must have content length");E.cork();E.write(i);E.uncork();E.end();n.onBodySent(i);n.onRequestSent()}else if(A.isBlobLike(i)){if(typeof i.stream==="function"){writeIterable({client:e,request:n,contentLength:I,h2stream:E,expectsPayload:Q,body:i.stream(),socket:e[W],header:""})}else{writeBlob({body:i,client:e,request:n,contentLength:I,expectsPayload:Q,h2stream:E,header:"",socket:e[W]})}}else if(A.isStream(i)){writeStream({body:i,client:e,request:n,contentLength:I,expectsPayload:Q,socket:e[W],h2stream:E,header:""})}else if(A.isIterable(i)){writeIterable({body:i,client:e,request:n,contentLength:I,expectsPayload:Q,header:"",h2stream:E,socket:e[W]})}else{s(false)}}}function writeStream({h2stream:e,body:t,client:n,request:i,socket:r,contentLength:a,header:c,expectsPayload:u}){s(a!==0||n[N]===0,"stream body cannot be pipelined");if(n[de]==="h2"){const n=o(t,e,(n=>{if(n){A.destroy(t,n);A.destroy(e,n)}else{i.onRequestSent()}}));n.on("data",onPipeData);n.once("end",(()=>{n.removeListener("data",onPipeData);A.destroy(n)}));function onPipeData(e){i.onBodySent(e)}return}let l=false;const d=new AsyncWriter({socket:r,request:i,contentLength:a,client:n,expectsPayload:u,header:c});const onData=function(e){if(l){return}try{if(!d.write(e)&&this.pause){this.pause()}}catch(e){A.destroy(this,e)}};const onDrain=function(){if(l){return}if(t.resume){t.resume()}};const onAbort=function(){onFinished(new g)};const onFinished=function(e){if(l){return}l=true;s(r.destroyed||r[T]&&n[N]<=1);r.off("drain",onDrain).off("error",onFinished);t.removeListener("data",onData).removeListener("end",onFinished).removeListener("error",onFinished).removeListener("close",onAbort);if(!e){try{d.end()}catch(t){e=t}}d.destroy(e);if(e&&(e.code!=="UND_ERR_INFO"||e.message!=="reset")){A.destroy(t,e)}else{A.destroy(t)}};t.on("data",onData).on("end",onFinished).on("error",onFinished).on("close",onAbort);if(t.resume){t.resume()}r.on("drain",onDrain).on("error",onFinished)}async function writeBlob({h2stream:e,body:t,client:n,request:i,socket:r,contentLength:o,header:a,expectsPayload:c}){s(o===t.size,"blob body must have content length");const u=n[de]==="h2";try{if(o!=null&&o!==t.size){throw new l}const s=Buffer.from(await t.arrayBuffer());if(u){e.cork();e.write(s);e.uncork()}else{r.cork();r.write(`${a}content-length: ${o}\r\n\r\n`,"latin1");r.write(s);r.uncork()}i.onBodySent(s);i.onRequestSent();if(!c){r[w]=true}resume(n)}catch(t){A.destroy(u?e:r,t)}}async function writeIterable({h2stream:e,body:t,client:n,request:i,socket:r,contentLength:o,header:A,expectsPayload:a}){s(o!==0||n[N]===0,"iterator body cannot be pipelined");let c=null;function onDrain(){if(c){const e=c;c=null;e()}}const waitForDrain=()=>new Promise(((e,t)=>{s(c===null);if(r[V]){t(r[V])}else{c=e}}));if(n[de]==="h2"){e.on("close",onDrain).on("drain",onDrain);try{for await(const n of t){if(r[V]){throw r[V]}const t=e.write(n);i.onBodySent(n);if(!t){await waitForDrain()}}}catch(t){e.destroy(t)}finally{i.onRequestSent();e.end();e.off("close",onDrain).off("drain",onDrain)}return}r.on("close",onDrain).on("drain",onDrain);const u=new AsyncWriter({socket:r,request:i,contentLength:o,client:n,expectsPayload:a,header:A});try{for await(const e of t){if(r[V]){throw r[V]}if(!u.write(e)){await waitForDrain()}}u.end()}catch(e){u.destroy(e)}finally{r.off("close",onDrain).off("drain",onDrain)}}class AsyncWriter{constructor({socket:e,request:t,contentLength:n,client:s,expectsPayload:i,header:r}){this.socket=e;this.request=t;this.contentLength=n;this.client=s;this.bytesWritten=0;this.expectsPayload=i;this.header=r;e[T]=true}write(e){const{socket:t,request:n,contentLength:s,client:i,bytesWritten:r,expectsPayload:o,header:A}=this;if(t[V]){throw t[V]}if(t.destroyed){return false}const a=Buffer.byteLength(e);if(!a){return true}if(s!==null&&r+a>s){if(i[te]){throw new l}process.emitWarning(new l)}t.cork();if(r===0){if(!o){t[w]=true}if(s===null){t.write(`${A}transfer-encoding: chunked\r\n`,"latin1")}else{t.write(`${A}content-length: ${s}\r\n\r\n`,"latin1")}}if(s===null){t.write(`\r\n${a.toString(16)}\r\n`,"latin1")}this.bytesWritten+=a;const c=t.write(e);t.uncork();n.onBodySent(e);if(!c){if(t[S].timeout&&t[S].timeoutType===Pe){if(t[S].timeout.refresh){t[S].timeout.refresh()}}}return c}end(){const{socket:e,contentLength:t,client:n,bytesWritten:s,expectsPayload:i,header:r,request:o}=this;o.onRequestSent();e[T]=false;if(e[V]){throw e[V]}if(e.destroyed){return}if(s===0){if(i){e.write(`${r}content-length: 0\r\n\r\n`,"latin1")}else{e.write(`${r}\r\n`,"latin1")}}else if(t===null){e.write("\r\n0\r\n\r\n","latin1")}if(t!==null&&s!==t){if(n[te]){throw new l}else{process.emitWarning(new l)}}if(e[S].timeout&&e[S].timeoutType===Pe){if(e[S].timeout.refresh){e[S].timeout.refresh()}}resume(n)}destroy(e){const{socket:t,client:n}=this;t[T]=false;if(e){s(n[N]<=1,"pipeline should only contain this request");A.destroy(t,e)}}}function errorRequest(e,t,n){try{t.onError(n);s(t.aborted)}catch(n){e.emit("error",n)}}e.exports=Client},6436:(e,t,n)=>{"use strict";const{kConnected:s,kSize:i}=n(2785);class CompatWeakRef{constructor(e){this.value=e}deref(){return this.value[s]===0&&this.value[i]===0?undefined:this.value}}class CompatFinalizer{constructor(e){this.finalizer=e}register(e,t){if(e.on){e.on("disconnect",(()=>{if(e[s]===0&&e[i]===0){this.finalizer(t)}}))}}}e.exports=function(){if(process.env.NODE_V8_COVERAGE){return{WeakRef:CompatWeakRef,FinalizationRegistry:CompatFinalizer}}return{WeakRef:global.WeakRef||CompatWeakRef,FinalizationRegistry:global.FinalizationRegistry||CompatFinalizer}}},663:e=>{"use strict";const t=1024;const n=4096;e.exports={maxAttributeValueSize:t,maxNameValuePairSize:n}},1724:(e,t,n)=>{"use strict";const{parseSetCookie:s}=n(4408);const{stringify:i,getHeadersList:r}=n(3121);const{webidl:o}=n(1744);const{Headers:A}=n(554);function getCookies(e){o.argumentLengthCheck(arguments,1,{header:"getCookies"});o.brandCheck(e,A,{strict:false});const t=e.get("cookie");const n={};if(!t){return n}for(const e of t.split(";")){const[t,...s]=e.split("=");n[t.trim()]=s.join("=")}return n}function deleteCookie(e,t,n){o.argumentLengthCheck(arguments,2,{header:"deleteCookie"});o.brandCheck(e,A,{strict:false});t=o.converters.DOMString(t);n=o.converters.DeleteCookieAttributes(n);setCookie(e,{name:t,value:"",expires:new Date(0),...n})}function getSetCookies(e){o.argumentLengthCheck(arguments,1,{header:"getSetCookies"});o.brandCheck(e,A,{strict:false});const t=r(e).cookies;if(!t){return[]}return t.map((e=>s(Array.isArray(e)?e[1]:e)))}function setCookie(e,t){o.argumentLengthCheck(arguments,2,{header:"setCookie"});o.brandCheck(e,A,{strict:false});t=o.converters.Cookie(t);const n=i(t);if(n){e.append("Set-Cookie",i(t))}}o.converters.DeleteCookieAttributes=o.dictionaryConverter([{converter:o.nullableConverter(o.converters.DOMString),key:"path",defaultValue:null},{converter:o.nullableConverter(o.converters.DOMString),key:"domain",defaultValue:null}]);o.converters.Cookie=o.dictionaryConverter([{converter:o.converters.DOMString,key:"name"},{converter:o.converters.DOMString,key:"value"},{converter:o.nullableConverter((e=>{if(typeof e==="number"){return o.converters["unsigned long long"](e)}return new Date(e)})),key:"expires",defaultValue:null},{converter:o.nullableConverter(o.converters["long long"]),key:"maxAge",defaultValue:null},{converter:o.nullableConverter(o.converters.DOMString),key:"domain",defaultValue:null},{converter:o.nullableConverter(o.converters.DOMString),key:"path",defaultValue:null},{converter:o.nullableConverter(o.converters.boolean),key:"secure",defaultValue:null},{converter:o.nullableConverter(o.converters.boolean),key:"httpOnly",defaultValue:null},{converter:o.converters.USVString,key:"sameSite",allowedValues:["Strict","Lax","None"]},{converter:o.sequenceConverter(o.converters.DOMString),key:"unparsed",defaultValue:[]}]);e.exports={getCookies:getCookies,deleteCookie:deleteCookie,getSetCookies:getSetCookies,setCookie:setCookie}},4408:(e,t,n)=>{"use strict";const{maxNameValuePairSize:s,maxAttributeValueSize:i}=n(663);const{isCTLExcludingHtab:r}=n(3121);const{collectASequenceOfCodePointsFast:o}=n(685);const A=n(9491);function parseSetCookie(e){if(r(e)){return null}let t="";let n="";let i="";let A="";if(e.includes(";")){const s={position:0};t=o(";",e,s);n=e.slice(s.position)}else{t=e}if(!t.includes("=")){A=t}else{const e={position:0};i=o("=",t,e);A=t.slice(e.position+1)}i=i.trim();A=A.trim();if(i.length+A.length>s){return null}return{name:i,value:A,...parseUnparsedAttributes(n)}}function parseUnparsedAttributes(e,t={}){if(e.length===0){return t}A(e[0]===";");e=e.slice(1);let n="";if(e.includes(";")){n=o(";",e,{position:0});e=e.slice(n.length)}else{n=e;e=""}let s="";let r="";if(n.includes("=")){const e={position:0};s=o("=",n,e);r=n.slice(e.position+1)}else{s=n}s=s.trim();r=r.trim();if(r.length>i){return parseUnparsedAttributes(e,t)}const a=s.toLowerCase();if(a==="expires"){const e=new Date(r);t.expires=e}else if(a==="max-age"){const n=r.charCodeAt(0);if((n<48||n>57)&&r[0]!=="-"){return parseUnparsedAttributes(e,t)}if(!/^\d+$/.test(r)){return parseUnparsedAttributes(e,t)}const s=Number(r);t.maxAge=s}else if(a==="domain"){let e=r;if(e[0]==="."){e=e.slice(1)}e=e.toLowerCase();t.domain=e}else if(a==="path"){let e="";if(r.length===0||r[0]!=="/"){e="/"}else{e=r}t.path=e}else if(a==="secure"){t.secure=true}else if(a==="httponly"){t.httpOnly=true}else if(a==="samesite"){let e="Default";const n=r.toLowerCase();if(n.includes("none")){e="None"}if(n.includes("strict")){e="Strict"}if(n.includes("lax")){e="Lax"}t.sameSite=e}else{t.unparsed??=[];t.unparsed.push(`${s}=${r}`)}return parseUnparsedAttributes(e,t)}e.exports={parseSetCookie:parseSetCookie,parseUnparsedAttributes:parseUnparsedAttributes}},3121:(e,t,n)=>{"use strict";const s=n(9491);const{kHeadersList:i}=n(2785);function isCTLExcludingHtab(e){if(e.length===0){return false}for(const t of e){const e=t.charCodeAt(0);if(e>=0||e<=8||(e>=10||e<=31)||e===127){return false}}}function validateCookieName(e){for(const t of e){const e=t.charCodeAt(0);if(e<=32||e>127||t==="("||t===")"||t===">"||t==="<"||t==="@"||t===","||t===";"||t===":"||t==="\\"||t==='"'||t==="/"||t==="["||t==="]"||t==="?"||t==="="||t==="{"||t==="}"){throw new Error("Invalid cookie name")}}}function validateCookieValue(e){for(const t of e){const e=t.charCodeAt(0);if(e<33||e===34||e===44||e===59||e===92||e>126){throw new Error("Invalid header value")}}}function validateCookiePath(e){for(const t of e){const e=t.charCodeAt(0);if(e<33||t===";"){throw new Error("Invalid cookie path")}}}function validateCookieDomain(e){if(e.startsWith("-")||e.endsWith(".")||e.endsWith("-")){throw new Error("Invalid cookie domain")}}function toIMFDate(e){if(typeof e==="number"){e=new Date(e)}const t=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];const n=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];const s=t[e.getUTCDay()];const i=e.getUTCDate().toString().padStart(2,"0");const r=n[e.getUTCMonth()];const o=e.getUTCFullYear();const A=e.getUTCHours().toString().padStart(2,"0");const a=e.getUTCMinutes().toString().padStart(2,"0");const c=e.getUTCSeconds().toString().padStart(2,"0");return`${s}, ${i} ${r} ${o} ${A}:${a}:${c} GMT`}function validateCookieMaxAge(e){if(e<0){throw new Error("Invalid cookie max-age")}}function stringify(e){if(e.name.length===0){return null}validateCookieName(e.name);validateCookieValue(e.value);const t=[`${e.name}=${e.value}`];if(e.name.startsWith("__Secure-")){e.secure=true}if(e.name.startsWith("__Host-")){e.secure=true;e.domain=null;e.path="/"}if(e.secure){t.push("Secure")}if(e.httpOnly){t.push("HttpOnly")}if(typeof e.maxAge==="number"){validateCookieMaxAge(e.maxAge);t.push(`Max-Age=${e.maxAge}`)}if(e.domain){validateCookieDomain(e.domain);t.push(`Domain=${e.domain}`)}if(e.path){validateCookiePath(e.path);t.push(`Path=${e.path}`)}if(e.expires&&e.expires.toString()!=="Invalid Date"){t.push(`Expires=${toIMFDate(e.expires)}`)}if(e.sameSite){t.push(`SameSite=${e.sameSite}`)}for(const n of e.unparsed){if(!n.includes("=")){throw new Error("Invalid unparsed")}const[e,...s]=n.split("=");t.push(`${e.trim()}=${s.join("=")}`)}return t.join("; ")}let r;function getHeadersList(e){if(e[i]){return e[i]}if(!r){r=Object.getOwnPropertySymbols(e).find((e=>e.description==="headers list"));s(r,"Headers cannot be parsed")}const t=e[r];s(t);return t}e.exports={isCTLExcludingHtab:isCTLExcludingHtab,stringify:stringify,getHeadersList:getHeadersList}},2067:(e,t,n)=>{"use strict";const s=n(1808);const i=n(9491);const r=n(3983);const{InvalidArgumentError:o,ConnectTimeoutError:A}=n(8045);let a;let c;if(global.FinalizationRegistry&&!process.env.NODE_V8_COVERAGE){c=class WeakSessionCache{constructor(e){this._maxCachedSessions=e;this._sessionCache=new Map;this._sessionRegistry=new global.FinalizationRegistry((e=>{if(this._sessionCache.size=this._maxCachedSessions){const{value:e}=this._sessionCache.keys().next();this._sessionCache.delete(e)}this._sessionCache.set(e,t)}}}function buildConnector({allowH2:e,maxCachedSessions:t,socketPath:A,timeout:u,...l}){if(t!=null&&(!Number.isInteger(t)||t<0)){throw new o("maxCachedSessions must be a positive integer or zero")}const d={path:A,...l};const p=new c(t==null?100:t);u=u==null?1e4:u;e=e!=null?e:false;return function connect({hostname:t,host:o,protocol:A,port:c,servername:l,localAddress:g,httpSocket:h},f){let E;if(A==="https:"){if(!a){a=n(4404)}l=l||d.servername||r.getServerName(o)||null;const s=l||t;const A=p.get(s)||null;i(s);E=a.connect({highWaterMark:16384,...d,servername:l,session:A,localAddress:g,ALPNProtocols:e?["http/1.1","h2"]:["http/1.1"],socket:h,port:c||443,host:t});E.on("session",(function(e){p.set(s,e)}))}else{i(!h,"httpSocket can only be sent on TLS update");E=s.connect({highWaterMark:64*1024,...d,localAddress:g,port:c||80,host:t})}if(d.keepAlive==null||d.keepAlive){const e=d.keepAliveInitialDelay===undefined?6e4:d.keepAliveInitialDelay;E.setKeepAlive(true,e)}const m=setupTimeout((()=>onConnectTimeout(E)),u);E.setNoDelay(true).once(A==="https:"?"secureConnect":"connect",(function(){m();if(f){const e=f;f=null;e(null,this)}})).on("error",(function(e){m();if(f){const t=f;f=null;t(e)}}));return E}}function setupTimeout(e,t){if(!t){return()=>{}}let n=null;let s=null;const i=setTimeout((()=>{n=setImmediate((()=>{if(process.platform==="win32"){s=setImmediate((()=>e()))}else{e()}}))}),t);return()=>{clearTimeout(i);clearImmediate(n);clearImmediate(s)}}function onConnectTimeout(e){r.destroy(e,new A)}e.exports=buildConnector},8045:e=>{"use strict";class UndiciError extends Error{constructor(e){super(e);this.name="UndiciError";this.code="UND_ERR"}}class ConnectTimeoutError extends UndiciError{constructor(e){super(e);Error.captureStackTrace(this,ConnectTimeoutError);this.name="ConnectTimeoutError";this.message=e||"Connect Timeout Error";this.code="UND_ERR_CONNECT_TIMEOUT"}}class HeadersTimeoutError extends UndiciError{constructor(e){super(e);Error.captureStackTrace(this,HeadersTimeoutError);this.name="HeadersTimeoutError";this.message=e||"Headers Timeout Error";this.code="UND_ERR_HEADERS_TIMEOUT"}}class HeadersOverflowError extends UndiciError{constructor(e){super(e);Error.captureStackTrace(this,HeadersOverflowError);this.name="HeadersOverflowError";this.message=e||"Headers Overflow Error";this.code="UND_ERR_HEADERS_OVERFLOW"}}class BodyTimeoutError extends UndiciError{constructor(e){super(e);Error.captureStackTrace(this,BodyTimeoutError);this.name="BodyTimeoutError";this.message=e||"Body Timeout Error";this.code="UND_ERR_BODY_TIMEOUT"}}class ResponseStatusCodeError extends UndiciError{constructor(e,t,n,s){super(e);Error.captureStackTrace(this,ResponseStatusCodeError);this.name="ResponseStatusCodeError";this.message=e||"Response Status Code Error";this.code="UND_ERR_RESPONSE_STATUS_CODE";this.body=s;this.status=t;this.statusCode=t;this.headers=n}}class InvalidArgumentError extends UndiciError{constructor(e){super(e);Error.captureStackTrace(this,InvalidArgumentError);this.name="InvalidArgumentError";this.message=e||"Invalid Argument Error";this.code="UND_ERR_INVALID_ARG"}}class InvalidReturnValueError extends UndiciError{constructor(e){super(e);Error.captureStackTrace(this,InvalidReturnValueError);this.name="InvalidReturnValueError";this.message=e||"Invalid Return Value Error";this.code="UND_ERR_INVALID_RETURN_VALUE"}}class RequestAbortedError extends UndiciError{constructor(e){super(e);Error.captureStackTrace(this,RequestAbortedError);this.name="AbortError";this.message=e||"Request aborted";this.code="UND_ERR_ABORTED"}}class InformationalError extends UndiciError{constructor(e){super(e);Error.captureStackTrace(this,InformationalError);this.name="InformationalError";this.message=e||"Request information";this.code="UND_ERR_INFO"}}class RequestContentLengthMismatchError extends UndiciError{constructor(e){super(e);Error.captureStackTrace(this,RequestContentLengthMismatchError);this.name="RequestContentLengthMismatchError";this.message=e||"Request body length does not match content-length header";this.code="UND_ERR_REQ_CONTENT_LENGTH_MISMATCH"}}class ResponseContentLengthMismatchError extends UndiciError{constructor(e){super(e);Error.captureStackTrace(this,ResponseContentLengthMismatchError);this.name="ResponseContentLengthMismatchError";this.message=e||"Response body length does not match content-length header";this.code="UND_ERR_RES_CONTENT_LENGTH_MISMATCH"}}class ClientDestroyedError extends UndiciError{constructor(e){super(e);Error.captureStackTrace(this,ClientDestroyedError);this.name="ClientDestroyedError";this.message=e||"The client is destroyed";this.code="UND_ERR_DESTROYED"}}class ClientClosedError extends UndiciError{constructor(e){super(e);Error.captureStackTrace(this,ClientClosedError);this.name="ClientClosedError";this.message=e||"The client is closed";this.code="UND_ERR_CLOSED"}}class SocketError extends UndiciError{constructor(e,t){super(e);Error.captureStackTrace(this,SocketError);this.name="SocketError";this.message=e||"Socket error";this.code="UND_ERR_SOCKET";this.socket=t}}class NotSupportedError extends UndiciError{constructor(e){super(e);Error.captureStackTrace(this,NotSupportedError);this.name="NotSupportedError";this.message=e||"Not supported error";this.code="UND_ERR_NOT_SUPPORTED"}}class BalancedPoolMissingUpstreamError extends UndiciError{constructor(e){super(e);Error.captureStackTrace(this,NotSupportedError);this.name="MissingUpstreamError";this.message=e||"No upstream has been added to the BalancedPool";this.code="UND_ERR_BPL_MISSING_UPSTREAM"}}class HTTPParserError extends Error{constructor(e,t,n){super(e);Error.captureStackTrace(this,HTTPParserError);this.name="HTTPParserError";this.code=t?`HPE_${t}`:undefined;this.data=n?n.toString():undefined}}class ResponseExceededMaxSizeError extends UndiciError{constructor(e){super(e);Error.captureStackTrace(this,ResponseExceededMaxSizeError);this.name="ResponseExceededMaxSizeError";this.message=e||"Response content exceeded max size";this.code="UND_ERR_RES_EXCEEDED_MAX_SIZE"}}e.exports={HTTPParserError:HTTPParserError,UndiciError:UndiciError,HeadersTimeoutError:HeadersTimeoutError,HeadersOverflowError:HeadersOverflowError,BodyTimeoutError:BodyTimeoutError,RequestContentLengthMismatchError:RequestContentLengthMismatchError,ConnectTimeoutError:ConnectTimeoutError,ResponseStatusCodeError:ResponseStatusCodeError,InvalidArgumentError:InvalidArgumentError,InvalidReturnValueError:InvalidReturnValueError,RequestAbortedError:RequestAbortedError,ClientDestroyedError:ClientDestroyedError,ClientClosedError:ClientClosedError,InformationalError:InformationalError,SocketError:SocketError,NotSupportedError:NotSupportedError,ResponseContentLengthMismatchError:ResponseContentLengthMismatchError,BalancedPoolMissingUpstreamError:BalancedPoolMissingUpstreamError,ResponseExceededMaxSizeError:ResponseExceededMaxSizeError}},2905:(e,t,n)=>{"use strict";const{InvalidArgumentError:s,NotSupportedError:i}=n(8045);const r=n(9491);const{kHTTP2BuildRequest:o,kHTTP2CopyHeaders:A,kHTTP1BuildRequest:a}=n(2785);const c=n(3983);const u=/^[\^_`a-zA-Z\-0-9!#$%&'*+.|~]+$/;const l=/[^\t\x20-\x7e\x80-\xff]/;const d=/[^\u0021-\u00ff]/;const p=Symbol("handler");const g={};let h;try{const e=n(7643);g.create=e.channel("undici:request:create");g.bodySent=e.channel("undici:request:bodySent");g.headers=e.channel("undici:request:headers");g.trailers=e.channel("undici:request:trailers");g.error=e.channel("undici:request:error")}catch{g.create={hasSubscribers:false};g.bodySent={hasSubscribers:false};g.headers={hasSubscribers:false};g.trailers={hasSubscribers:false};g.error={hasSubscribers:false}}class Request{constructor(e,{path:t,method:i,body:r,headers:o,query:A,idempotent:a,blocking:l,upgrade:f,headersTimeout:E,bodyTimeout:m,reset:C,throwOnError:Q,expectContinue:I},B){if(typeof t!=="string"){throw new s("path must be a string")}else if(t[0]!=="/"&&!(t.startsWith("http://")||t.startsWith("https://"))&&i!=="CONNECT"){throw new s("path must be an absolute URL or start with a slash")}else if(d.exec(t)!==null){throw new s("invalid request path")}if(typeof i!=="string"){throw new s("method must be a string")}else if(u.exec(i)===null){throw new s("invalid request method")}if(f&&typeof f!=="string"){throw new s("upgrade must be a string")}if(E!=null&&(!Number.isFinite(E)||E<0)){throw new s("invalid headersTimeout")}if(m!=null&&(!Number.isFinite(m)||m<0)){throw new s("invalid bodyTimeout")}if(C!=null&&typeof C!=="boolean"){throw new s("invalid reset")}if(I!=null&&typeof I!=="boolean"){throw new s("invalid expectContinue")}this.headersTimeout=E;this.bodyTimeout=m;this.throwOnError=Q===true;this.method=i;if(r==null){this.body=null}else if(c.isStream(r)){this.body=r}else if(c.isBuffer(r)){this.body=r.byteLength?r:null}else if(ArrayBuffer.isView(r)){this.body=r.buffer.byteLength?Buffer.from(r.buffer,r.byteOffset,r.byteLength):null}else if(r instanceof ArrayBuffer){this.body=r.byteLength?Buffer.from(r):null}else if(typeof r==="string"){this.body=r.length?Buffer.from(r):null}else if(c.isFormDataLike(r)||c.isIterable(r)||c.isBlobLike(r)){this.body=r}else{throw new s("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable")}this.completed=false;this.aborted=false;this.upgrade=f||null;this.path=A?c.buildURL(t,A):t;this.origin=e;this.idempotent=a==null?i==="HEAD"||i==="GET":a;this.blocking=l==null?false:l;this.reset=C==null?null:C;this.host=null;this.contentLength=null;this.contentType=null;this.headers="";this.expectContinue=I!=null?I:false;if(Array.isArray(o)){if(o.length%2!==0){throw new s("headers array must be even")}for(let e=0;e{e.exports={kClose:Symbol("close"),kDestroy:Symbol("destroy"),kDispatch:Symbol("dispatch"),kUrl:Symbol("url"),kWriting:Symbol("writing"),kResuming:Symbol("resuming"),kQueue:Symbol("queue"),kConnect:Symbol("connect"),kConnecting:Symbol("connecting"),kHeadersList:Symbol("headers list"),kKeepAliveDefaultTimeout:Symbol("default keep alive timeout"),kKeepAliveMaxTimeout:Symbol("max keep alive timeout"),kKeepAliveTimeoutThreshold:Symbol("keep alive timeout threshold"),kKeepAliveTimeoutValue:Symbol("keep alive timeout"),kKeepAlive:Symbol("keep alive"),kHeadersTimeout:Symbol("headers timeout"),kBodyTimeout:Symbol("body timeout"),kServerName:Symbol("server name"),kLocalAddress:Symbol("local address"),kHost:Symbol("host"),kNoRef:Symbol("no ref"),kBodyUsed:Symbol("used"),kRunning:Symbol("running"),kBlocking:Symbol("blocking"),kPending:Symbol("pending"),kSize:Symbol("size"),kBusy:Symbol("busy"),kQueued:Symbol("queued"),kFree:Symbol("free"),kConnected:Symbol("connected"),kClosed:Symbol("closed"),kNeedDrain:Symbol("need drain"),kReset:Symbol("reset"),kDestroyed:Symbol.for("nodejs.stream.destroyed"),kMaxHeadersSize:Symbol("max headers size"),kRunningIdx:Symbol("running index"),kPendingIdx:Symbol("pending index"),kError:Symbol("error"),kClients:Symbol("clients"),kClient:Symbol("client"),kParser:Symbol("parser"),kOnDestroyed:Symbol("destroy callbacks"),kPipelining:Symbol("pipelining"),kSocket:Symbol("socket"),kHostHeader:Symbol("host header"),kConnector:Symbol("connector"),kStrictContentLength:Symbol("strict content length"),kMaxRedirections:Symbol("maxRedirections"),kMaxRequests:Symbol("maxRequestsPerClient"),kProxy:Symbol("proxy agent options"),kCounter:Symbol("socket request counter"),kInterceptors:Symbol("dispatch interceptors"),kMaxResponseSize:Symbol("max response size"),kHTTP2Session:Symbol("http2Session"),kHTTP2SessionState:Symbol("http2Session state"),kHTTP2BuildRequest:Symbol("http2 build request"),kHTTP1BuildRequest:Symbol("http1 build request"),kHTTP2CopyHeaders:Symbol("http2 copy headers"),kHTTPConnVersion:Symbol("http connection version")}},3983:(e,t,n)=>{"use strict";const s=n(9491);const{kDestroyed:i,kBodyUsed:r}=n(2785);const{IncomingMessage:o}=n(3685);const A=n(2781);const a=n(1808);const{InvalidArgumentError:c}=n(8045);const{Blob:u}=n(4300);const l=n(3837);const{stringify:d}=n(3477);const[p,g]=process.versions.node.split(".").map((e=>Number(e)));function nop(){}function isStream(e){return e&&typeof e==="object"&&typeof e.pipe==="function"&&typeof e.on==="function"}function isBlobLike(e){return u&&e instanceof u||e&&typeof e==="object"&&(typeof e.stream==="function"||typeof e.arrayBuffer==="function")&&/^(Blob|File)$/.test(e[Symbol.toStringTag])}function buildURL(e,t){if(e.includes("?")||e.includes("#")){throw new Error('Query params cannot be passed when url already contains "?" or "#".')}const n=d(t);if(n){e+="?"+n}return e}function parseURL(e){if(typeof e==="string"){e=new URL(e);if(!/^https?:/.test(e.origin||e.protocol)){throw new c("Invalid URL protocol: the URL must start with `http:` or `https:`.")}return e}if(!e||typeof e!=="object"){throw new c("Invalid URL: The URL argument must be a non-null object.")}if(!/^https?:/.test(e.origin||e.protocol)){throw new c("Invalid URL protocol: the URL must start with `http:` or `https:`.")}if(!(e instanceof URL)){if(e.port!=null&&e.port!==""&&!Number.isFinite(parseInt(e.port))){throw new c("Invalid URL: port must be a valid integer or a string representation of an integer.")}if(e.path!=null&&typeof e.path!=="string"){throw new c("Invalid URL path: the path must be a string or null/undefined.")}if(e.pathname!=null&&typeof e.pathname!=="string"){throw new c("Invalid URL pathname: the pathname must be a string or null/undefined.")}if(e.hostname!=null&&typeof e.hostname!=="string"){throw new c("Invalid URL hostname: the hostname must be a string or null/undefined.")}if(e.origin!=null&&typeof e.origin!=="string"){throw new c("Invalid URL origin: the origin must be a string or null/undefined.")}const t=e.port!=null?e.port:e.protocol==="https:"?443:80;let n=e.origin!=null?e.origin:`${e.protocol}//${e.hostname}:${t}`;let s=e.path!=null?e.path:`${e.pathname||""}${e.search||""}`;if(n.endsWith("/")){n=n.substring(0,n.length-1)}if(s&&!s.startsWith("/")){s=`/${s}`}e=new URL(n+s)}return e}function parseOrigin(e){e=parseURL(e);if(e.pathname!=="/"||e.search||e.hash){throw new c("invalid url")}return e}function getHostname(e){if(e[0]==="["){const t=e.indexOf("]");s(t!==-1);return e.substr(1,t-1)}const t=e.indexOf(":");if(t===-1)return e;return e.substr(0,t)}function getServerName(e){if(!e){return null}s.strictEqual(typeof e,"string");const t=getHostname(e);if(a.isIP(t)){return""}return t}function deepClone(e){return JSON.parse(JSON.stringify(e))}function isAsyncIterable(e){return!!(e!=null&&typeof e[Symbol.asyncIterator]==="function")}function isIterable(e){return!!(e!=null&&(typeof e[Symbol.iterator]==="function"||typeof e[Symbol.asyncIterator]==="function"))}function bodyLength(e){if(e==null){return 0}else if(isStream(e)){const t=e._readableState;return t&&t.objectMode===false&&t.ended===true&&Number.isFinite(t.length)?t.length:null}else if(isBlobLike(e)){return e.size!=null?e.size:null}else if(isBuffer(e)){return e.byteLength}return null}function isDestroyed(e){return!e||!!(e.destroyed||e[i])}function isReadableAborted(e){const t=e&&e._readableState;return isDestroyed(e)&&t&&!t.endEmitted}function destroy(e,t){if(!isStream(e)||isDestroyed(e)){return}if(typeof e.destroy==="function"){if(Object.getPrototypeOf(e).constructor===o){e.socket=null}e.destroy(t)}else if(t){process.nextTick(((e,t)=>{e.emit("error",t)}),e,t)}if(e.destroyed!==true){e[i]=true}}const h=/timeout=(\d+)/;function parseKeepAliveTimeout(e){const t=e.toString().match(h);return t?parseInt(t[1],10)*1e3:null}function parseHeaders(e,t={}){if(!Array.isArray(e))return e;for(let n=0;n{e.close()}))}else{const t=Buffer.isBuffer(s)?s:Buffer.from(s);e.enqueue(new Uint8Array(t))}return e.desiredSize>0},async cancel(e){await t.return()}},0)}function isFormDataLike(e){return e&&typeof e==="object"&&typeof e.append==="function"&&typeof e.delete==="function"&&typeof e.get==="function"&&typeof e.getAll==="function"&&typeof e.has==="function"&&typeof e.set==="function"&&e[Symbol.toStringTag]==="FormData"}function throwIfAborted(e){if(!e){return}if(typeof e.throwIfAborted==="function"){e.throwIfAborted()}else{if(e.aborted){const e=new Error("The operation was aborted");e.name="AbortError";throw e}}}let E;function addAbortListener(e,t){if(typeof Symbol.dispose==="symbol"){if(!E){E=n(2361)}if(typeof E.addAbortListener==="function"&&"aborted"in e){return E.addAbortListener(e,t)}}if("addEventListener"in e){e.addEventListener("abort",t,{once:true});return()=>e.removeEventListener("abort",t)}e.addListener("abort",t);return()=>e.removeListener("abort",t)}const m=!!String.prototype.toWellFormed;function toUSVString(e){if(m){return`${e}`.toWellFormed()}else if(l.toUSVString){return l.toUSVString(e)}return`${e}`}const C=Object.create(null);C.enumerable=true;e.exports={kEnumerableProperty:C,nop:nop,isDisturbed:isDisturbed,isErrored:isErrored,isReadable:isReadable,toUSVString:toUSVString,isReadableAborted:isReadableAborted,isBlobLike:isBlobLike,parseOrigin:parseOrigin,parseURL:parseURL,getServerName:getServerName,isStream:isStream,isIterable:isIterable,isAsyncIterable:isAsyncIterable,isDestroyed:isDestroyed,parseRawHeaders:parseRawHeaders,parseHeaders:parseHeaders,parseKeepAliveTimeout:parseKeepAliveTimeout,destroy:destroy,bodyLength:bodyLength,deepClone:deepClone,ReadableStreamFrom:ReadableStreamFrom,isBuffer:isBuffer,validateHandler:validateHandler,getSocketInfo:getSocketInfo,isFormDataLike:isFormDataLike,buildURL:buildURL,throwIfAborted:throwIfAborted,addAbortListener:addAbortListener,nodeMajor:p,nodeMinor:g,nodeHasAutoSelectFamily:p>18||p===18&&g>=13}},4839:(e,t,n)=>{"use strict";const s=n(412);const{ClientDestroyedError:i,ClientClosedError:r,InvalidArgumentError:o}=n(8045);const{kDestroy:A,kClose:a,kDispatch:c,kInterceptors:u}=n(2785);const l=Symbol("destroyed");const d=Symbol("closed");const p=Symbol("onDestroyed");const g=Symbol("onClosed");const h=Symbol("Intercepted Dispatch");class DispatcherBase extends s{constructor(){super();this[l]=false;this[p]=null;this[d]=false;this[g]=[]}get destroyed(){return this[l]}get closed(){return this[d]}get interceptors(){return this[u]}set interceptors(e){if(e){for(let t=e.length-1;t>=0;t--){const e=this[u][t];if(typeof e!=="function"){throw new o("interceptor must be an function")}}}this[u]=e}close(e){if(e===undefined){return new Promise(((e,t)=>{this.close(((n,s)=>n?t(n):e(s)))}))}if(typeof e!=="function"){throw new o("invalid callback")}if(this[l]){queueMicrotask((()=>e(new i,null)));return}if(this[d]){if(this[g]){this[g].push(e)}else{queueMicrotask((()=>e(null,null)))}return}this[d]=true;this[g].push(e);const onClosed=()=>{const e=this[g];this[g]=null;for(let t=0;tthis.destroy())).then((()=>{queueMicrotask(onClosed)}))}destroy(e,t){if(typeof e==="function"){t=e;e=null}if(t===undefined){return new Promise(((t,n)=>{this.destroy(e,((e,s)=>e?n(e):t(s)))}))}if(typeof t!=="function"){throw new o("invalid callback")}if(this[l]){if(this[p]){this[p].push(t)}else{queueMicrotask((()=>t(null,null)))}return}if(!e){e=new i}this[l]=true;this[p]=this[p]||[];this[p].push(t);const onDestroyed=()=>{const e=this[p];this[p]=null;for(let t=0;t{queueMicrotask(onDestroyed)}))}[h](e,t){if(!this[u]||this[u].length===0){this[h]=this[c];return this[c](e,t)}let n=this[c].bind(this);for(let e=this[u].length-1;e>=0;e--){n=this[u][e](n)}this[h]=n;return n(e,t)}dispatch(e,t){if(!t||typeof t!=="object"){throw new o("handler must be an object")}try{if(!e||typeof e!=="object"){throw new o("opts must be an object.")}if(this[l]||this[p]){throw new i}if(this[d]){throw new r}return this[h](e,t)}catch(e){if(typeof t.onError!=="function"){throw new o("invalid onError method")}t.onError(e);return false}}}e.exports=DispatcherBase},412:(e,t,n)=>{"use strict";const s=n(2361);class Dispatcher extends s{dispatch(){throw new Error("not implemented")}close(){throw new Error("not implemented")}destroy(){throw new Error("not implemented")}}e.exports=Dispatcher},1472:(e,t,n)=>{"use strict";const s=n(3438);const i=n(3983);const{ReadableStreamFrom:r,isBlobLike:o,isReadableStreamLike:A,readableStreamClose:a,createDeferredPromise:c,fullyReadBody:u}=n(2538);const{FormData:l}=n(2015);const{kState:d}=n(5861);const{webidl:p}=n(1744);const{DOMException:g,structuredClone:h}=n(1037);const{Blob:f,File:E}=n(4300);const{kBodyUsed:m}=n(2785);const C=n(9491);const{isErrored:Q}=n(3983);const{isUint8Array:I,isArrayBuffer:B}=n(4978);const{File:y}=n(8511);const{parseMIMEType:b,serializeAMimeType:w}=n(685);let R=globalThis.ReadableStream;const v=E??y;const k=new TextEncoder;const S=new TextDecoder;function extractBody(e,t=false){if(!R){R=n(5356).ReadableStream}let s=null;if(e instanceof R){s=e}else if(o(e)){s=e.stream()}else{s=new R({async pull(e){e.enqueue(typeof u==="string"?k.encode(u):u);queueMicrotask((()=>a(e)))},start(){},type:undefined})}C(A(s));let c=null;let u=null;let l=null;let d=null;if(typeof e==="string"){u=e;d="text/plain;charset=UTF-8"}else if(e instanceof URLSearchParams){u=e.toString();d="application/x-www-form-urlencoded;charset=UTF-8"}else if(B(e)){u=new Uint8Array(e.slice())}else if(ArrayBuffer.isView(e)){u=new Uint8Array(e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength))}else if(i.isFormDataLike(e)){const t=`----formdata-undici-0${`${Math.floor(Math.random()*1e11)}`.padStart(11,"0")}`;const n=`--${t}\r\nContent-Disposition: form-data` -/*! formdata-polyfill. MIT License. Jimmy Wärting */;const escape=e=>e.replace(/\n/g,"%0A").replace(/\r/g,"%0D").replace(/"/g,"%22");const normalizeLinefeeds=e=>e.replace(/\r?\n|\r/g,"\r\n");const s=[];const i=new Uint8Array([13,10]);l=0;let r=false;for(const[t,o]of e){if(typeof o==="string"){const e=k.encode(n+`; name="${escape(normalizeLinefeeds(t))}"`+`\r\n\r\n${normalizeLinefeeds(o)}\r\n`);s.push(e);l+=e.byteLength}else{const e=k.encode(`${n}; name="${escape(normalizeLinefeeds(t))}"`+(o.name?`; filename="${escape(o.name)}"`:"")+"\r\n"+`Content-Type: ${o.type||"application/octet-stream"}\r\n\r\n`);s.push(e,o,i);if(typeof o.size==="number"){l+=e.byteLength+o.size+i.byteLength}else{r=true}}}const o=k.encode(`--${t}--`);s.push(o);l+=o.byteLength;if(r){l=null}u=e;c=async function*(){for(const e of s){if(e.stream){yield*e.stream()}else{yield e}}};d="multipart/form-data; boundary="+t}else if(o(e)){u=e;l=e.size;if(e.type){d=e.type}}else if(typeof e[Symbol.asyncIterator]==="function"){if(t){throw new TypeError("keepalive")}if(i.isDisturbed(e)||e.locked){throw new TypeError("Response body object should not be disturbed or locked")}s=e instanceof R?e:r(e)}if(typeof u==="string"||i.isBuffer(u)){l=Buffer.byteLength(u)}if(c!=null){let t;s=new R({async start(){t=c(e)[Symbol.asyncIterator]()},async pull(e){const{value:n,done:i}=await t.next();if(i){queueMicrotask((()=>{e.close()}))}else{if(!Q(s)){e.enqueue(new Uint8Array(n))}}return e.desiredSize>0},async cancel(e){await t.return()},type:undefined})}const p={stream:s,source:u,length:l};return[p,d]}function safelyExtractBody(e,t=false){if(!R){R=n(5356).ReadableStream}if(e instanceof R){C(!i.isDisturbed(e),"The body has already been consumed.");C(!e.locked,"The stream is locked.")}return extractBody(e,t)}function cloneBody(e){const[t,n]=e.stream.tee();const s=h(n,{transfer:[n]});const[,i]=s.tee();e.stream=t;return{stream:i,length:e.length,source:e.source}}async function*consumeBody(e){if(e){if(I(e)){yield e}else{const t=e.stream;if(i.isDisturbed(t)){throw new TypeError("The body has already been consumed.")}if(t.locked){throw new TypeError("The stream is locked.")}t[m]=true;yield*t}}}function throwIfAborted(e){if(e.aborted){throw new g("The operation was aborted.","AbortError")}}function bodyMixinMethods(e){const t={blob(){return specConsumeBody(this,(e=>{let t=bodyMimeType(this);if(t==="failure"){t=""}else if(t){t=w(t)}return new f([e],{type:t})}),e)},arrayBuffer(){return specConsumeBody(this,(e=>new Uint8Array(e).buffer),e)},text(){return specConsumeBody(this,utf8DecodeBytes,e)},json(){return specConsumeBody(this,parseJSONFromBytes,e)},async formData(){p.brandCheck(this,e);throwIfAborted(this[d]);const t=this.headers.get("Content-Type");if(/multipart\/form-data/.test(t)){const e={};for(const[t,n]of this.headers)e[t.toLowerCase()]=n;const t=new l;let n;try{n=new s({headers:e,preservePath:true})}catch(e){throw new g(`${e}`,"AbortError")}n.on("field",((e,n)=>{t.append(e,n)}));n.on("file",((e,n,s,i,r)=>{const o=[];if(i==="base64"||i.toLowerCase()==="base64"){let i="";n.on("data",(e=>{i+=e.toString().replace(/[\r\n]/gm,"");const t=i.length-i.length%4;o.push(Buffer.from(i.slice(0,t),"base64"));i=i.slice(t)}));n.on("end",(()=>{o.push(Buffer.from(i,"base64"));t.append(e,new v(o,s,{type:r}))}))}else{n.on("data",(e=>{o.push(e)}));n.on("end",(()=>{t.append(e,new v(o,s,{type:r}))}))}}));const i=new Promise(((e,t)=>{n.on("finish",e);n.on("error",(e=>t(new TypeError(e))))}));if(this.body!==null)for await(const e of consumeBody(this[d].body))n.write(e);n.end();await i;return t}else if(/application\/x-www-form-urlencoded/.test(t)){let e;try{let t="";const n=new TextDecoder("utf-8",{ignoreBOM:true});for await(const e of consumeBody(this[d].body)){if(!I(e)){throw new TypeError("Expected Uint8Array chunk")}t+=n.decode(e,{stream:true})}t+=n.decode();e=new URLSearchParams(t)}catch(e){throw Object.assign(new TypeError,{cause:e})}const t=new l;for(const[n,s]of e){t.append(n,s)}return t}else{await Promise.resolve();throwIfAborted(this[d]);throw p.errors.exception({header:`${e.name}.formData`,message:"Could not parse content as FormData."})}}};return t}function mixinBody(e){Object.assign(e.prototype,bodyMixinMethods(e))}async function specConsumeBody(e,t,n){p.brandCheck(e,n);throwIfAborted(e[d]);if(bodyUnusable(e[d].body)){throw new TypeError("Body is unusable")}const s=c();const errorSteps=e=>s.reject(e);const successSteps=e=>{try{s.resolve(t(e))}catch(e){errorSteps(e)}};if(e[d].body==null){successSteps(new Uint8Array);return s.promise}await u(e[d].body,successSteps,errorSteps);return s.promise}function bodyUnusable(e){return e!=null&&(e.stream.locked||i.isDisturbed(e.stream))}function utf8DecodeBytes(e){if(e.length===0){return""}if(e[0]===239&&e[1]===187&&e[2]===191){e=e.subarray(3)}const t=S.decode(e);return t}function parseJSONFromBytes(e){return JSON.parse(utf8DecodeBytes(e))}function bodyMimeType(e){const{headersList:t}=e[d];const n=t.get("content-type");if(n===null){return"failure"}return b(n)}e.exports={extractBody:extractBody,safelyExtractBody:safelyExtractBody,cloneBody:cloneBody,mixinBody:mixinBody}},1037:(e,t,n)=>{"use strict";const{MessageChannel:s,receiveMessageOnPort:i}=n(1267);const r=["GET","HEAD","POST"];const o=new Set(r);const A=[101,204,205,304];const a=[301,302,303,307,308];const c=new Set(a);const u=["1","7","9","11","13","15","17","19","20","21","22","23","25","37","42","43","53","69","77","79","87","95","101","102","103","104","109","110","111","113","115","117","119","123","135","137","139","143","161","179","389","427","465","512","513","514","515","526","530","531","532","540","548","554","556","563","587","601","636","989","990","993","995","1719","1720","1723","2049","3659","4045","5060","5061","6000","6566","6665","6666","6667","6668","6669","6697","10080"];const l=new Set(u);const d=["","no-referrer","no-referrer-when-downgrade","same-origin","origin","strict-origin","origin-when-cross-origin","strict-origin-when-cross-origin","unsafe-url"];const p=new Set(d);const g=["follow","manual","error"];const h=["GET","HEAD","OPTIONS","TRACE"];const f=new Set(h);const E=["navigate","same-origin","no-cors","cors"];const m=["omit","same-origin","include"];const C=["default","no-store","reload","no-cache","force-cache","only-if-cached"];const Q=["content-encoding","content-language","content-location","content-type","content-length"];const I=["half"];const B=["CONNECT","TRACE","TRACK"];const y=new Set(B);const b=["audio","audioworklet","font","image","manifest","paintworklet","script","style","track","video","xslt",""];const w=new Set(b);const R=globalThis.DOMException??(()=>{try{atob("~")}catch(e){return Object.getPrototypeOf(e).constructor}})();let v;const k=globalThis.structuredClone??function structuredClone(e,t=undefined){if(arguments.length===0){throw new TypeError("missing argument")}if(!v){v=new s}v.port1.unref();v.port2.unref();v.port1.postMessage(e,t?.transfer);return i(v.port2).message};e.exports={DOMException:R,structuredClone:k,subresource:b,forbiddenMethods:B,requestBodyHeader:Q,referrerPolicy:d,requestRedirect:g,requestMode:E,requestCredentials:m,requestCache:C,redirectStatus:a,corsSafeListedMethods:r,nullBodyStatus:A,safeMethods:h,badPorts:u,requestDuplex:I,subresourceSet:w,badPortsSet:l,redirectStatusSet:c,corsSafeListedMethodsSet:o,safeMethodsSet:f,forbiddenMethodsSet:y,referrerPolicySet:p}},685:(e,t,n)=>{const s=n(9491);const{atob:i}=n(4300);const{isomorphicDecode:r}=n(2538);const o=new TextEncoder;const A=/^[!#$%&'*+-.^_|~A-Za-z0-9]+$/;const a=/(\u000A|\u000D|\u0009|\u0020)/;const c=/[\u0009|\u0020-\u007E|\u0080-\u00FF]/;function dataURLProcessor(e){s(e.protocol==="data:");let t=URLSerializer(e,true);t=t.slice(5);const n={position:0};let i=collectASequenceOfCodePointsFast(",",t,n);const o=i.length;i=removeASCIIWhitespace(i,true,true);if(n.position>=t.length){return"failure"}n.position++;const A=t.slice(o+1);let a=stringPercentDecode(A);if(/;(\u0020){0,}base64$/i.test(i)){const e=r(a);a=forgivingBase64(e);if(a==="failure"){return"failure"}i=i.slice(0,-6);i=i.replace(/(\u0020)+$/,"");i=i.slice(0,-1)}if(i.startsWith(";")){i="text/plain"+i}let c=parseMIMEType(i);if(c==="failure"){c=parseMIMEType("text/plain;charset=US-ASCII")}return{mimeType:c,body:a}}function URLSerializer(e,t=false){const n=e.href;if(!t){return n}const s=n.lastIndexOf("#");if(s===-1){return n}return n.slice(0,s)}function collectASequenceOfCodePoints(e,t,n){let s="";while(n.positione.length){return"failure"}t.position++;let s=collectASequenceOfCodePointsFast(";",e,t);s=removeHTTPWhitespace(s,false,true);if(s.length===0||!A.test(s)){return"failure"}const i=n.toLowerCase();const r=s.toLowerCase();const o={type:i,subtype:r,parameters:new Map,essence:`${i}/${r}`};while(t.positiona.test(e)),e,t);let n=collectASequenceOfCodePoints((e=>e!==";"&&e!=="="),e,t);n=n.toLowerCase();if(t.positione.length){break}let s=null;if(e[t.position]==='"'){s=collectAnHTTPQuotedString(e,t,true);collectASequenceOfCodePointsFast(";",e,t)}else{s=collectASequenceOfCodePointsFast(";",e,t);s=removeHTTPWhitespace(s,false,true);if(s.length===0){continue}}if(n.length!==0&&A.test(n)&&(s.length===0||c.test(s))&&!o.parameters.has(n)){o.parameters.set(n,s)}}return o}function forgivingBase64(e){e=e.replace(/[\u0009\u000A\u000C\u000D\u0020]/g,"");if(e.length%4===0){e=e.replace(/=?=$/,"")}if(e.length%4===1){return"failure"}if(/[^+/0-9A-Za-z]/.test(e)){return"failure"}const t=i(e);const n=new Uint8Array(t.length);for(let e=0;ee!=='"'&&e!=="\\"),e,t);if(t.position>=e.length){break}const n=e[t.position];t.position++;if(n==="\\"){if(t.position>=e.length){r+="\\";break}r+=e[t.position];t.position++}else{s(n==='"');break}}if(n){return r}return e.slice(i,t.position)}function serializeAMimeType(e){s(e!=="failure");const{parameters:t,essence:n}=e;let i=n;for(let[e,n]of t.entries()){i+=";";i+=e;i+="=";if(!A.test(n)){n=n.replace(/(\\|")/g,"\\$1");n='"'+n;n+='"'}i+=n}return i}function isHTTPWhiteSpace(e){return e==="\r"||e==="\n"||e==="\t"||e===" "}function removeHTTPWhitespace(e,t=true,n=true){let s=0;let i=e.length-1;if(t){for(;s0&&isHTTPWhiteSpace(e[i]);i--);}return e.slice(s,i+1)}function isASCIIWhitespace(e){return e==="\r"||e==="\n"||e==="\t"||e==="\f"||e===" "}function removeASCIIWhitespace(e,t=true,n=true){let s=0;let i=e.length-1;if(t){for(;s0&&isASCIIWhitespace(e[i]);i--);}return e.slice(s,i+1)}e.exports={dataURLProcessor:dataURLProcessor,URLSerializer:URLSerializer,collectASequenceOfCodePoints:collectASequenceOfCodePoints,collectASequenceOfCodePointsFast:collectASequenceOfCodePointsFast,stringPercentDecode:stringPercentDecode,parseMIMEType:parseMIMEType,collectAnHTTPQuotedString:collectAnHTTPQuotedString,serializeAMimeType:serializeAMimeType}},8511:(e,t,n)=>{"use strict";const{Blob:s,File:i}=n(4300);const{types:r}=n(3837);const{kState:o}=n(5861);const{isBlobLike:A}=n(2538);const{webidl:a}=n(1744);const{parseMIMEType:c,serializeAMimeType:u}=n(685);const{kEnumerableProperty:l}=n(3983);const d=new TextEncoder;class File extends s{constructor(e,t,n={}){a.argumentLengthCheck(arguments,2,{header:"File constructor"});e=a.converters["sequence"](e);t=a.converters.USVString(t);n=a.converters.FilePropertyBag(n);const s=t;let i=n.type;let r;e:{if(i){i=c(i);if(i==="failure"){i="";break e}i=u(i).toLowerCase()}r=n.lastModified}super(processBlobParts(e,n),{type:i});this[o]={name:s,lastModified:r,type:i}}get name(){a.brandCheck(this,File);return this[o].name}get lastModified(){a.brandCheck(this,File);return this[o].lastModified}get type(){a.brandCheck(this,File);return this[o].type}}class FileLike{constructor(e,t,n={}){const s=t;const i=n.type;const r=n.lastModified??Date.now();this[o]={blobLike:e,name:s,type:i,lastModified:r}}stream(...e){a.brandCheck(this,FileLike);return this[o].blobLike.stream(...e)}arrayBuffer(...e){a.brandCheck(this,FileLike);return this[o].blobLike.arrayBuffer(...e)}slice(...e){a.brandCheck(this,FileLike);return this[o].blobLike.slice(...e)}text(...e){a.brandCheck(this,FileLike);return this[o].blobLike.text(...e)}get size(){a.brandCheck(this,FileLike);return this[o].blobLike.size}get type(){a.brandCheck(this,FileLike);return this[o].blobLike.type}get name(){a.brandCheck(this,FileLike);return this[o].name}get lastModified(){a.brandCheck(this,FileLike);return this[o].lastModified}get[Symbol.toStringTag](){return"File"}}Object.defineProperties(File.prototype,{[Symbol.toStringTag]:{value:"File",configurable:true},name:l,lastModified:l});a.converters.Blob=a.interfaceConverter(s);a.converters.BlobPart=function(e,t){if(a.util.Type(e)==="Object"){if(A(e)){return a.converters.Blob(e,{strict:false})}if(ArrayBuffer.isView(e)||r.isAnyArrayBuffer(e)){return a.converters.BufferSource(e,t)}}return a.converters.USVString(e,t)};a.converters["sequence"]=a.sequenceConverter(a.converters.BlobPart);a.converters.FilePropertyBag=a.dictionaryConverter([{key:"lastModified",converter:a.converters["long long"],get defaultValue(){return Date.now()}},{key:"type",converter:a.converters.DOMString,defaultValue:""},{key:"endings",converter:e=>{e=a.converters.DOMString(e);e=e.toLowerCase();if(e!=="native"){e="transparent"}return e},defaultValue:"transparent"}]);function processBlobParts(e,t){const n=[];for(const s of e){if(typeof s==="string"){let e=s;if(t.endings==="native"){e=convertLineEndingsNative(e)}n.push(d.encode(e))}else if(r.isAnyArrayBuffer(s)||r.isTypedArray(s)){if(!s.buffer){n.push(new Uint8Array(s))}else{n.push(new Uint8Array(s.buffer,s.byteOffset,s.byteLength))}}else if(A(s)){n.push(s)}}return n}function convertLineEndingsNative(e){let t="\n";if(process.platform==="win32"){t="\r\n"}return e.replace(/\r?\n/g,t)}function isFileLike(e){return i&&e instanceof i||e instanceof File||e&&(typeof e.stream==="function"||typeof e.arrayBuffer==="function")&&e[Symbol.toStringTag]==="File"}e.exports={File:File,FileLike:FileLike,isFileLike:isFileLike}},2015:(e,t,n)=>{"use strict";const{isBlobLike:s,toUSVString:i,makeIterator:r}=n(2538);const{kState:o}=n(5861);const{File:A,FileLike:a,isFileLike:c}=n(8511);const{webidl:u}=n(1744);const{Blob:l,File:d}=n(4300);const p=d??A;class FormData{constructor(e){if(e!==undefined){throw u.errors.conversionFailed({prefix:"FormData constructor",argument:"Argument 1",types:["undefined"]})}this[o]=[]}append(e,t,n=undefined){u.brandCheck(this,FormData);u.argumentLengthCheck(arguments,2,{header:"FormData.append"});if(arguments.length===3&&!s(t)){throw new TypeError("Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'")}e=u.converters.USVString(e);t=s(t)?u.converters.Blob(t,{strict:false}):u.converters.USVString(t);n=arguments.length===3?u.converters.USVString(n):undefined;const i=makeEntry(e,t,n);this[o].push(i)}delete(e){u.brandCheck(this,FormData);u.argumentLengthCheck(arguments,1,{header:"FormData.delete"});e=u.converters.USVString(e);this[o]=this[o].filter((t=>t.name!==e))}get(e){u.brandCheck(this,FormData);u.argumentLengthCheck(arguments,1,{header:"FormData.get"});e=u.converters.USVString(e);const t=this[o].findIndex((t=>t.name===e));if(t===-1){return null}return this[o][t].value}getAll(e){u.brandCheck(this,FormData);u.argumentLengthCheck(arguments,1,{header:"FormData.getAll"});e=u.converters.USVString(e);return this[o].filter((t=>t.name===e)).map((e=>e.value))}has(e){u.brandCheck(this,FormData);u.argumentLengthCheck(arguments,1,{header:"FormData.has"});e=u.converters.USVString(e);return this[o].findIndex((t=>t.name===e))!==-1}set(e,t,n=undefined){u.brandCheck(this,FormData);u.argumentLengthCheck(arguments,2,{header:"FormData.set"});if(arguments.length===3&&!s(t)){throw new TypeError("Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'")}e=u.converters.USVString(e);t=s(t)?u.converters.Blob(t,{strict:false}):u.converters.USVString(t);n=arguments.length===3?i(n):undefined;const r=makeEntry(e,t,n);const A=this[o].findIndex((t=>t.name===e));if(A!==-1){this[o]=[...this[o].slice(0,A),r,...this[o].slice(A+1).filter((t=>t.name!==e))]}else{this[o].push(r)}}entries(){u.brandCheck(this,FormData);return r((()=>this[o].map((e=>[e.name,e.value]))),"FormData","key+value")}keys(){u.brandCheck(this,FormData);return r((()=>this[o].map((e=>[e.name,e.value]))),"FormData","key")}values(){u.brandCheck(this,FormData);return r((()=>this[o].map((e=>[e.name,e.value]))),"FormData","value")}forEach(e,t=globalThis){u.brandCheck(this,FormData);u.argumentLengthCheck(arguments,1,{header:"FormData.forEach"});if(typeof e!=="function"){throw new TypeError("Failed to execute 'forEach' on 'FormData': parameter 1 is not of type 'Function'.")}for(const[n,s]of this){e.apply(t,[s,n,this])}}}FormData.prototype[Symbol.iterator]=FormData.prototype.entries;Object.defineProperties(FormData.prototype,{[Symbol.toStringTag]:{value:"FormData",configurable:true}});function makeEntry(e,t,n){e=Buffer.from(e).toString("utf8");if(typeof t==="string"){t=Buffer.from(t).toString("utf8")}else{if(!c(t)){t=t instanceof l?new p([t],"blob",{type:t.type}):new a(t,"blob",{type:t.type})}if(n!==undefined){const e={type:t.type,lastModified:t.lastModified};t=d&&t instanceof d||t instanceof A?new p([t],n,e):new a(t,n,e)}}return{name:e,value:t}}e.exports={FormData:FormData}},1246:e=>{"use strict";const t=Symbol.for("undici.globalOrigin.1");function getGlobalOrigin(){return globalThis[t]}function setGlobalOrigin(e){if(e===undefined){Object.defineProperty(globalThis,t,{value:undefined,writable:true,enumerable:false,configurable:false});return}const n=new URL(e);if(n.protocol!=="http:"&&n.protocol!=="https:"){throw new TypeError(`Only http & https urls are allowed, received ${n.protocol}`)}Object.defineProperty(globalThis,t,{value:n,writable:true,enumerable:false,configurable:false})}e.exports={getGlobalOrigin:getGlobalOrigin,setGlobalOrigin:setGlobalOrigin}},554:(e,t,n)=>{"use strict";const{kHeadersList:s}=n(2785);const{kGuard:i}=n(5861);const{kEnumerableProperty:r}=n(3983);const{makeIterator:o,isValidHeaderName:A,isValidHeaderValue:a}=n(2538);const{webidl:c}=n(1744);const u=n(9491);const l=Symbol("headers map");const d=Symbol("headers map sorted");function headerValueNormalize(e){let t=e.length;while(/[\r\n\t ]/.test(e.charAt(--t)));return e.slice(0,t+1).replace(/^[\r\n\t ]+/,"")}function fill(e,t){if(Array.isArray(t)){for(const n of t){if(n.length!==2){throw c.errors.exception({header:"Headers constructor",message:`expected name/value pair to be length 2, found ${n.length}.`})}e.append(n[0],n[1])}}else if(typeof t==="object"&&t!==null){for(const[n,s]of Object.entries(t)){e.append(n,s)}}else{throw c.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence>","record"]})}}class HeadersList{cookies=null;constructor(e){if(e instanceof HeadersList){this[l]=new Map(e[l]);this[d]=e[d];this.cookies=e.cookies}else{this[l]=new Map(e);this[d]=null}}contains(e){e=e.toLowerCase();return this[l].has(e)}clear(){this[l].clear();this[d]=null;this.cookies=null}append(e,t){this[d]=null;const n=e.toLowerCase();const s=this[l].get(n);if(s){const e=n==="cookie"?"; ":", ";this[l].set(n,{name:s.name,value:`${s.value}${e}${t}`})}else{this[l].set(n,{name:e,value:t})}if(n==="set-cookie"){this.cookies??=[];this.cookies.push(t)}}set(e,t){this[d]=null;const n=e.toLowerCase();if(n==="set-cookie"){this.cookies=[t]}return this[l].set(n,{name:e,value:t})}delete(e){this[d]=null;e=e.toLowerCase();if(e==="set-cookie"){this.cookies=null}return this[l].delete(e)}get(e){if(!this.contains(e)){return null}return this[l].get(e.toLowerCase())?.value??null}*[Symbol.iterator](){for(const[e,{value:t}]of this[l]){yield[e,t]}}get entries(){const e={};if(this[l].size){for(const{name:t,value:n}of this[l].values()){e[t]=n}}return e}}class Headers{constructor(e=undefined){this[s]=new HeadersList;this[i]="none";if(e!==undefined){e=c.converters.HeadersInit(e);fill(this,e)}}append(e,t){c.brandCheck(this,Headers);c.argumentLengthCheck(arguments,2,{header:"Headers.append"});e=c.converters.ByteString(e);t=c.converters.ByteString(t);t=headerValueNormalize(t);if(!A(e)){throw c.errors.invalidArgument({prefix:"Headers.append",value:e,type:"header name"})}else if(!a(t)){throw c.errors.invalidArgument({prefix:"Headers.append",value:t,type:"header value"})}if(this[i]==="immutable"){throw new TypeError("immutable")}else if(this[i]==="request-no-cors"){}return this[s].append(e,t)}delete(e){c.brandCheck(this,Headers);c.argumentLengthCheck(arguments,1,{header:"Headers.delete"});e=c.converters.ByteString(e);if(!A(e)){throw c.errors.invalidArgument({prefix:"Headers.delete",value:e,type:"header name"})}if(this[i]==="immutable"){throw new TypeError("immutable")}else if(this[i]==="request-no-cors"){}if(!this[s].contains(e)){return}return this[s].delete(e)}get(e){c.brandCheck(this,Headers);c.argumentLengthCheck(arguments,1,{header:"Headers.get"});e=c.converters.ByteString(e);if(!A(e)){throw c.errors.invalidArgument({prefix:"Headers.get",value:e,type:"header name"})}return this[s].get(e)}has(e){c.brandCheck(this,Headers);c.argumentLengthCheck(arguments,1,{header:"Headers.has"});e=c.converters.ByteString(e);if(!A(e)){throw c.errors.invalidArgument({prefix:"Headers.has",value:e,type:"header name"})}return this[s].contains(e)}set(e,t){c.brandCheck(this,Headers);c.argumentLengthCheck(arguments,2,{header:"Headers.set"});e=c.converters.ByteString(e);t=c.converters.ByteString(t);t=headerValueNormalize(t);if(!A(e)){throw c.errors.invalidArgument({prefix:"Headers.set",value:e,type:"header name"})}else if(!a(t)){throw c.errors.invalidArgument({prefix:"Headers.set",value:t,type:"header value"})}if(this[i]==="immutable"){throw new TypeError("immutable")}else if(this[i]==="request-no-cors"){}return this[s].set(e,t)}getSetCookie(){c.brandCheck(this,Headers);const e=this[s].cookies;if(e){return[...e]}return[]}get[d](){if(this[s][d]){return this[s][d]}const e=[];const t=[...this[s]].sort(((e,t)=>e[0][...this[d].values()]),"Headers","key")}values(){c.brandCheck(this,Headers);return o((()=>[...this[d].values()]),"Headers","value")}entries(){c.brandCheck(this,Headers);return o((()=>[...this[d].values()]),"Headers","key+value")}forEach(e,t=globalThis){c.brandCheck(this,Headers);c.argumentLengthCheck(arguments,1,{header:"Headers.forEach"});if(typeof e!=="function"){throw new TypeError("Failed to execute 'forEach' on 'Headers': parameter 1 is not of type 'Function'.")}for(const[n,s]of this){e.apply(t,[s,n,this])}}[Symbol.for("nodejs.util.inspect.custom")](){c.brandCheck(this,Headers);return this[s]}}Headers.prototype[Symbol.iterator]=Headers.prototype.entries;Object.defineProperties(Headers.prototype,{append:r,delete:r,get:r,has:r,set:r,getSetCookie:r,keys:r,values:r,entries:r,forEach:r,[Symbol.iterator]:{enumerable:false},[Symbol.toStringTag]:{value:"Headers",configurable:true}});c.converters.HeadersInit=function(e){if(c.util.Type(e)==="Object"){if(e[Symbol.iterator]){return c.converters["sequence>"](e)}return c.converters["record"](e)}throw c.errors.conversionFailed({prefix:"Headers constructor",argument:"Argument 1",types:["sequence>","record"]})};e.exports={fill:fill,Headers:Headers,HeadersList:HeadersList}},4881:(e,t,n)=>{"use strict";const{Response:s,makeNetworkError:i,makeAppropriateNetworkError:r,filterResponse:o,makeResponse:A}=n(7823);const{Headers:a}=n(554);const{Request:c,makeRequest:u}=n(8359);const l=n(9796);const{bytesMatch:d,makePolicyContainer:p,clonePolicyContainer:g,requestBadPort:h,TAOCheck:f,appendRequestOriginHeader:E,responseLocationURL:m,requestCurrentURL:C,setRequestReferrerPolicyOnRedirect:Q,tryUpgradeRequestToAPotentiallyTrustworthyURL:I,createOpaqueTimingInfo:B,appendFetchMetadata:y,corsCheck:b,crossOriginResourcePolicyCheck:w,determineRequestsReferrer:R,coarsenedSharedCurrentTime:v,createDeferredPromise:k,isBlobLike:S,sameOrigin:x,isCancelled:D,isAborted:_,isErrorLike:N,fullyReadBody:F,readableStreamClose:U,isomorphicEncode:T,urlIsLocal:M,urlIsHttpHttpsScheme:L,urlHasHttpsScheme:O}=n(2538);const{kState:P,kHeaders:J,kGuard:H,kRealm:q}=n(5861);const G=n(9491);const{safelyExtractBody:Y}=n(1472);const{redirectStatusSet:V,nullBodyStatus:j,safeMethodsSet:W,requestBodyHeader:K,subresourceSet:z,DOMException:Z}=n(1037);const{kHeadersList:X}=n(2785);const $=n(2361);const{Readable:ee,pipeline:te}=n(2781);const{addAbortListener:ne,isErrored:se,isReadable:ie,nodeMajor:re,nodeMinor:oe}=n(3983);const{dataURLProcessor:Ae,serializeAMimeType:ae}=n(685);const{TransformStream:ce}=n(5356);const{getGlobalDispatcher:ue}=n(1892);const{webidl:le}=n(1744);const{STATUS_CODES:de}=n(3685);const pe=["GET","HEAD"];let ge;let he=globalThis.ReadableStream;class Fetch extends ${constructor(e){super();this.dispatcher=e;this.connection=null;this.dump=false;this.state="ongoing";this.setMaxListeners(21)}terminate(e){if(this.state!=="ongoing"){return}this.state="terminated";this.connection?.destroy(e);this.emit("terminated",e)}abort(e){if(this.state!=="ongoing"){return}this.state="aborted";if(!e){e=new Z("The operation was aborted.","AbortError")}this.serializedAbortReason=e;this.connection?.destroy(e);this.emit("terminated",e)}}function fetch(e,t={}){le.argumentLengthCheck(arguments,1,{header:"globalThis.fetch"});const n=k();let i;try{i=new c(e,t)}catch(e){n.reject(e);return n.promise}const r=i[P];if(i.signal.aborted){abortFetch(n,r,null,i.signal.reason);return n.promise}const o=r.client.globalObject;if(o?.constructor?.name==="ServiceWorkerGlobalScope"){r.serviceWorkers="none"}let A=null;const a=null;let u=false;let l=null;ne(i.signal,(()=>{u=true;G(l!=null);l.abort(i.signal.reason);abortFetch(n,r,A,i.signal.reason)}));const handleFetchDone=e=>finalizeAndReportTiming(e,"fetch");const processResponse=e=>{if(u){return Promise.resolve()}if(e.aborted){abortFetch(n,r,A,l.serializedAbortReason);return Promise.resolve()}if(e.type==="error"){n.reject(Object.assign(new TypeError("fetch failed"),{cause:e.error}));return Promise.resolve()}A=new s;A[P]=e;A[q]=a;A[J][X]=e.headersList;A[J][H]="immutable";A[J][q]=a;n.resolve(A)};l=fetching({request:r,processResponseEndOfBody:handleFetchDone,processResponse:processResponse,dispatcher:t.dispatcher??ue()});return n.promise}function finalizeAndReportTiming(e,t="other"){if(e.type==="error"&&e.aborted){return}if(!e.urlList?.length){return}const n=e.urlList[0];let s=e.timingInfo;let i=e.cacheState;if(!L(n)){return}if(s===null){return}if(!s.timingAllowPassed){s=B({startTime:s.startTime});i=""}s.endTime=v();e.timingInfo=s;markResourceTiming(s,n,t,globalThis,i)}function markResourceTiming(e,t,n,s,i){if(re>18||re===18&&oe>=2){performance.markResourceTiming(e,t.href,n,s,i)}}function abortFetch(e,t,n,s){if(!s){s=new Z("The operation was aborted.","AbortError")}e.reject(s);if(t.body!=null&&ie(t.body?.stream)){t.body.stream.cancel(s).catch((e=>{if(e.code==="ERR_INVALID_STATE"){return}throw e}))}if(n==null){return}const i=n[P];if(i.body!=null&&ie(i.body?.stream)){i.body.stream.cancel(s).catch((e=>{if(e.code==="ERR_INVALID_STATE"){return}throw e}))}}function fetching({request:e,processRequestBodyChunkLength:t,processRequestEndOfBody:n,processResponse:s,processResponseEndOfBody:i,processResponseConsumeBody:r,useParallelQueue:o=false,dispatcher:A}){let a=null;let c=false;if(e.client!=null){a=e.client.globalObject;c=e.client.crossOriginIsolatedCapability}const u=v(c);const l=B({startTime:u});const d={controller:new Fetch(A),request:e,timingInfo:l,processRequestBodyChunkLength:t,processRequestEndOfBody:n,processResponse:s,processResponseConsumeBody:r,processResponseEndOfBody:i,taskDestination:a,crossOriginIsolatedCapability:c};G(!e.body||e.body.stream);if(e.window==="client"){e.window=e.client?.globalObject?.constructor?.name==="Window"?e.client:"no-window"}if(e.origin==="client"){e.origin=e.client?.origin}if(e.policyContainer==="client"){if(e.client!=null){e.policyContainer=g(e.client.policyContainer)}else{e.policyContainer=p()}}if(!e.headersList.contains("accept")){const t="*/*";e.headersList.append("accept",t)}if(!e.headersList.contains("accept-language")){e.headersList.append("accept-language","*")}if(e.priority===null){}if(z.has(e.destination)){}mainFetch(d).catch((e=>{d.controller.terminate(e)}));return d.controller}async function mainFetch(e,t=false){const n=e.request;let s=null;if(n.localURLsOnly&&!M(C(n))){s=i("local URLs only")}I(n);if(h(n)==="blocked"){s=i("bad port")}if(n.referrerPolicy===""){n.referrerPolicy=n.policyContainer.referrerPolicy}if(n.referrer!=="no-referrer"){n.referrer=R(n)}if(s===null){s=await(async()=>{const t=C(n);if(x(t,n.url)&&n.responseTainting==="basic"||t.protocol==="data:"||(n.mode==="navigate"||n.mode==="websocket")){n.responseTainting="basic";return await schemeFetch(e)}if(n.mode==="same-origin"){return i('request mode cannot be "same-origin"')}if(n.mode==="no-cors"){if(n.redirect!=="follow"){return i('redirect mode cannot be "follow" for "no-cors" request')}n.responseTainting="opaque";return await schemeFetch(e)}if(!L(C(n))){return i("URL scheme must be a HTTP(S) scheme")}n.responseTainting="cors";return await httpFetch(e)})()}if(t){return s}if(s.status!==0&&!s.internalResponse){if(n.responseTainting==="cors"){}if(n.responseTainting==="basic"){s=o(s,"basic")}else if(n.responseTainting==="cors"){s=o(s,"cors")}else if(n.responseTainting==="opaque"){s=o(s,"opaque")}else{G(false)}}let r=s.status===0?s:s.internalResponse;if(r.urlList.length===0){r.urlList.push(...n.urlList)}if(!n.timingAllowFailed){s.timingAllowPassed=true}if(s.type==="opaque"&&r.status===206&&r.rangeRequested&&!n.headers.contains("range")){s=r=i()}if(s.status!==0&&(n.method==="HEAD"||n.method==="CONNECT"||j.includes(r.status))){r.body=null;e.controller.dump=true}if(n.integrity){const processBodyError=t=>fetchFinale(e,i(t));if(n.responseTainting==="opaque"||s.body==null){processBodyError(s.error);return}const processBody=t=>{if(!d(t,n.integrity)){processBodyError("integrity mismatch");return}s.body=Y(t)[0];fetchFinale(e,s)};await F(s.body,processBody,processBodyError)}else{fetchFinale(e,s)}}function schemeFetch(e){if(D(e)&&e.request.redirectCount===0){return Promise.resolve(r(e))}const{request:t}=e;const{protocol:s}=C(t);switch(s){case"about:":{return Promise.resolve(i("about scheme is not supported"))}case"blob:":{if(!ge){ge=n(4300).resolveObjectURL}const e=C(t);if(e.search.length!==0){return Promise.resolve(i("NetworkError when attempting to fetch resource."))}const s=ge(e.toString());if(t.method!=="GET"||!S(s)){return Promise.resolve(i("invalid method"))}const r=Y(s);const o=r[0];const a=T(`${o.length}`);const c=r[1]??"";const u=A({statusText:"OK",headersList:[["content-length",{name:"Content-Length",value:a}],["content-type",{name:"Content-Type",value:c}]]});u.body=o;return Promise.resolve(u)}case"data:":{const e=C(t);const n=Ae(e);if(n==="failure"){return Promise.resolve(i("failed to fetch the data URL"))}const s=ae(n.mimeType);return Promise.resolve(A({statusText:"OK",headersList:[["content-type",{name:"Content-Type",value:s}]],body:Y(n.body)[0]}))}case"file:":{return Promise.resolve(i("not implemented... yet..."))}case"http:":case"https:":{return httpFetch(e).catch((e=>i(e)))}default:{return Promise.resolve(i("unknown scheme"))}}}function finalizeResponse(e,t){e.request.done=true;if(e.processResponseDone!=null){queueMicrotask((()=>e.processResponseDone(t)))}}function fetchFinale(e,t){if(t.type==="error"){t.urlList=[e.request.urlList[0]];t.timingInfo=B({startTime:e.timingInfo.startTime})}const processResponseEndOfBody=()=>{e.request.done=true;if(e.processResponseEndOfBody!=null){queueMicrotask((()=>e.processResponseEndOfBody(t)))}};if(e.processResponse!=null){queueMicrotask((()=>e.processResponse(t)))}if(t.body==null){processResponseEndOfBody()}else{const identityTransformAlgorithm=(e,t)=>{t.enqueue(e)};const e=new ce({start(){},transform:identityTransformAlgorithm,flush:processResponseEndOfBody},{size(){return 1}},{size(){return 1}});t.body={stream:t.body.stream.pipeThrough(e)}}if(e.processResponseConsumeBody!=null){const processBody=n=>e.processResponseConsumeBody(t,n);const processBodyError=n=>e.processResponseConsumeBody(t,n);if(t.body==null){queueMicrotask((()=>processBody(null)))}else{return F(t.body,processBody,processBodyError)}return Promise.resolve()}}async function httpFetch(e){const t=e.request;let n=null;let s=null;const r=e.timingInfo;if(t.serviceWorkers==="all"){}if(n===null){if(t.redirect==="follow"){t.serviceWorkers="none"}s=n=await httpNetworkOrCacheFetch(e);if(t.responseTainting==="cors"&&b(t,n)==="failure"){return i("cors failure")}if(f(t,n)==="failure"){t.timingAllowFailed=true}}if((t.responseTainting==="opaque"||n.type==="opaque")&&w(t.origin,t.client,t.destination,s)==="blocked"){return i("blocked")}if(V.has(s.status)){if(t.redirect!=="manual"){e.controller.connection.destroy()}if(t.redirect==="error"){n=i("unexpected redirect")}else if(t.redirect==="manual"){n=s}else if(t.redirect==="follow"){n=await httpRedirectFetch(e,n)}else{G(false)}}n.timingInfo=r;return n}function httpRedirectFetch(e,t){const n=e.request;const s=t.internalResponse?t.internalResponse:t;let r;try{r=m(s,C(n).hash);if(r==null){return t}}catch(e){return Promise.resolve(i(e))}if(!L(r)){return Promise.resolve(i("URL scheme must be a HTTP(S) scheme"))}if(n.redirectCount===20){return Promise.resolve(i("redirect count exceeded"))}n.redirectCount+=1;if(n.mode==="cors"&&(r.username||r.password)&&!x(n,r)){return Promise.resolve(i('cross origin not allowed for request mode "cors"'))}if(n.responseTainting==="cors"&&(r.username||r.password)){return Promise.resolve(i('URL cannot contain credentials for request mode "cors"'))}if(s.status!==303&&n.body!=null&&n.body.source==null){return Promise.resolve(i())}if([301,302].includes(s.status)&&n.method==="POST"||s.status===303&&!pe.includes(n.method)){n.method="GET";n.body=null;for(const e of K){n.headersList.delete(e)}}if(!x(C(n),r)){n.headersList.delete("authorization");n.headersList.delete("cookie");n.headersList.delete("host")}if(n.body!=null){G(n.body.source!=null);n.body=Y(n.body.source)[0]}const o=e.timingInfo;o.redirectEndTime=o.postRedirectStartTime=v(e.crossOriginIsolatedCapability);if(o.redirectStartTime===0){o.redirectStartTime=o.startTime}n.urlList.push(r);Q(n,s);return mainFetch(e,true)}async function httpNetworkOrCacheFetch(e,t=false,n=false){const s=e.request;let o=null;let A=null;let a=null;const c=null;const l=false;if(s.window==="no-window"&&s.redirect==="error"){o=e;A=s}else{A=u(s);o={...e};o.request=A}const d=s.credentials==="include"||s.credentials==="same-origin"&&s.responseTainting==="basic";const p=A.body?A.body.length:null;let g=null;if(A.body==null&&["POST","PUT"].includes(A.method)){g="0"}if(p!=null){g=T(`${p}`)}if(g!=null){A.headersList.append("content-length",g)}if(p!=null&&A.keepalive){}if(A.referrer instanceof URL){A.headersList.append("referer",T(A.referrer.href))}E(A);y(A);if(!A.headersList.contains("user-agent")){A.headersList.append("user-agent",typeof esbuildDetection==="undefined"?"undici":"node")}if(A.cache==="default"&&(A.headersList.contains("if-modified-since")||A.headersList.contains("if-none-match")||A.headersList.contains("if-unmodified-since")||A.headersList.contains("if-match")||A.headersList.contains("if-range"))){A.cache="no-store"}if(A.cache==="no-cache"&&!A.preventNoCacheCacheControlHeaderModification&&!A.headersList.contains("cache-control")){A.headersList.append("cache-control","max-age=0")}if(A.cache==="no-store"||A.cache==="reload"){if(!A.headersList.contains("pragma")){A.headersList.append("pragma","no-cache")}if(!A.headersList.contains("cache-control")){A.headersList.append("cache-control","no-cache")}}if(A.headersList.contains("range")){A.headersList.append("accept-encoding","identity")}if(!A.headersList.contains("accept-encoding")){if(O(C(A))){A.headersList.append("accept-encoding","br, gzip, deflate")}else{A.headersList.append("accept-encoding","gzip, deflate")}}A.headersList.delete("host");if(d){}if(c==null){A.cache="no-store"}if(A.mode!=="no-store"&&A.mode!=="reload"){}if(a==null){if(A.mode==="only-if-cached"){return i("only if cached")}const e=await httpNetworkFetch(o,d,n);if(!W.has(A.method)&&e.status>=200&&e.status<=399){}if(l&&e.status===304){}if(a==null){a=e}}a.urlList=[...A.urlList];if(A.headersList.contains("range")){a.rangeRequested=true}a.requestIncludesCredentials=d;if(a.status===407){if(s.window==="no-window"){return i()}if(D(e)){return r(e)}return i("proxy authentication required")}if(a.status===421&&!n&&(s.body==null||s.body.source!=null)){if(D(e)){return r(e)}e.controller.connection.destroy();a=await httpNetworkOrCacheFetch(e,t,true)}if(t){}return a}async function httpNetworkFetch(e,t=false,s=false){G(!e.controller.connection||e.controller.connection.destroyed);e.controller.connection={abort:null,destroyed:false,destroy(e){if(!this.destroyed){this.destroyed=true;this.abort?.(e??new Z("The operation was aborted.","AbortError"))}}};const o=e.request;let c=null;const u=e.timingInfo;const d=null;if(d==null){o.cache="no-store"}const p=s?"yes":"no";if(o.mode==="websocket"){}else{}let g=null;if(o.body==null&&e.processRequestEndOfBody){queueMicrotask((()=>e.processRequestEndOfBody()))}else if(o.body!=null){const processBodyChunk=async function*(t){if(D(e)){return}yield t;e.processRequestBodyChunkLength?.(t.byteLength)};const processEndOfBody=()=>{if(D(e)){return}if(e.processRequestEndOfBody){e.processRequestEndOfBody()}};const processBodyError=t=>{if(D(e)){return}if(t.name==="AbortError"){e.controller.abort()}else{e.controller.terminate(t)}};g=async function*(){try{for await(const e of o.body.stream){yield*processBodyChunk(e)}processEndOfBody()}catch(e){processBodyError(e)}}()}try{const{body:t,status:n,statusText:s,headersList:i,socket:r}=await dispatch({body:g});if(r){c=A({status:n,statusText:s,headersList:i,socket:r})}else{const r=t[Symbol.asyncIterator]();e.controller.next=()=>r.next();c=A({status:n,statusText:s,headersList:i})}}catch(t){if(t.name==="AbortError"){e.controller.connection.destroy();return r(e,t)}return i(t)}const pullAlgorithm=()=>{e.controller.resume()};const cancelAlgorithm=t=>{e.controller.abort(t)};if(!he){he=n(5356).ReadableStream}const h=new he({async start(t){e.controller.controller=t},async pull(e){await pullAlgorithm(e)},async cancel(e){await cancelAlgorithm(e)}},{highWaterMark:0,size(){return 1}});c.body={stream:h};e.controller.on("terminated",onAborted);e.controller.resume=async()=>{while(true){let t;let n;try{const{done:n,value:s}=await e.controller.next();if(_(e)){break}t=n?undefined:s}catch(s){if(e.controller.ended&&!u.encodedBodySize){t=undefined}else{t=s;n=true}}if(t===undefined){U(e.controller.controller);finalizeResponse(e,c);return}u.decodedBodySize+=t?.byteLength??0;if(n){e.controller.terminate(t);return}e.controller.controller.enqueue(new Uint8Array(t));if(se(h)){e.controller.terminate();return}if(!e.controller.controller.desiredSize){return}}};function onAborted(t){if(_(e)){c.aborted=true;if(ie(h)){e.controller.controller.error(e.controller.serializedAbortReason)}}else{if(ie(h)){e.controller.controller.error(new TypeError("terminated",{cause:N(t)?t:undefined}))}}e.controller.connection.destroy()}return c;async function dispatch({body:t}){const n=C(o);const s=e.controller.dispatcher;return new Promise(((i,r)=>s.dispatch({path:n.pathname+n.search,origin:n.origin,method:o.method,body:e.controller.dispatcher.isMockActive?o.body&&o.body.source:t,headers:o.headersList.entries,maxRedirections:0,upgrade:o.mode==="websocket"?"websocket":undefined},{body:null,abort:null,onConnect(t){const{connection:n}=e.controller;if(n.destroyed){t(new Z("The operation was aborted.","AbortError"))}else{e.controller.on("terminated",t);this.abort=n.abort=t}},onHeaders(e,t,n,s){if(e<200){return}let r=[];let A="";const c=new a;if(Array.isArray(t)){for(let e=0;ee.trim()))}else if(n.toLowerCase()==="location"){A=s}c.append(n,s)}}else{const e=Object.keys(t);for(const n of e){const e=t[n];if(n.toLowerCase()==="content-encoding"){r=e.toLowerCase().split(",").map((e=>e.trim())).reverse()}else if(n.toLowerCase()==="location"){A=e}c.append(n,e)}}this.body=new ee({read:n});const u=[];const d=o.redirect==="follow"&&A&&V.has(e);if(o.method!=="HEAD"&&o.method!=="CONNECT"&&!j.includes(e)&&!d){for(const e of r){if(e==="x-gzip"||e==="gzip"){u.push(l.createGunzip({flush:l.constants.Z_SYNC_FLUSH,finishFlush:l.constants.Z_SYNC_FLUSH}))}else if(e==="deflate"){u.push(l.createInflate())}else if(e==="br"){u.push(l.createBrotliDecompress())}else{u.length=0;break}}}i({status:e,statusText:s,headersList:c[X],body:u.length?te(this.body,...u,(()=>{})):this.body.on("error",(()=>{}))});return true},onData(t){if(e.controller.dump){return}const n=t;u.encodedBodySize+=n.byteLength;return this.body.push(n)},onComplete(){if(this.abort){e.controller.off("terminated",this.abort)}e.controller.ended=true;this.body.push(null)},onError(t){if(this.abort){e.controller.off("terminated",this.abort)}this.body?.destroy(t);e.controller.terminate(t);r(t)},onUpgrade(e,t,n){if(e!==101){return}const s=new a;for(let e=0;e{"use strict";const{extractBody:s,mixinBody:i,cloneBody:r}=n(1472);const{Headers:o,fill:A,HeadersList:a}=n(554);const{FinalizationRegistry:c}=n(6436)();const u=n(3983);const{isValidHTTPToken:l,sameOrigin:d,normalizeMethod:p,makePolicyContainer:g}=n(2538);const{forbiddenMethodsSet:h,corsSafeListedMethodsSet:f,referrerPolicy:E,requestRedirect:m,requestMode:C,requestCredentials:Q,requestCache:I,requestDuplex:B}=n(1037);const{kEnumerableProperty:y}=u;const{kHeaders:b,kSignal:w,kState:R,kGuard:v,kRealm:k}=n(5861);const{webidl:S}=n(1744);const{getGlobalOrigin:x}=n(1246);const{URLSerializer:D}=n(685);const{kHeadersList:_}=n(2785);const N=n(9491);const{getMaxListeners:F,setMaxListeners:U,getEventListeners:T,defaultMaxListeners:M}=n(2361);let L=globalThis.TransformStream;const O=Symbol("init");const P=Symbol("abortController");const J=new c((({signal:e,abort:t})=>{e.removeEventListener("abort",t)}));class Request{constructor(e,t={}){if(e===O){return}S.argumentLengthCheck(arguments,1,{header:"Request constructor"});e=S.converters.RequestInfo(e);t=S.converters.RequestInit(t);this[k]={settingsObject:{baseUrl:x(),get origin(){return this.baseUrl?.origin},policyContainer:g()}};let i=null;let r=null;const a=this[k].settingsObject.baseUrl;let c=null;if(typeof e==="string"){let t;try{t=new URL(e,a)}catch(t){throw new TypeError("Failed to parse URL from "+e,{cause:t})}if(t.username||t.password){throw new TypeError("Request cannot be constructed from a URL that includes credentials: "+e)}i=makeRequest({urlList:[t]});r="cors"}else{N(e instanceof Request);i=e[R];c=e[w]}const E=this[k].settingsObject.origin;let m="client";if(i.window?.constructor?.name==="EnvironmentSettingsObject"&&d(i.window,E)){m=i.window}if(t.window!=null){throw new TypeError(`'window' option '${m}' must be null`)}if("window"in t){m="no-window"}i=makeRequest({method:i.method,headersList:i.headersList,unsafeRequest:i.unsafeRequest,client:this[k].settingsObject,window:m,priority:i.priority,origin:i.origin,referrer:i.referrer,referrerPolicy:i.referrerPolicy,mode:i.mode,credentials:i.credentials,cache:i.cache,redirect:i.redirect,integrity:i.integrity,keepalive:i.keepalive,reloadNavigation:i.reloadNavigation,historyNavigation:i.historyNavigation,urlList:[...i.urlList]});if(Object.keys(t).length>0){if(i.mode==="navigate"){i.mode="same-origin"}i.reloadNavigation=false;i.historyNavigation=false;i.origin="client";i.referrer="client";i.referrerPolicy="";i.url=i.urlList[i.urlList.length-1];i.urlList=[i.url]}if(t.referrer!==undefined){const e=t.referrer;if(e===""){i.referrer="no-referrer"}else{let t;try{t=new URL(e,a)}catch(t){throw new TypeError(`Referrer "${e}" is not a valid URL.`,{cause:t})}if(t.protocol==="about:"&&t.hostname==="client"||E&&!d(t,this[k].settingsObject.baseUrl)){i.referrer="client"}else{i.referrer=t}}}if(t.referrerPolicy!==undefined){i.referrerPolicy=t.referrerPolicy}let C;if(t.mode!==undefined){C=t.mode}else{C=r}if(C==="navigate"){throw S.errors.exception({header:"Request constructor",message:"invalid request mode navigate."})}if(C!=null){i.mode=C}if(t.credentials!==undefined){i.credentials=t.credentials}if(t.cache!==undefined){i.cache=t.cache}if(i.cache==="only-if-cached"&&i.mode!=="same-origin"){throw new TypeError("'only-if-cached' can be set only with 'same-origin' mode")}if(t.redirect!==undefined){i.redirect=t.redirect}if(t.integrity!==undefined&&t.integrity!=null){i.integrity=String(t.integrity)}if(t.keepalive!==undefined){i.keepalive=Boolean(t.keepalive)}if(t.method!==undefined){let e=t.method;if(!l(t.method)){throw TypeError(`'${t.method}' is not a valid HTTP method.`)}if(h.has(e.toUpperCase())){throw TypeError(`'${t.method}' HTTP method is unsupported.`)}e=p(t.method);i.method=e}if(t.signal!==undefined){c=t.signal}this[R]=i;const Q=new AbortController;this[w]=Q.signal;this[w][k]=this[k];if(c!=null){if(!c||typeof c.aborted!=="boolean"||typeof c.addEventListener!=="function"){throw new TypeError("Failed to construct 'Request': member signal is not of type AbortSignal.")}if(c.aborted){Q.abort(c.reason)}else{this[P]=Q;const e=new WeakRef(Q);const abort=function(){const t=e.deref();if(t!==undefined){t.abort(this.reason)}};try{if(typeof F==="function"&&F(c)===M){U(100,c)}else if(T(c,"abort").length>=M){U(100,c)}}catch{}u.addAbortListener(c,abort);J.register(Q,{signal:c,abort:abort})}}this[b]=new o;this[b][_]=i.headersList;this[b][v]="request";this[b][k]=this[k];if(C==="no-cors"){if(!f.has(i.method)){throw new TypeError(`'${i.method} is unsupported in no-cors mode.`)}this[b][v]="request-no-cors"}if(Object.keys(t).length!==0){let e=new o(this[b]);if(t.headers!==undefined){e=t.headers}this[b][_].clear();if(e.constructor.name==="Headers"){for(const[t,n]of e){this[b].append(t,n)}}else{A(this[b],e)}}const I=e instanceof Request?e[R].body:null;if((t.body!=null||I!=null)&&(i.method==="GET"||i.method==="HEAD")){throw new TypeError("Request with GET/HEAD method cannot have body.")}let B=null;if(t.body!=null){const[e,n]=s(t.body,i.keepalive);B=e;if(n&&!this[b][_].contains("content-type")){this[b].append("content-type",n)}}const y=B??I;if(y!=null&&y.source==null){if(B!=null&&t.duplex==null){throw new TypeError("RequestInit: duplex option is required when sending a body.")}if(i.mode!=="same-origin"&&i.mode!=="cors"){throw new TypeError('If request is made from ReadableStream, mode should be "same-origin" or "cors"')}i.useCORSPreflightFlag=true}let D=y;if(B==null&&I!=null){if(u.isDisturbed(I.stream)||I.stream.locked){throw new TypeError("Cannot construct a Request with a Request object that has already been used.")}if(!L){L=n(5356).TransformStream}const e=new L;I.stream.pipeThrough(e);D={source:I.source,length:I.length,stream:e.readable}}this[R].body=D}get method(){S.brandCheck(this,Request);return this[R].method}get url(){S.brandCheck(this,Request);return D(this[R].url)}get headers(){S.brandCheck(this,Request);return this[b]}get destination(){S.brandCheck(this,Request);return this[R].destination}get referrer(){S.brandCheck(this,Request);if(this[R].referrer==="no-referrer"){return""}if(this[R].referrer==="client"){return"about:client"}return this[R].referrer.toString()}get referrerPolicy(){S.brandCheck(this,Request);return this[R].referrerPolicy}get mode(){S.brandCheck(this,Request);return this[R].mode}get credentials(){return this[R].credentials}get cache(){S.brandCheck(this,Request);return this[R].cache}get redirect(){S.brandCheck(this,Request);return this[R].redirect}get integrity(){S.brandCheck(this,Request);return this[R].integrity}get keepalive(){S.brandCheck(this,Request);return this[R].keepalive}get isReloadNavigation(){S.brandCheck(this,Request);return this[R].reloadNavigation}get isHistoryNavigation(){S.brandCheck(this,Request);return this[R].historyNavigation}get signal(){S.brandCheck(this,Request);return this[w]}get body(){S.brandCheck(this,Request);return this[R].body?this[R].body.stream:null}get bodyUsed(){S.brandCheck(this,Request);return!!this[R].body&&u.isDisturbed(this[R].body.stream)}get duplex(){S.brandCheck(this,Request);return"half"}clone(){S.brandCheck(this,Request);if(this.bodyUsed||this.body?.locked){throw new TypeError("unusable")}const e=cloneRequest(this[R]);const t=new Request(O);t[R]=e;t[k]=this[k];t[b]=new o;t[b][_]=e.headersList;t[b][v]=this[b][v];t[b][k]=this[b][k];const n=new AbortController;if(this.signal.aborted){n.abort(this.signal.reason)}else{u.addAbortListener(this.signal,(()=>{n.abort(this.signal.reason)}))}t[w]=n.signal;return t}}i(Request);function makeRequest(e){const t={method:"GET",localURLsOnly:false,unsafeRequest:false,body:null,client:null,reservedClient:null,replacesClientId:"",window:"client",keepalive:false,serviceWorkers:"all",initiator:"",destination:"",priority:null,origin:"client",policyContainer:"client",referrer:"client",referrerPolicy:"",mode:"no-cors",useCORSPreflightFlag:false,credentials:"same-origin",useCredentials:false,cache:"default",redirect:"follow",integrity:"",cryptoGraphicsNonceMetadata:"",parserMetadata:"",reloadNavigation:false,historyNavigation:false,userActivation:false,taintedOrigin:false,redirectCount:0,responseTainting:"basic",preventNoCacheCacheControlHeaderModification:false,done:false,timingAllowFailed:false,...e,headersList:e.headersList?new a(e.headersList):new a};t.url=t.urlList[0];return t}function cloneRequest(e){const t=makeRequest({...e,body:null});if(e.body!=null){t.body=r(e.body)}return t}Object.defineProperties(Request.prototype,{method:y,url:y,headers:y,redirect:y,clone:y,signal:y,duplex:y,destination:y,body:y,bodyUsed:y,isHistoryNavigation:y,isReloadNavigation:y,keepalive:y,integrity:y,cache:y,credentials:y,attribute:y,referrerPolicy:y,referrer:y,mode:y,[Symbol.toStringTag]:{value:"Request",configurable:true}});S.converters.Request=S.interfaceConverter(Request);S.converters.RequestInfo=function(e){if(typeof e==="string"){return S.converters.USVString(e)}if(e instanceof Request){return S.converters.Request(e)}return S.converters.USVString(e)};S.converters.AbortSignal=S.interfaceConverter(AbortSignal);S.converters.RequestInit=S.dictionaryConverter([{key:"method",converter:S.converters.ByteString},{key:"headers",converter:S.converters.HeadersInit},{key:"body",converter:S.nullableConverter(S.converters.BodyInit)},{key:"referrer",converter:S.converters.USVString},{key:"referrerPolicy",converter:S.converters.DOMString,allowedValues:E},{key:"mode",converter:S.converters.DOMString,allowedValues:C},{key:"credentials",converter:S.converters.DOMString,allowedValues:Q},{key:"cache",converter:S.converters.DOMString,allowedValues:I},{key:"redirect",converter:S.converters.DOMString,allowedValues:m},{key:"integrity",converter:S.converters.DOMString},{key:"keepalive",converter:S.converters.boolean},{key:"signal",converter:S.nullableConverter((e=>S.converters.AbortSignal(e,{strict:false})))},{key:"window",converter:S.converters.any},{key:"duplex",converter:S.converters.DOMString,allowedValues:B}]);e.exports={Request:Request,makeRequest:makeRequest}},7823:(e,t,n)=>{"use strict";const{Headers:s,HeadersList:i,fill:r}=n(554);const{extractBody:o,cloneBody:A,mixinBody:a}=n(1472);const c=n(3983);const{kEnumerableProperty:u}=c;const{isValidReasonPhrase:l,isCancelled:d,isAborted:p,isBlobLike:g,serializeJavascriptValueToJSONString:h,isErrorLike:f,isomorphicEncode:E}=n(2538);const{redirectStatusSet:m,nullBodyStatus:C,DOMException:Q}=n(1037);const{kState:I,kHeaders:B,kGuard:y,kRealm:b}=n(5861);const{webidl:w}=n(1744);const{FormData:R}=n(2015);const{getGlobalOrigin:v}=n(1246);const{URLSerializer:k}=n(685);const{kHeadersList:S}=n(2785);const x=n(9491);const{types:D}=n(3837);const _=globalThis.ReadableStream||n(5356).ReadableStream;const N=new TextEncoder("utf-8");class Response{static error(){const e={settingsObject:{}};const t=new Response;t[I]=makeNetworkError();t[b]=e;t[B][S]=t[I].headersList;t[B][y]="immutable";t[B][b]=e;return t}static json(e,t={}){w.argumentLengthCheck(arguments,1,{header:"Response.json"});if(t!==null){t=w.converters.ResponseInit(t)}const n=N.encode(h(e));const s=o(n);const i={settingsObject:{}};const r=new Response;r[b]=i;r[B][y]="response";r[B][b]=i;initializeResponse(r,t,{body:s[0],type:"application/json"});return r}static redirect(e,t=302){const n={settingsObject:{}};w.argumentLengthCheck(arguments,1,{header:"Response.redirect"});e=w.converters.USVString(e);t=w.converters["unsigned short"](t);let s;try{s=new URL(e,v())}catch(t){throw Object.assign(new TypeError("Failed to parse URL from "+e),{cause:t})}if(!m.has(t)){throw new RangeError("Invalid status code "+t)}const i=new Response;i[b]=n;i[B][y]="immutable";i[B][b]=n;i[I].status=t;const r=E(k(s));i[I].headersList.append("location",r);return i}constructor(e=null,t={}){if(e!==null){e=w.converters.BodyInit(e)}t=w.converters.ResponseInit(t);this[b]={settingsObject:{}};this[I]=makeResponse({});this[B]=new s;this[B][y]="response";this[B][S]=this[I].headersList;this[B][b]=this[b];let n=null;if(e!=null){const[t,s]=o(e);n={body:t,type:s}}initializeResponse(this,t,n)}get type(){w.brandCheck(this,Response);return this[I].type}get url(){w.brandCheck(this,Response);const e=this[I].urlList;const t=e[e.length-1]??null;if(t===null){return""}return k(t,true)}get redirected(){w.brandCheck(this,Response);return this[I].urlList.length>1}get status(){w.brandCheck(this,Response);return this[I].status}get ok(){w.brandCheck(this,Response);return this[I].status>=200&&this[I].status<=299}get statusText(){w.brandCheck(this,Response);return this[I].statusText}get headers(){w.brandCheck(this,Response);return this[B]}get body(){w.brandCheck(this,Response);return this[I].body?this[I].body.stream:null}get bodyUsed(){w.brandCheck(this,Response);return!!this[I].body&&c.isDisturbed(this[I].body.stream)}clone(){w.brandCheck(this,Response);if(this.bodyUsed||this.body&&this.body.locked){throw w.errors.exception({header:"Response.clone",message:"Body has already been consumed."})}const e=cloneResponse(this[I]);const t=new Response;t[I]=e;t[b]=this[b];t[B][S]=e.headersList;t[B][y]=this[B][y];t[B][b]=this[B][b];return t}}a(Response);Object.defineProperties(Response.prototype,{type:u,url:u,status:u,ok:u,redirected:u,statusText:u,headers:u,clone:u,body:u,bodyUsed:u,[Symbol.toStringTag]:{value:"Response",configurable:true}});Object.defineProperties(Response,{json:u,redirect:u,error:u});function cloneResponse(e){if(e.internalResponse){return filterResponse(cloneResponse(e.internalResponse),e.type)}const t=makeResponse({...e,body:null});if(e.body!=null){t.body=A(e.body)}return t}function makeResponse(e){return{aborted:false,rangeRequested:false,timingAllowPassed:false,requestIncludesCredentials:false,type:"default",status:200,timingInfo:null,cacheState:"",statusText:"",...e,headersList:e.headersList?new i(e.headersList):new i,urlList:e.urlList?[...e.urlList]:[]}}function makeNetworkError(e){const t=f(e);return makeResponse({type:"error",status:0,error:t?e:new Error(e?String(e):e),aborted:e&&e.name==="AbortError"})}function makeFilteredResponse(e,t){t={internalResponse:e,...t};return new Proxy(e,{get(e,n){return n in t?t[n]:e[n]},set(e,n,s){x(!(n in t));e[n]=s;return true}})}function filterResponse(e,t){if(t==="basic"){return makeFilteredResponse(e,{type:"basic",headersList:e.headersList})}else if(t==="cors"){return makeFilteredResponse(e,{type:"cors",headersList:e.headersList})}else if(t==="opaque"){return makeFilteredResponse(e,{type:"opaque",urlList:Object.freeze([]),status:0,statusText:"",body:null})}else if(t==="opaqueredirect"){return makeFilteredResponse(e,{type:"opaqueredirect",status:0,statusText:"",headersList:[],body:null})}else{x(false)}}function makeAppropriateNetworkError(e,t=null){x(d(e));return p(e)?makeNetworkError(Object.assign(new Q("The operation was aborted.","AbortError"),{cause:t})):makeNetworkError(Object.assign(new Q("Request was cancelled."),{cause:t}))}function initializeResponse(e,t,n){if(t.status!==null&&(t.status<200||t.status>599)){throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.')}if("statusText"in t&&t.statusText!=null){if(!l(String(t.statusText))){throw new TypeError("Invalid statusText")}}if("status"in t&&t.status!=null){e[I].status=t.status}if("statusText"in t&&t.statusText!=null){e[I].statusText=t.statusText}if("headers"in t&&t.headers!=null){r(e[B],t.headers)}if(n){if(C.includes(e.status)){throw w.errors.exception({header:"Response constructor",message:"Invalid response status code "+e.status})}e[I].body=n.body;if(n.type!=null&&!e[I].headersList.contains("Content-Type")){e[I].headersList.append("content-type",n.type)}}}w.converters.ReadableStream=w.interfaceConverter(_);w.converters.FormData=w.interfaceConverter(R);w.converters.URLSearchParams=w.interfaceConverter(URLSearchParams);w.converters.XMLHttpRequestBodyInit=function(e){if(typeof e==="string"){return w.converters.USVString(e)}if(g(e)){return w.converters.Blob(e,{strict:false})}if(D.isAnyArrayBuffer(e)||D.isTypedArray(e)||D.isDataView(e)){return w.converters.BufferSource(e)}if(c.isFormDataLike(e)){return w.converters.FormData(e,{strict:false})}if(e instanceof URLSearchParams){return w.converters.URLSearchParams(e)}return w.converters.DOMString(e)};w.converters.BodyInit=function(e){if(e instanceof _){return w.converters.ReadableStream(e)}if(e?.[Symbol.asyncIterator]){return e}return w.converters.XMLHttpRequestBodyInit(e)};w.converters.ResponseInit=w.dictionaryConverter([{key:"status",converter:w.converters["unsigned short"],defaultValue:200},{key:"statusText",converter:w.converters.ByteString,defaultValue:""},{key:"headers",converter:w.converters.HeadersInit}]);e.exports={makeNetworkError:makeNetworkError,makeResponse:makeResponse,makeAppropriateNetworkError:makeAppropriateNetworkError,filterResponse:filterResponse,Response:Response,cloneResponse:cloneResponse}},5861:e=>{"use strict";e.exports={kUrl:Symbol("url"),kHeaders:Symbol("headers"),kSignal:Symbol("signal"),kState:Symbol("state"),kGuard:Symbol("guard"),kRealm:Symbol("realm")}},2538:(e,t,n)=>{"use strict";const{redirectStatusSet:s,referrerPolicySet:i,badPortsSet:r}=n(1037);const{getGlobalOrigin:o}=n(1246);const{performance:A}=n(4074);const{isBlobLike:a,toUSVString:c,ReadableStreamFrom:u}=n(3983);const l=n(9491);const{isUint8Array:d}=n(4978);let p;try{p=n(6113)}catch{}function responseURL(e){const t=e.urlList;const n=t.length;return n===0?null:t[n-1].toString()}function responseLocationURL(e,t){if(!s.has(e.status)){return null}let n=e.headersList.get("location");if(n!==null&&isValidHeaderValue(n)){n=new URL(n,responseURL(e))}if(n&&!n.hash){n.hash=t}return n}function requestCurrentURL(e){return e.urlList[e.urlList.length-1]}function requestBadPort(e){const t=requestCurrentURL(e);if(urlIsHttpHttpsScheme(t)&&r.has(t.port)){return"blocked"}return"allowed"}function isErrorLike(e){return e instanceof Error||(e?.constructor?.name==="Error"||e?.constructor?.name==="DOMException")}function isValidReasonPhrase(e){for(let t=0;t=32&&n<=126||n>=128&&n<=255)){return false}}return true}function isTokenChar(e){return!(e>=127||e<=32||e==="("||e===")"||e==="<"||e===">"||e==="@"||e===","||e===";"||e===":"||e==="\\"||e==='"'||e==="/"||e==="["||e==="]"||e==="?"||e==="="||e==="{"||e==="}")}function isValidHTTPToken(e){if(!e||typeof e!=="string"){return false}for(let t=0;t127||!isTokenChar(n)){return false}}return true}function isValidHeaderName(e){if(e.length===0){return false}return isValidHTTPToken(e)}function isValidHeaderValue(e){if(e.startsWith("\t")||e.startsWith(" ")||e.endsWith("\t")||e.endsWith(" ")){return false}if(e.includes("\0")||e.includes("\r")||e.includes("\n")){return false}return true}function setRequestReferrerPolicyOnRedirect(e,t){const{headersList:n}=t;const s=(n.get("referrer-policy")??"").split(",");let r="";if(s.length>0){for(let e=s.length;e!==0;e--){const t=s[e-1].trim();if(i.has(t)){r=t;break}}}if(r!==""){e.referrerPolicy=r}}function crossOriginResourcePolicyCheck(){return"allowed"}function corsCheck(){return"success"}function TAOCheck(){return"success"}function appendFetchMetadata(e){let t=null;t=e.mode;e.headersList.set("sec-fetch-mode",t)}function appendRequestOriginHeader(e){let t=e.origin;if(e.responseTainting==="cors"||e.mode==="websocket"){if(t){e.headersList.append("origin",t)}}else if(e.method!=="GET"&&e.method!=="HEAD"){switch(e.referrerPolicy){case"no-referrer":t=null;break;case"no-referrer-when-downgrade":case"strict-origin":case"strict-origin-when-cross-origin":if(e.origin&&urlHasHttpsScheme(e.origin)&&!urlHasHttpsScheme(requestCurrentURL(e))){t=null}break;case"same-origin":if(!sameOrigin(e,requestCurrentURL(e))){t=null}break;default:}if(t){e.headersList.append("origin",t)}}}function coarsenedSharedCurrentTime(e){return A.now()}function createOpaqueTimingInfo(e){return{startTime:e.startTime??0,redirectStartTime:0,redirectEndTime:0,postRedirectStartTime:e.startTime??0,finalServiceWorkerStartTime:0,finalNetworkResponseStartTime:0,finalNetworkRequestStartTime:0,endTime:0,encodedBodySize:0,decodedBodySize:0,finalConnectionTimingInfo:null}}function makePolicyContainer(){return{referrerPolicy:"strict-origin-when-cross-origin"}}function clonePolicyContainer(e){return{referrerPolicy:e.referrerPolicy}}function determineRequestsReferrer(e){const t=e.referrerPolicy;l(t);let n=null;if(e.referrer==="client"){const e=o();if(!e||e.origin==="null"){return"no-referrer"}n=new URL(e)}else if(e.referrer instanceof URL){n=e.referrer}let s=stripURLForReferrer(n);const i=stripURLForReferrer(n,true);if(s.toString().length>4096){s=i}const r=sameOrigin(e,s);const A=isURLPotentiallyTrustworthy(s)&&!isURLPotentiallyTrustworthy(e.url);switch(t){case"origin":return i!=null?i:stripURLForReferrer(n,true);case"unsafe-url":return s;case"same-origin":return r?i:"no-referrer";case"origin-when-cross-origin":return r?s:i;case"strict-origin-when-cross-origin":{const t=requestCurrentURL(e);if(sameOrigin(s,t)){return s}if(isURLPotentiallyTrustworthy(s)&&!isURLPotentiallyTrustworthy(t)){return"no-referrer"}return i}case"strict-origin":case"no-referrer-when-downgrade":default:return A?"no-referrer":i}}function stripURLForReferrer(e,t){l(e instanceof URL);if(e.protocol==="file:"||e.protocol==="about:"||e.protocol==="blank:"){return"no-referrer"}e.username="";e.password="";e.hash="";if(t){e.pathname="";e.search=""}return e}function isURLPotentiallyTrustworthy(e){if(!(e instanceof URL)){return false}if(e.href==="about:blank"||e.href==="about:srcdoc"){return true}if(e.protocol==="data:")return true;if(e.protocol==="file:")return true;return isOriginPotentiallyTrustworthy(e.origin);function isOriginPotentiallyTrustworthy(e){if(e==null||e==="null")return false;const t=new URL(e);if(t.protocol==="https:"||t.protocol==="wss:"){return true}if(/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(t.hostname)||(t.hostname==="localhost"||t.hostname.includes("localhost."))||t.hostname.endsWith(".localhost")){return true}return false}}function bytesMatch(e,t){if(p===undefined){return true}const n=parseMetadata(t);if(n==="no metadata"){return true}if(n.length===0){return true}const s=n.sort(((e,t)=>t.algo.localeCompare(e.algo)));const i=s[0].algo;const r=s.filter((e=>e.algo===i));for(const t of r){const n=t.algo;let s=t.hash;if(s.endsWith("==")){s=s.slice(0,-2)}let i=p.createHash(n).update(e).digest("base64");if(i.endsWith("==")){i=i.slice(0,-2)}if(i===s){return true}let r=p.createHash(n).update(e).digest("base64url");if(r.endsWith("==")){r=r.slice(0,-2)}if(r===s){return true}}return false}const g=/((?sha256|sha384|sha512)-(?[A-z0-9+/]{1}.*={0,2}))( +[\x21-\x7e]?)?/i;function parseMetadata(e){const t=[];let n=true;const s=p.getHashes();for(const i of e.split(" ")){n=false;const e=g.exec(i);if(e===null||e.groups===undefined){continue}const r=e.groups.algo;if(s.includes(r.toLowerCase())){t.push(e.groups)}}if(n===true){return"no metadata"}return t}function tryUpgradeRequestToAPotentiallyTrustworthyURL(e){}function sameOrigin(e,t){if(e.origin===t.origin&&e.origin==="null"){return true}if(e.protocol===t.protocol&&e.hostname===t.hostname&&e.port===t.port){return true}return false}function createDeferredPromise(){let e;let t;const n=new Promise(((n,s)=>{e=n;t=s}));return{promise:n,resolve:e,reject:t}}function isAborted(e){return e.controller.state==="aborted"}function isCancelled(e){return e.controller.state==="aborted"||e.controller.state==="terminated"}function normalizeMethod(e){return/^(DELETE|GET|HEAD|OPTIONS|POST|PUT)$/i.test(e)?e.toUpperCase():e}function serializeJavascriptValueToJSONString(e){const t=JSON.stringify(e);if(t===undefined){throw new TypeError("Value is not JSON serializable")}l(typeof t==="string");return t}const h=Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));function makeIterator(e,t,n){const s={index:0,kind:n,target:e};const i={next(){if(Object.getPrototypeOf(this)!==i){throw new TypeError(`'next' called on an object that does not implement interface ${t} Iterator.`)}const{index:e,kind:n,target:r}=s;const o=r();const A=o.length;if(e>=A){return{value:undefined,done:true}}const a=o[e];s.index=e+1;return iteratorResult(a,n)},[Symbol.toStringTag]:`${t} Iterator`};Object.setPrototypeOf(i,h);return Object.setPrototypeOf({},i)}function iteratorResult(e,t){let n;switch(t){case"key":{n=e[0];break}case"value":{n=e[1];break}case"key+value":{n=e;break}}return{value:n,done:false}}async function fullyReadBody(e,t,n){const s=t;const i=n;let r;try{r=e.stream.getReader()}catch(e){i(e);return}try{const e=await readAllBytes(r);s(e)}catch(e){i(e)}}let f=globalThis.ReadableStream;function isReadableStreamLike(e){if(!f){f=n(5356).ReadableStream}return e instanceof f||e[Symbol.toStringTag]==="ReadableStream"&&typeof e.tee==="function"}const E=65535;function isomorphicDecode(e){if(e.lengthe+String.fromCharCode(t)),"")}function readableStreamClose(e){try{e.close()}catch(e){if(!e.message.includes("Controller is already closed")){throw e}}}function isomorphicEncode(e){for(let t=0;tObject.prototype.hasOwnProperty.call(e,t));e.exports={isAborted:isAborted,isCancelled:isCancelled,createDeferredPromise:createDeferredPromise,ReadableStreamFrom:u,toUSVString:c,tryUpgradeRequestToAPotentiallyTrustworthyURL:tryUpgradeRequestToAPotentiallyTrustworthyURL,coarsenedSharedCurrentTime:coarsenedSharedCurrentTime,determineRequestsReferrer:determineRequestsReferrer,makePolicyContainer:makePolicyContainer,clonePolicyContainer:clonePolicyContainer,appendFetchMetadata:appendFetchMetadata,appendRequestOriginHeader:appendRequestOriginHeader,TAOCheck:TAOCheck,corsCheck:corsCheck,crossOriginResourcePolicyCheck:crossOriginResourcePolicyCheck,createOpaqueTimingInfo:createOpaqueTimingInfo,setRequestReferrerPolicyOnRedirect:setRequestReferrerPolicyOnRedirect,isValidHTTPToken:isValidHTTPToken,requestBadPort:requestBadPort,requestCurrentURL:requestCurrentURL,responseURL:responseURL,responseLocationURL:responseLocationURL,isBlobLike:a,isURLPotentiallyTrustworthy:isURLPotentiallyTrustworthy,isValidReasonPhrase:isValidReasonPhrase,sameOrigin:sameOrigin,normalizeMethod:normalizeMethod,serializeJavascriptValueToJSONString:serializeJavascriptValueToJSONString,makeIterator:makeIterator,isValidHeaderName:isValidHeaderName,isValidHeaderValue:isValidHeaderValue,hasOwn:m,isErrorLike:isErrorLike,fullyReadBody:fullyReadBody,bytesMatch:bytesMatch,isReadableStreamLike:isReadableStreamLike,readableStreamClose:readableStreamClose,isomorphicEncode:isomorphicEncode,isomorphicDecode:isomorphicDecode,urlIsLocal:urlIsLocal,urlHasHttpsScheme:urlHasHttpsScheme,urlIsHttpHttpsScheme:urlIsHttpHttpsScheme,readAllBytes:readAllBytes}},1744:(e,t,n)=>{"use strict";const{types:s}=n(3837);const{hasOwn:i,toUSVString:r}=n(2538);const o={};o.converters={};o.util={};o.errors={};o.errors.exception=function(e){return new TypeError(`${e.header}: ${e.message}`)};o.errors.conversionFailed=function(e){const t=e.types.length===1?"":" one of";const n=`${e.argument} could not be converted to`+`${t}: ${e.types.join(", ")}.`;return o.errors.exception({header:e.prefix,message:n})};o.errors.invalidArgument=function(e){return o.errors.exception({header:e.prefix,message:`"${e.value}" is an invalid ${e.type}.`})};o.brandCheck=function(e,t,n=undefined){if(n?.strict!==false&&!(e instanceof t)){throw new TypeError("Illegal invocation")}else{return e?.[Symbol.toStringTag]===t.prototype[Symbol.toStringTag]}};o.argumentLengthCheck=function({length:e},t,n){if(ei){throw o.errors.exception({header:"Integer conversion",message:`Value must be between ${r}-${i}, got ${A}.`})}return A}if(!Number.isNaN(A)&&s.clamp===true){A=Math.min(Math.max(A,r),i);if(Math.floor(A)%2===0){A=Math.floor(A)}else{A=Math.ceil(A)}return A}if(Number.isNaN(A)||A===0&&Object.is(0,A)||A===Number.POSITIVE_INFINITY||A===Number.NEGATIVE_INFINITY){return 0}A=o.util.IntegerPart(A);A=A%Math.pow(2,t);if(n==="signed"&&A>=Math.pow(2,t)-1){return A-Math.pow(2,t)}return A};o.util.IntegerPart=function(e){const t=Math.floor(Math.abs(e));if(e<0){return-1*t}return t};o.sequenceConverter=function(e){return t=>{if(o.util.Type(t)!=="Object"){throw o.errors.exception({header:"Sequence",message:`Value of type ${o.util.Type(t)} is not an Object.`})}const n=t?.[Symbol.iterator]?.();const s=[];if(n===undefined||typeof n.next!=="function"){throw o.errors.exception({header:"Sequence",message:"Object is not an iterator."})}while(true){const{done:t,value:i}=n.next();if(t){break}s.push(e(i))}return s}};o.recordConverter=function(e,t){return n=>{if(o.util.Type(n)!=="Object"){throw o.errors.exception({header:"Record",message:`Value of type ${o.util.Type(n)} is not an Object.`})}const i={};if(!s.isProxy(n)){const s=Object.keys(n);for(const r of s){const s=e(r);const o=t(n[r]);i[s]=o}return i}const r=Reflect.ownKeys(n);for(const s of r){const r=Reflect.getOwnPropertyDescriptor(n,s);if(r?.enumerable){const r=e(s);const o=t(n[s]);i[r]=o}}return i}};o.interfaceConverter=function(e){return(t,n={})=>{if(n.strict!==false&&!(t instanceof e)){throw o.errors.exception({header:e.name,message:`Expected ${t} to be an instance of ${e.name}.`})}return t}};o.dictionaryConverter=function(e){return t=>{const n=o.util.Type(t);const s={};if(n==="Null"||n==="Undefined"){return s}else if(n!=="Object"){throw o.errors.exception({header:"Dictionary",message:`Expected ${t} to be one of: Null, Undefined, Object.`})}for(const n of e){const{key:e,defaultValue:r,required:A,converter:a}=n;if(A===true){if(!i(t,e)){throw o.errors.exception({header:"Dictionary",message:`Missing required key "${e}".`})}}let c=t[e];const u=i(n,"defaultValue");if(u&&c!==null){c=c??r}if(A||u||c!==undefined){c=a(c);if(n.allowedValues&&!n.allowedValues.includes(c)){throw o.errors.exception({header:"Dictionary",message:`${c} is not an accepted type. Expected one of ${n.allowedValues.join(", ")}.`})}s[e]=c}}return s}};o.nullableConverter=function(e){return t=>{if(t===null){return t}return e(t)}};o.converters.DOMString=function(e,t={}){if(e===null&&t.legacyNullToEmptyString){return""}if(typeof e==="symbol"){throw new TypeError("Could not convert argument of type symbol to string.")}return String(e)};o.converters.ByteString=function(e){const t=o.converters.DOMString(e);for(let e=0;e255){throw new TypeError("Cannot convert argument to a ByteString because the character at "+`index ${e} has a value of ${n} which is greater than 255.`)}}return t};o.converters.USVString=r;o.converters.boolean=function(e){const t=Boolean(e);return t};o.converters.any=function(e){return e};o.converters["long long"]=function(e){const t=o.util.ConvertToInt(e,64,"signed");return t};o.converters["unsigned long long"]=function(e){const t=o.util.ConvertToInt(e,64,"unsigned");return t};o.converters["unsigned long"]=function(e){const t=o.util.ConvertToInt(e,32,"unsigned");return t};o.converters["unsigned short"]=function(e,t){const n=o.util.ConvertToInt(e,16,"unsigned",t);return n};o.converters.ArrayBuffer=function(e,t={}){if(o.util.Type(e)!=="Object"||!s.isAnyArrayBuffer(e)){throw o.errors.conversionFailed({prefix:`${e}`,argument:`${e}`,types:["ArrayBuffer"]})}if(t.allowShared===false&&s.isSharedArrayBuffer(e)){throw o.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."})}return e};o.converters.TypedArray=function(e,t,n={}){if(o.util.Type(e)!=="Object"||!s.isTypedArray(e)||e.constructor.name!==t.name){throw o.errors.conversionFailed({prefix:`${t.name}`,argument:`${e}`,types:[t.name]})}if(n.allowShared===false&&s.isSharedArrayBuffer(e.buffer)){throw o.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."})}return e};o.converters.DataView=function(e,t={}){if(o.util.Type(e)!=="Object"||!s.isDataView(e)){throw o.errors.exception({header:"DataView",message:"Object is not a DataView."})}if(t.allowShared===false&&s.isSharedArrayBuffer(e.buffer)){throw o.errors.exception({header:"ArrayBuffer",message:"SharedArrayBuffer is not allowed."})}return e};o.converters.BufferSource=function(e,t={}){if(s.isAnyArrayBuffer(e)){return o.converters.ArrayBuffer(e,t)}if(s.isTypedArray(e)){return o.converters.TypedArray(e,e.constructor)}if(s.isDataView(e)){return o.converters.DataView(e,t)}throw new TypeError(`Could not convert ${e} to a BufferSource.`)};o.converters["sequence"]=o.sequenceConverter(o.converters.ByteString);o.converters["sequence>"]=o.sequenceConverter(o.converters["sequence"]);o.converters["record"]=o.recordConverter(o.converters.ByteString,o.converters.ByteString);e.exports={webidl:o}},4854:e=>{"use strict";function getEncoding(e){if(!e){return"failure"}switch(e.trim().toLowerCase()){case"unicode-1-1-utf-8":case"unicode11utf8":case"unicode20utf8":case"utf-8":case"utf8":case"x-unicode20utf8":return"UTF-8";case"866":case"cp866":case"csibm866":case"ibm866":return"IBM866";case"csisolatin2":case"iso-8859-2":case"iso-ir-101":case"iso8859-2":case"iso88592":case"iso_8859-2":case"iso_8859-2:1987":case"l2":case"latin2":return"ISO-8859-2";case"csisolatin3":case"iso-8859-3":case"iso-ir-109":case"iso8859-3":case"iso88593":case"iso_8859-3":case"iso_8859-3:1988":case"l3":case"latin3":return"ISO-8859-3";case"csisolatin4":case"iso-8859-4":case"iso-ir-110":case"iso8859-4":case"iso88594":case"iso_8859-4":case"iso_8859-4:1988":case"l4":case"latin4":return"ISO-8859-4";case"csisolatincyrillic":case"cyrillic":case"iso-8859-5":case"iso-ir-144":case"iso8859-5":case"iso88595":case"iso_8859-5":case"iso_8859-5:1988":return"ISO-8859-5";case"arabic":case"asmo-708":case"csiso88596e":case"csiso88596i":case"csisolatinarabic":case"ecma-114":case"iso-8859-6":case"iso-8859-6-e":case"iso-8859-6-i":case"iso-ir-127":case"iso8859-6":case"iso88596":case"iso_8859-6":case"iso_8859-6:1987":return"ISO-8859-6";case"csisolatingreek":case"ecma-118":case"elot_928":case"greek":case"greek8":case"iso-8859-7":case"iso-ir-126":case"iso8859-7":case"iso88597":case"iso_8859-7":case"iso_8859-7:1987":case"sun_eu_greek":return"ISO-8859-7";case"csiso88598e":case"csisolatinhebrew":case"hebrew":case"iso-8859-8":case"iso-8859-8-e":case"iso-ir-138":case"iso8859-8":case"iso88598":case"iso_8859-8":case"iso_8859-8:1988":case"visual":return"ISO-8859-8";case"csiso88598i":case"iso-8859-8-i":case"logical":return"ISO-8859-8-I";case"csisolatin6":case"iso-8859-10":case"iso-ir-157":case"iso8859-10":case"iso885910":case"l6":case"latin6":return"ISO-8859-10";case"iso-8859-13":case"iso8859-13":case"iso885913":return"ISO-8859-13";case"iso-8859-14":case"iso8859-14":case"iso885914":return"ISO-8859-14";case"csisolatin9":case"iso-8859-15":case"iso8859-15":case"iso885915":case"iso_8859-15":case"l9":return"ISO-8859-15";case"iso-8859-16":return"ISO-8859-16";case"cskoi8r":case"koi":case"koi8":case"koi8-r":case"koi8_r":return"KOI8-R";case"koi8-ru":case"koi8-u":return"KOI8-U";case"csmacintosh":case"mac":case"macintosh":case"x-mac-roman":return"macintosh";case"iso-8859-11":case"iso8859-11":case"iso885911":case"tis-620":case"windows-874":return"windows-874";case"cp1250":case"windows-1250":case"x-cp1250":return"windows-1250";case"cp1251":case"windows-1251":case"x-cp1251":return"windows-1251";case"ansi_x3.4-1968":case"ascii":case"cp1252":case"cp819":case"csisolatin1":case"ibm819":case"iso-8859-1":case"iso-ir-100":case"iso8859-1":case"iso88591":case"iso_8859-1":case"iso_8859-1:1987":case"l1":case"latin1":case"us-ascii":case"windows-1252":case"x-cp1252":return"windows-1252";case"cp1253":case"windows-1253":case"x-cp1253":return"windows-1253";case"cp1254":case"csisolatin5":case"iso-8859-9":case"iso-ir-148":case"iso8859-9":case"iso88599":case"iso_8859-9":case"iso_8859-9:1989":case"l5":case"latin5":case"windows-1254":case"x-cp1254":return"windows-1254";case"cp1255":case"windows-1255":case"x-cp1255":return"windows-1255";case"cp1256":case"windows-1256":case"x-cp1256":return"windows-1256";case"cp1257":case"windows-1257":case"x-cp1257":return"windows-1257";case"cp1258":case"windows-1258":case"x-cp1258":return"windows-1258";case"x-mac-cyrillic":case"x-mac-ukrainian":return"x-mac-cyrillic";case"chinese":case"csgb2312":case"csiso58gb231280":case"gb2312":case"gb_2312":case"gb_2312-80":case"gbk":case"iso-ir-58":case"x-gbk":return"GBK";case"gb18030":return"gb18030";case"big5":case"big5-hkscs":case"cn-big5":case"csbig5":case"x-x-big5":return"Big5";case"cseucpkdfmtjapanese":case"euc-jp":case"x-euc-jp":return"EUC-JP";case"csiso2022jp":case"iso-2022-jp":return"ISO-2022-JP";case"csshiftjis":case"ms932":case"ms_kanji":case"shift-jis":case"shift_jis":case"sjis":case"windows-31j":case"x-sjis":return"Shift_JIS";case"cseuckr":case"csksc56011987":case"euc-kr":case"iso-ir-149":case"korean":case"ks_c_5601-1987":case"ks_c_5601-1989":case"ksc5601":case"ksc_5601":case"windows-949":return"EUC-KR";case"csiso2022kr":case"hz-gb-2312":case"iso-2022-cn":case"iso-2022-cn-ext":case"iso-2022-kr":case"replacement":return"replacement";case"unicodefffe":case"utf-16be":return"UTF-16BE";case"csunicode":case"iso-10646-ucs-2":case"ucs-2":case"unicode":case"unicodefeff":case"utf-16":case"utf-16le":return"UTF-16LE";case"x-user-defined":return"x-user-defined";default:return"failure"}}e.exports={getEncoding:getEncoding}},1446:(e,t,n)=>{"use strict";const{staticPropertyDescriptors:s,readOperation:i,fireAProgressEvent:r}=n(7530);const{kState:o,kError:A,kResult:a,kEvents:c,kAborted:u}=n(9054);const{webidl:l}=n(1744);const{kEnumerableProperty:d}=n(3983);class FileReader extends EventTarget{constructor(){super();this[o]="empty";this[a]=null;this[A]=null;this[c]={loadend:null,error:null,abort:null,load:null,progress:null,loadstart:null}}readAsArrayBuffer(e){l.brandCheck(this,FileReader);l.argumentLengthCheck(arguments,1,{header:"FileReader.readAsArrayBuffer"});e=l.converters.Blob(e,{strict:false});i(this,e,"ArrayBuffer")}readAsBinaryString(e){l.brandCheck(this,FileReader);l.argumentLengthCheck(arguments,1,{header:"FileReader.readAsBinaryString"});e=l.converters.Blob(e,{strict:false});i(this,e,"BinaryString")}readAsText(e,t=undefined){l.brandCheck(this,FileReader);l.argumentLengthCheck(arguments,1,{header:"FileReader.readAsText"});e=l.converters.Blob(e,{strict:false});if(t!==undefined){t=l.converters.DOMString(t)}i(this,e,"Text",t)}readAsDataURL(e){l.brandCheck(this,FileReader);l.argumentLengthCheck(arguments,1,{header:"FileReader.readAsDataURL"});e=l.converters.Blob(e,{strict:false});i(this,e,"DataURL")}abort(){if(this[o]==="empty"||this[o]==="done"){this[a]=null;return}if(this[o]==="loading"){this[o]="done";this[a]=null}this[u]=true;r("abort",this);if(this[o]!=="loading"){r("loadend",this)}}get readyState(){l.brandCheck(this,FileReader);switch(this[o]){case"empty":return this.EMPTY;case"loading":return this.LOADING;case"done":return this.DONE}}get result(){l.brandCheck(this,FileReader);return this[a]}get error(){l.brandCheck(this,FileReader);return this[A]}get onloadend(){l.brandCheck(this,FileReader);return this[c].loadend}set onloadend(e){l.brandCheck(this,FileReader);if(this[c].loadend){this.removeEventListener("loadend",this[c].loadend)}if(typeof e==="function"){this[c].loadend=e;this.addEventListener("loadend",e)}else{this[c].loadend=null}}get onerror(){l.brandCheck(this,FileReader);return this[c].error}set onerror(e){l.brandCheck(this,FileReader);if(this[c].error){this.removeEventListener("error",this[c].error)}if(typeof e==="function"){this[c].error=e;this.addEventListener("error",e)}else{this[c].error=null}}get onloadstart(){l.brandCheck(this,FileReader);return this[c].loadstart}set onloadstart(e){l.brandCheck(this,FileReader);if(this[c].loadstart){this.removeEventListener("loadstart",this[c].loadstart)}if(typeof e==="function"){this[c].loadstart=e;this.addEventListener("loadstart",e)}else{this[c].loadstart=null}}get onprogress(){l.brandCheck(this,FileReader);return this[c].progress}set onprogress(e){l.brandCheck(this,FileReader);if(this[c].progress){this.removeEventListener("progress",this[c].progress)}if(typeof e==="function"){this[c].progress=e;this.addEventListener("progress",e)}else{this[c].progress=null}}get onload(){l.brandCheck(this,FileReader);return this[c].load}set onload(e){l.brandCheck(this,FileReader);if(this[c].load){this.removeEventListener("load",this[c].load)}if(typeof e==="function"){this[c].load=e;this.addEventListener("load",e)}else{this[c].load=null}}get onabort(){l.brandCheck(this,FileReader);return this[c].abort}set onabort(e){l.brandCheck(this,FileReader);if(this[c].abort){this.removeEventListener("abort",this[c].abort)}if(typeof e==="function"){this[c].abort=e;this.addEventListener("abort",e)}else{this[c].abort=null}}}FileReader.EMPTY=FileReader.prototype.EMPTY=0;FileReader.LOADING=FileReader.prototype.LOADING=1;FileReader.DONE=FileReader.prototype.DONE=2;Object.defineProperties(FileReader.prototype,{EMPTY:s,LOADING:s,DONE:s,readAsArrayBuffer:d,readAsBinaryString:d,readAsText:d,readAsDataURL:d,abort:d,readyState:d,result:d,error:d,onloadstart:d,onprogress:d,onload:d,onabort:d,onerror:d,onloadend:d,[Symbol.toStringTag]:{value:"FileReader",writable:false,enumerable:false,configurable:true}});Object.defineProperties(FileReader,{EMPTY:s,LOADING:s,DONE:s});e.exports={FileReader:FileReader}},5504:(e,t,n)=>{"use strict";const{webidl:s}=n(1744);const i=Symbol("ProgressEvent state");class ProgressEvent extends Event{constructor(e,t={}){e=s.converters.DOMString(e);t=s.converters.ProgressEventInit(t??{});super(e,t);this[i]={lengthComputable:t.lengthComputable,loaded:t.loaded,total:t.total}}get lengthComputable(){s.brandCheck(this,ProgressEvent);return this[i].lengthComputable}get loaded(){s.brandCheck(this,ProgressEvent);return this[i].loaded}get total(){s.brandCheck(this,ProgressEvent);return this[i].total}}s.converters.ProgressEventInit=s.dictionaryConverter([{key:"lengthComputable",converter:s.converters.boolean,defaultValue:false},{key:"loaded",converter:s.converters["unsigned long long"],defaultValue:0},{key:"total",converter:s.converters["unsigned long long"],defaultValue:0},{key:"bubbles",converter:s.converters.boolean,defaultValue:false},{key:"cancelable",converter:s.converters.boolean,defaultValue:false},{key:"composed",converter:s.converters.boolean,defaultValue:false}]);e.exports={ProgressEvent:ProgressEvent}},9054:e=>{"use strict";e.exports={kState:Symbol("FileReader state"),kResult:Symbol("FileReader result"),kError:Symbol("FileReader error"),kLastProgressEventFired:Symbol("FileReader last progress event fired timestamp"),kEvents:Symbol("FileReader events"),kAborted:Symbol("FileReader aborted")}},7530:(e,t,n)=>{"use strict";const{kState:s,kError:i,kResult:r,kAborted:o,kLastProgressEventFired:A}=n(9054);const{ProgressEvent:a}=n(5504);const{getEncoding:c}=n(4854);const{DOMException:u}=n(1037);const{serializeAMimeType:l,parseMIMEType:d}=n(685);const{types:p}=n(3837);const{StringDecoder:g}=n(1576);const{btoa:h}=n(4300);const f={enumerable:true,writable:false,configurable:false};function readOperation(e,t,n,a){if(e[s]==="loading"){throw new u("Invalid state","InvalidStateError")}e[s]="loading";e[r]=null;e[i]=null;const c=t.stream();const l=c.getReader();const d=[];let g=l.read();let h=true;(async()=>{while(!e[o]){try{const{done:c,value:u}=await g;if(h&&!e[o]){queueMicrotask((()=>{fireAProgressEvent("loadstart",e)}))}h=false;if(!c&&p.isUint8Array(u)){d.push(u);if((e[A]===undefined||Date.now()-e[A]>=50)&&!e[o]){e[A]=Date.now();queueMicrotask((()=>{fireAProgressEvent("progress",e)}))}g=l.read()}else if(c){queueMicrotask((()=>{e[s]="done";try{const s=packageData(d,n,t.type,a);if(e[o]){return}e[r]=s;fireAProgressEvent("load",e)}catch(t){e[i]=t;fireAProgressEvent("error",e)}if(e[s]!=="loading"){fireAProgressEvent("loadend",e)}}));break}}catch(t){if(e[o]){return}queueMicrotask((()=>{e[s]="done";e[i]=t;fireAProgressEvent("error",e);if(e[s]!=="loading"){fireAProgressEvent("loadend",e)}}));break}}})()}function fireAProgressEvent(e,t){const n=new a(e,{bubbles:false,cancelable:false});t.dispatchEvent(n)}function packageData(e,t,n,s){switch(t){case"DataURL":{let t="data:";const s=d(n||"application/octet-stream");if(s!=="failure"){t+=l(s)}t+=";base64,";const i=new g("latin1");for(const n of e){t+=h(i.write(n))}t+=h(i.end());return t}case"Text":{let t="failure";if(s){t=c(s)}if(t==="failure"&&n){const e=d(n);if(e!=="failure"){t=c(e.parameters.get("charset"))}}if(t==="failure"){t="UTF-8"}return decode(e,t)}case"ArrayBuffer":{const t=combineByteSequences(e);return t.buffer}case"BinaryString":{let t="";const n=new g("latin1");for(const s of e){t+=n.write(s)}t+=n.end();return t}}}function decode(e,t){const n=combineByteSequences(e);const s=BOMSniffing(n);let i=0;if(s!==null){t=s;i=s==="UTF-8"?3:2}const r=n.slice(i);return new TextDecoder(t).decode(r)}function BOMSniffing(e){const[t,n,s]=e;if(t===239&&n===187&&s===191){return"UTF-8"}else if(t===254&&n===255){return"UTF-16BE"}else if(t===255&&n===254){return"UTF-16LE"}return null}function combineByteSequences(e){const t=e.reduce(((e,t)=>e+t.byteLength),0);let n=0;return e.reduce(((e,t)=>{e.set(t,n);n+=t.byteLength;return e}),new Uint8Array(t))}e.exports={staticPropertyDescriptors:f,readOperation:readOperation,fireAProgressEvent:fireAProgressEvent}},1892:(e,t,n)=>{"use strict";const s=Symbol.for("undici.globalDispatcher.1");const{InvalidArgumentError:i}=n(8045);const r=n(7890);if(getGlobalDispatcher()===undefined){setGlobalDispatcher(new r)}function setGlobalDispatcher(e){if(!e||typeof e.dispatch!=="function"){throw new i("Argument agent must implement Agent")}Object.defineProperty(globalThis,s,{value:e,writable:true,enumerable:false,configurable:false})}function getGlobalDispatcher(){return globalThis[s]}e.exports={setGlobalDispatcher:setGlobalDispatcher,getGlobalDispatcher:getGlobalDispatcher}},6930:e=>{"use strict";e.exports=class DecoratorHandler{constructor(e){this.handler=e}onConnect(...e){return this.handler.onConnect(...e)}onError(...e){return this.handler.onError(...e)}onUpgrade(...e){return this.handler.onUpgrade(...e)}onHeaders(...e){return this.handler.onHeaders(...e)}onData(...e){return this.handler.onData(...e)}onComplete(...e){return this.handler.onComplete(...e)}onBodySent(...e){return this.handler.onBodySent(...e)}}},2860:(e,t,n)=>{"use strict";const s=n(3983);const{kBodyUsed:i}=n(2785);const r=n(9491);const{InvalidArgumentError:o}=n(8045);const A=n(2361);const a=[300,301,302,303,307,308];const c=Symbol("body");class BodyAsyncIterable{constructor(e){this[c]=e;this[i]=false}async*[Symbol.asyncIterator](){r(!this[i],"disturbed");this[i]=true;yield*this[c]}}class RedirectHandler{constructor(e,t,n,a){if(t!=null&&(!Number.isInteger(t)||t<0)){throw new o("maxRedirections must be a positive number")}s.validateHandler(a,n.method,n.upgrade);this.dispatch=e;this.location=null;this.abort=null;this.opts={...n,maxRedirections:0};this.maxRedirections=t;this.handler=a;this.history=[];if(s.isStream(this.opts.body)){if(s.bodyLength(this.opts.body)===0){this.opts.body.on("data",(function(){r(false)}))}if(typeof this.opts.body.readableDidRead!=="boolean"){this.opts.body[i]=false;A.prototype.on.call(this.opts.body,"data",(function(){this[i]=true}))}}else if(this.opts.body&&typeof this.opts.body.pipeTo==="function"){this.opts.body=new BodyAsyncIterable(this.opts.body)}else if(this.opts.body&&typeof this.opts.body!=="string"&&!ArrayBuffer.isView(this.opts.body)&&s.isIterable(this.opts.body)){this.opts.body=new BodyAsyncIterable(this.opts.body)}}onConnect(e){this.abort=e;this.handler.onConnect(e,{history:this.history})}onUpgrade(e,t,n){this.handler.onUpgrade(e,t,n)}onError(e){this.handler.onError(e)}onHeaders(e,t,n,i){this.location=this.history.length>=this.maxRedirections||s.isDisturbed(this.opts.body)?null:parseLocation(e,t);if(this.opts.origin){this.history.push(new URL(this.opts.path,this.opts.origin))}if(!this.location){return this.handler.onHeaders(e,t,n,i)}const{origin:r,pathname:o,search:A}=s.parseURL(new URL(this.location,this.opts.origin&&new URL(this.opts.path,this.opts.origin)));const a=A?`${o}${A}`:o;this.opts.headers=cleanRequestHeaders(this.opts.headers,e===303,this.opts.origin!==r);this.opts.path=a;this.opts.origin=r;this.opts.maxRedirections=0;this.opts.query=null;if(e===303&&this.opts.method!=="HEAD"){this.opts.method="GET";this.opts.body=null}}onData(e){if(this.location){}else{return this.handler.onData(e)}}onComplete(e){if(this.location){this.location=null;this.abort=null;this.dispatch(this.opts,this)}else{this.handler.onComplete(e)}}onBodySent(e){if(this.handler.onBodySent){this.handler.onBodySent(e)}}}function parseLocation(e,t){if(a.indexOf(e)===-1){return null}for(let e=0;e{"use strict";const s=n(2860);function createRedirectInterceptor({maxRedirections:e}){return t=>function Intercept(n,i){const{maxRedirections:r=e}=n;if(!r){return t(n,i)}const o=new s(t,r,n,i);n={...n,maxRedirections:0};return t(n,o)}}e.exports=createRedirectInterceptor},953:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.SPECIAL_HEADERS=t.HEADER_STATE=t.MINOR=t.MAJOR=t.CONNECTION_TOKEN_CHARS=t.HEADER_CHARS=t.TOKEN=t.STRICT_TOKEN=t.HEX=t.URL_CHAR=t.STRICT_URL_CHAR=t.USERINFO_CHARS=t.MARK=t.ALPHANUM=t.NUM=t.HEX_MAP=t.NUM_MAP=t.ALPHA=t.FINISH=t.H_METHOD_MAP=t.METHOD_MAP=t.METHODS_RTSP=t.METHODS_ICE=t.METHODS_HTTP=t.METHODS=t.LENIENT_FLAGS=t.FLAGS=t.TYPE=t.ERROR=void 0;const s=n(1891);var i;(function(e){e[e["OK"]=0]="OK";e[e["INTERNAL"]=1]="INTERNAL";e[e["STRICT"]=2]="STRICT";e[e["LF_EXPECTED"]=3]="LF_EXPECTED";e[e["UNEXPECTED_CONTENT_LENGTH"]=4]="UNEXPECTED_CONTENT_LENGTH";e[e["CLOSED_CONNECTION"]=5]="CLOSED_CONNECTION";e[e["INVALID_METHOD"]=6]="INVALID_METHOD";e[e["INVALID_URL"]=7]="INVALID_URL";e[e["INVALID_CONSTANT"]=8]="INVALID_CONSTANT";e[e["INVALID_VERSION"]=9]="INVALID_VERSION";e[e["INVALID_HEADER_TOKEN"]=10]="INVALID_HEADER_TOKEN";e[e["INVALID_CONTENT_LENGTH"]=11]="INVALID_CONTENT_LENGTH";e[e["INVALID_CHUNK_SIZE"]=12]="INVALID_CHUNK_SIZE";e[e["INVALID_STATUS"]=13]="INVALID_STATUS";e[e["INVALID_EOF_STATE"]=14]="INVALID_EOF_STATE";e[e["INVALID_TRANSFER_ENCODING"]=15]="INVALID_TRANSFER_ENCODING";e[e["CB_MESSAGE_BEGIN"]=16]="CB_MESSAGE_BEGIN";e[e["CB_HEADERS_COMPLETE"]=17]="CB_HEADERS_COMPLETE";e[e["CB_MESSAGE_COMPLETE"]=18]="CB_MESSAGE_COMPLETE";e[e["CB_CHUNK_HEADER"]=19]="CB_CHUNK_HEADER";e[e["CB_CHUNK_COMPLETE"]=20]="CB_CHUNK_COMPLETE";e[e["PAUSED"]=21]="PAUSED";e[e["PAUSED_UPGRADE"]=22]="PAUSED_UPGRADE";e[e["PAUSED_H2_UPGRADE"]=23]="PAUSED_H2_UPGRADE";e[e["USER"]=24]="USER"})(i=t.ERROR||(t.ERROR={}));var r;(function(e){e[e["BOTH"]=0]="BOTH";e[e["REQUEST"]=1]="REQUEST";e[e["RESPONSE"]=2]="RESPONSE"})(r=t.TYPE||(t.TYPE={}));var o;(function(e){e[e["CONNECTION_KEEP_ALIVE"]=1]="CONNECTION_KEEP_ALIVE";e[e["CONNECTION_CLOSE"]=2]="CONNECTION_CLOSE";e[e["CONNECTION_UPGRADE"]=4]="CONNECTION_UPGRADE";e[e["CHUNKED"]=8]="CHUNKED";e[e["UPGRADE"]=16]="UPGRADE";e[e["CONTENT_LENGTH"]=32]="CONTENT_LENGTH";e[e["SKIPBODY"]=64]="SKIPBODY";e[e["TRAILING"]=128]="TRAILING";e[e["TRANSFER_ENCODING"]=512]="TRANSFER_ENCODING"})(o=t.FLAGS||(t.FLAGS={}));var A;(function(e){e[e["HEADERS"]=1]="HEADERS";e[e["CHUNKED_LENGTH"]=2]="CHUNKED_LENGTH";e[e["KEEP_ALIVE"]=4]="KEEP_ALIVE"})(A=t.LENIENT_FLAGS||(t.LENIENT_FLAGS={}));var a;(function(e){e[e["DELETE"]=0]="DELETE";e[e["GET"]=1]="GET";e[e["HEAD"]=2]="HEAD";e[e["POST"]=3]="POST";e[e["PUT"]=4]="PUT";e[e["CONNECT"]=5]="CONNECT";e[e["OPTIONS"]=6]="OPTIONS";e[e["TRACE"]=7]="TRACE";e[e["COPY"]=8]="COPY";e[e["LOCK"]=9]="LOCK";e[e["MKCOL"]=10]="MKCOL";e[e["MOVE"]=11]="MOVE";e[e["PROPFIND"]=12]="PROPFIND";e[e["PROPPATCH"]=13]="PROPPATCH";e[e["SEARCH"]=14]="SEARCH";e[e["UNLOCK"]=15]="UNLOCK";e[e["BIND"]=16]="BIND";e[e["REBIND"]=17]="REBIND";e[e["UNBIND"]=18]="UNBIND";e[e["ACL"]=19]="ACL";e[e["REPORT"]=20]="REPORT";e[e["MKACTIVITY"]=21]="MKACTIVITY";e[e["CHECKOUT"]=22]="CHECKOUT";e[e["MERGE"]=23]="MERGE";e[e["M-SEARCH"]=24]="M-SEARCH";e[e["NOTIFY"]=25]="NOTIFY";e[e["SUBSCRIBE"]=26]="SUBSCRIBE";e[e["UNSUBSCRIBE"]=27]="UNSUBSCRIBE";e[e["PATCH"]=28]="PATCH";e[e["PURGE"]=29]="PURGE";e[e["MKCALENDAR"]=30]="MKCALENDAR";e[e["LINK"]=31]="LINK";e[e["UNLINK"]=32]="UNLINK";e[e["SOURCE"]=33]="SOURCE";e[e["PRI"]=34]="PRI";e[e["DESCRIBE"]=35]="DESCRIBE";e[e["ANNOUNCE"]=36]="ANNOUNCE";e[e["SETUP"]=37]="SETUP";e[e["PLAY"]=38]="PLAY";e[e["PAUSE"]=39]="PAUSE";e[e["TEARDOWN"]=40]="TEARDOWN";e[e["GET_PARAMETER"]=41]="GET_PARAMETER";e[e["SET_PARAMETER"]=42]="SET_PARAMETER";e[e["REDIRECT"]=43]="REDIRECT";e[e["RECORD"]=44]="RECORD";e[e["FLUSH"]=45]="FLUSH"})(a=t.METHODS||(t.METHODS={}));t.METHODS_HTTP=[a.DELETE,a.GET,a.HEAD,a.POST,a.PUT,a.CONNECT,a.OPTIONS,a.TRACE,a.COPY,a.LOCK,a.MKCOL,a.MOVE,a.PROPFIND,a.PROPPATCH,a.SEARCH,a.UNLOCK,a.BIND,a.REBIND,a.UNBIND,a.ACL,a.REPORT,a.MKACTIVITY,a.CHECKOUT,a.MERGE,a["M-SEARCH"],a.NOTIFY,a.SUBSCRIBE,a.UNSUBSCRIBE,a.PATCH,a.PURGE,a.MKCALENDAR,a.LINK,a.UNLINK,a.PRI,a.SOURCE];t.METHODS_ICE=[a.SOURCE];t.METHODS_RTSP=[a.OPTIONS,a.DESCRIBE,a.ANNOUNCE,a.SETUP,a.PLAY,a.PAUSE,a.TEARDOWN,a.GET_PARAMETER,a.SET_PARAMETER,a.REDIRECT,a.RECORD,a.FLUSH,a.GET,a.POST];t.METHOD_MAP=s.enumToMap(a);t.H_METHOD_MAP={};Object.keys(t.METHOD_MAP).forEach((e=>{if(/^H/.test(e)){t.H_METHOD_MAP[e]=t.METHOD_MAP[e]}}));var c;(function(e){e[e["SAFE"]=0]="SAFE";e[e["SAFE_WITH_CB"]=1]="SAFE_WITH_CB";e[e["UNSAFE"]=2]="UNSAFE"})(c=t.FINISH||(t.FINISH={}));t.ALPHA=[];for(let e="A".charCodeAt(0);e<="Z".charCodeAt(0);e++){t.ALPHA.push(String.fromCharCode(e));t.ALPHA.push(String.fromCharCode(e+32))}t.NUM_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9};t.HEX_MAP={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15};t.NUM=["0","1","2","3","4","5","6","7","8","9"];t.ALPHANUM=t.ALPHA.concat(t.NUM);t.MARK=["-","_",".","!","~","*","'","(",")"];t.USERINFO_CHARS=t.ALPHANUM.concat(t.MARK).concat(["%",";",":","&","=","+","$",","]);t.STRICT_URL_CHAR=["!",'"',"$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","@","[","\\","]","^","_","`","{","|","}","~"].concat(t.ALPHANUM);t.URL_CHAR=t.STRICT_URL_CHAR.concat(["\t","\f"]);for(let e=128;e<=255;e++){t.URL_CHAR.push(e)}t.HEX=t.NUM.concat(["a","b","c","d","e","f","A","B","C","D","E","F"]);t.STRICT_TOKEN=["!","#","$","%","&","'","*","+","-",".","^","_","`","|","~"].concat(t.ALPHANUM);t.TOKEN=t.STRICT_TOKEN.concat([" "]);t.HEADER_CHARS=["\t"];for(let e=32;e<=255;e++){if(e!==127){t.HEADER_CHARS.push(e)}}t.CONNECTION_TOKEN_CHARS=t.HEADER_CHARS.filter((e=>e!==44));t.MAJOR=t.NUM_MAP;t.MINOR=t.MAJOR;var u;(function(e){e[e["GENERAL"]=0]="GENERAL";e[e["CONNECTION"]=1]="CONNECTION";e[e["CONTENT_LENGTH"]=2]="CONTENT_LENGTH";e[e["TRANSFER_ENCODING"]=3]="TRANSFER_ENCODING";e[e["UPGRADE"]=4]="UPGRADE";e[e["CONNECTION_KEEP_ALIVE"]=5]="CONNECTION_KEEP_ALIVE";e[e["CONNECTION_CLOSE"]=6]="CONNECTION_CLOSE";e[e["CONNECTION_UPGRADE"]=7]="CONNECTION_UPGRADE";e[e["TRANSFER_ENCODING_CHUNKED"]=8]="TRANSFER_ENCODING_CHUNKED"})(u=t.HEADER_STATE||(t.HEADER_STATE={}));t.SPECIAL_HEADERS={connection:u.CONNECTION,"content-length":u.CONTENT_LENGTH,"proxy-connection":u.CONNECTION,"transfer-encoding":u.TRANSFER_ENCODING,upgrade:u.UPGRADE}},1145:e=>{e.exports="AGFzbQEAAAABMAhgAX8Bf2ADf39/AX9gBH9/f38Bf2AAAGADf39/AGABfwBgAn9/AGAGf39/f39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQACA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAA0ZFAwMEAAAFAAAAAAAABQEFAAUFBQAABgAAAAAGBgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAABAQcAAAUFAwABBAUBcAESEgUDAQACBggBfwFBgNQECwfRBSIGbWVtb3J5AgALX2luaXRpYWxpemUACRlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQAChhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUAQQxsbGh0dHBfYWxsb2MADAZtYWxsb2MARgtsbGh0dHBfZnJlZQANBGZyZWUASA9sbGh0dHBfZ2V0X3R5cGUADhVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADxVsbGh0dHBfZ2V0X2h0dHBfbWlub3IAEBFsbGh0dHBfZ2V0X21ldGhvZAARFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAEhJsbGh0dHBfZ2V0X3VwZ3JhZGUAEwxsbGh0dHBfcmVzZXQAFA5sbGh0dHBfZXhlY3V0ZQAVFGxsaHR0cF9zZXR0aW5nc19pbml0ABYNbGxodHRwX2ZpbmlzaAAXDGxsaHR0cF9wYXVzZQAYDWxsaHR0cF9yZXN1bWUAGRtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGhBsbGh0dHBfZ2V0X2Vycm5vABsXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AHBdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAdFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB4RbGxodHRwX2Vycm5vX25hbWUAHxJsbGh0dHBfbWV0aG9kX25hbWUAIBJs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ADcDACAAQShqQgA3AwAgAEEgakIANwMAIABBEGpCADcDACAAQQhqQgA3AwAgAEHdATYCHEEAC3sBAX8CQCAAKAIMIgMNAAJAIAAoAgRFDQAgACABNgIECwJAIAAgASACEMSAgIAAIgMNACAAKAIMDwsgACADNgIcQQAhAyAAKAIEIgFFDQAgACABIAIgACgCCBGBgICAAAAiAUUNACAAIAI2AhQgACABNgIMIAEhAwsgAwvk8wEDDn8DfgR/I4CAgIAAQRBrIgMkgICAgAAgASEEIAEhBSABIQYgASEHIAEhCCABIQkgASEKIAEhCyABIQwgASENIAEhDiABIQ8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgACgCHCIQQX9qDt0B2gEB2QECAwQFBgcICQoLDA0O2AEPENcBERLWARMUFRYXGBkaG+AB3wEcHR7VAR8gISIjJCXUASYnKCkqKyzTAdIBLS7RAdABLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVG2wFHSElKzwHOAUvNAUzMAU1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+f4ABgQGCAYMBhAGFAYYBhwGIAYkBigGLAYwBjQGOAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAZsBnAGdAZ4BnwGgAaEBogGjAaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwHLAcoBuAHJAbkByAG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAQDcAQtBACEQDMYBC0EOIRAMxQELQQ0hEAzEAQtBDyEQDMMBC0EQIRAMwgELQRMhEAzBAQtBFCEQDMABC0EVIRAMvwELQRYhEAy+AQtBFyEQDL0BC0EYIRAMvAELQRkhEAy7AQtBGiEQDLoBC0EbIRAMuQELQRwhEAy4AQtBCCEQDLcBC0EdIRAMtgELQSAhEAy1AQtBHyEQDLQBC0EHIRAMswELQSEhEAyyAQtBIiEQDLEBC0EeIRAMsAELQSMhEAyvAQtBEiEQDK4BC0ERIRAMrQELQSQhEAysAQtBJSEQDKsBC0EmIRAMqgELQSchEAypAQtBwwEhEAyoAQtBKSEQDKcBC0ErIRAMpgELQSwhEAylAQtBLSEQDKQBC0EuIRAMowELQS8hEAyiAQtBxAEhEAyhAQtBMCEQDKABC0E0IRAMnwELQQwhEAyeAQtBMSEQDJ0BC0EyIRAMnAELQTMhEAybAQtBOSEQDJoBC0E1IRAMmQELQcUBIRAMmAELQQshEAyXAQtBOiEQDJYBC0E2IRAMlQELQQohEAyUAQtBNyEQDJMBC0E4IRAMkgELQTwhEAyRAQtBOyEQDJABC0E9IRAMjwELQQkhEAyOAQtBKCEQDI0BC0E+IRAMjAELQT8hEAyLAQtBwAAhEAyKAQtBwQAhEAyJAQtBwgAhEAyIAQtBwwAhEAyHAQtBxAAhEAyGAQtBxQAhEAyFAQtBxgAhEAyEAQtBKiEQDIMBC0HHACEQDIIBC0HIACEQDIEBC0HJACEQDIABC0HKACEQDH8LQcsAIRAMfgtBzQAhEAx9C0HMACEQDHwLQc4AIRAMewtBzwAhEAx6C0HQACEQDHkLQdEAIRAMeAtB0gAhEAx3C0HTACEQDHYLQdQAIRAMdQtB1gAhEAx0C0HVACEQDHMLQQYhEAxyC0HXACEQDHELQQUhEAxwC0HYACEQDG8LQQQhEAxuC0HZACEQDG0LQdoAIRAMbAtB2wAhEAxrC0HcACEQDGoLQQMhEAxpC0HdACEQDGgLQd4AIRAMZwtB3wAhEAxmC0HhACEQDGULQeAAIRAMZAtB4gAhEAxjC0HjACEQDGILQQIhEAxhC0HkACEQDGALQeUAIRAMXwtB5gAhEAxeC0HnACEQDF0LQegAIRAMXAtB6QAhEAxbC0HqACEQDFoLQesAIRAMWQtB7AAhEAxYC0HtACEQDFcLQe4AIRAMVgtB7wAhEAxVC0HwACEQDFQLQfEAIRAMUwtB8gAhEAxSC0HzACEQDFELQfQAIRAMUAtB9QAhEAxPC0H2ACEQDE4LQfcAIRAMTQtB+AAhEAxMC0H5ACEQDEsLQfoAIRAMSgtB+wAhEAxJC0H8ACEQDEgLQf0AIRAMRwtB/gAhEAxGC0H/ACEQDEULQYABIRAMRAtBgQEhEAxDC0GCASEQDEILQYMBIRAMQQtBhAEhEAxAC0GFASEQDD8LQYYBIRAMPgtBhwEhEAw9C0GIASEQDDwLQYkBIRAMOwtBigEhEAw6C0GLASEQDDkLQYwBIRAMOAtBjQEhEAw3C0GOASEQDDYLQY8BIRAMNQtBkAEhEAw0C0GRASEQDDMLQZIBIRAMMgtBkwEhEAwxC0GUASEQDDALQZUBIRAMLwtBlgEhEAwuC0GXASEQDC0LQZgBIRAMLAtBmQEhEAwrC0GaASEQDCoLQZsBIRAMKQtBnAEhEAwoC0GdASEQDCcLQZ4BIRAMJgtBnwEhEAwlC0GgASEQDCQLQaEBIRAMIwtBogEhEAwiC0GjASEQDCELQaQBIRAMIAtBpQEhEAwfC0GmASEQDB4LQacBIRAMHQtBqAEhEAwcC0GpASEQDBsLQaoBIRAMGgtBqwEhEAwZC0GsASEQDBgLQa0BIRAMFwtBrgEhEAwWC0EBIRAMFQtBrwEhEAwUC0GwASEQDBMLQbEBIRAMEgtBswEhEAwRC0GyASEQDBALQbQBIRAMDwtBtQEhEAwOC0G2ASEQDA0LQbcBIRAMDAtBuAEhEAwLC0G5ASEQDAoLQboBIRAMCQtBuwEhEAwIC0HGASEQDAcLQbwBIRAMBgtBvQEhEAwFC0G+ASEQDAQLQb8BIRAMAwtBwAEhEAwCC0HCASEQDAELQcEBIRALA0ACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAC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FCAAIBA2AgxBACEQDLIBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxNCyAAQdMANgIcIAAgATYCFCAAIBA2AgxBACEQDLEBCyAAKAIEIRAgAEEANgIEAkAgACAQIAEQp4CAgAAiEA0AIAEhAQxRCyAAQeUANgIcIAAgATYCFCAAIBA2AgxBACEQDLABCyAAQQA2AhwgACABNgIUIABBxoqAgAA2AhAgAEEHNgIMQQAhEAyvAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMSQsgAEHSADYCHCAAIAE2AhQgACAQNgIMQQAhEAyuAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMSQsgAEHTADYCHCAAIAE2AhQgACAQNgIMQQAhEAytAQsgACgCBCEQIABBADYCBAJAIAAgECABEKeAgIAAIhANACABIQEMTQsgAEHlADYCHCAAIAE2AhQgACAQNgIMQQAhEAysAQsgAEEANgIcIAAgATYCFCAAQdyIgIAANgIQIABBBzYCDEEAIRAMqwELIBBBP0cNASABQQFqIQELQQUhEAyQAQtBACEQIABBADYCHCAAIAE2AhQgAEH9koCAADYCECAAQQc2AgwMqAELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEILIABB0gA2AhwgACABNgIUIAAgEDYCDEEAIRAMpwELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEILIABB0wA2AhwgACABNgIUIAAgEDYCDEEAIRAMpgELIAAoAgQhECAAQQA2AgQCQCAAIBAgARCngICAACIQDQAgASEBDEYLIABB5QA2AhwgACABNgIUIAAgEDYCDEEAIRAMpQELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDD8LIABB0gA2AhwgACAUNgIUIAAgATYCDEEAIRAMpAELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDD8LIABB0wA2AhwgACAUNgIUIAAgATYCDEEAIRAMowELIAAoAgQhASAAQQA2AgQCQCAAIAEgFBCngICAACIBDQAgFCEBDEMLIABB5QA2AhwgACAU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YWdlX2JlZ2luYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlYCBjYWxsYmFjayBlcnJvcgBgb25fc3RhdHVzX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdmVyc2lvbl9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3VybF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21ldGhvZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lYCBjYWxsYmFjayBlcnJvcgBVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNlcnZlcgBJbnZhbGlkIGhlYWRlciB2YWx1ZSBjaGFyAEludmFsaWQgaGVhZGVyIGZpZWxkIGNoYXIAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl92ZXJzaW9uAEludmFsaWQgbWlub3IgdmVyc2lvbgBJbnZhbGlkIG1ham9yIHZlcnNpb24ARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgdmVyc2lvbgBFeHBlY3RlZCBDUkxGIGFmdGVyIHZlcnNpb24ASW52YWxpZCBIVFRQIHZlcnNpb24ASW52YWxpZCBoZWFkZXIgdG9rZW4AU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl91cmwASW52YWxpZCBjaGFyYWN0ZXJzIGluIHVybABVbmV4cGVjdGVkIHN0YXJ0IGNoYXIgaW4gdXJsAERvdWJsZSBAIGluIHVybABFbXB0eSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXJhY3RlciBpbiBDb250ZW50LUxlbmd0aABEdXBsaWNhdGUgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyIGluIHVybCBwYXRoAENvbnRlbnQtTGVuZ3RoIGNhbid0IGJlIHByZXNlbnQgd2l0aCBUcmFuc2Zlci1FbmNvZGluZwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBzaXplAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX3ZhbHVlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgdmFsdWUATWlzc2luZyBleHBlY3RlZCBMRiBhZnRlciBoZWFkZXIgdmFsdWUASW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGVkIHZhbHVlAFBhdXNlZCBieSBvbl9oZWFkZXJzX2NvbXBsZXRlAEludmFsaWQgRU9GIHN0YXRlAG9uX3Jlc2V0IHBhdXNlAG9uX2NodW5rX2hlYWRlciBwYXVzZQBvbl9tZXNzYWdlX2JlZ2luIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZSBwYXVzZQBvbl9zdGF0dXNfY29tcGxldGUgcGF1c2UAb25fdmVyc2lvbl9jb21wbGV0ZSBwYXVzZQBvbl91cmxfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX3ZhbHVlX2NvbXBsZXRlIHBhdXNlAG9uX21lc3NhZ2VfY29tcGxldGUgcGF1c2UAb25fbWV0aG9kX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl9maWVsZF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fbmFtZSBwYXVzZQBVbmV4cGVjdGVkIHNwYWNlIGFmdGVyIHN0YXJ0IGxpbmUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fbmFtZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIG5hbWUAUGF1c2Ugb24gQ09OTkVDVC9VcGdyYWRlAFBhdXNlIG9uIFBSSS9VcGdyYWRlAEV4cGVjdGVkIEhUVFAvMiBDb25uZWN0aW9uIFByZWZhY2UAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9tZXRob2QARXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgbWV0aG9kAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25faGVhZGVyX2ZpZWxkAFBhdXNlZABJbnZhbGlkIHdvcmQgZW5jb3VudGVyZWQASW52YWxpZCBtZXRob2QgZW5jb3VudGVyZWQAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzY2hlbWEAUmVxdWVzdCBoYXMgaW52YWxpZCBgVHJhbnNmZXItRW5jb2RpbmdgAFNXSVRDSF9QUk9YWQBVU0VfUFJPWFkATUtBQ1RJVklUWQBVTlBST0NFU1NBQkxFX0VOVElUWQBDT1BZAE1PVkVEX1BFUk1BTkVOVExZAFRPT19FQVJMWQBOT1RJRlkARkFJTEVEX0RFUEVOREVOQ1kAQkFEX0dBVEVXQVkAUExBWQBQVVQAQ0hFQ0tPVVQAR0FURVdBWV9USU1FT1VUAFJFUVVFU1RfVElNRU9VVABORVRXT1JLX0NPTk5FQ1RfVElNRU9VVABDT05ORUNUSU9OX1RJTUVPVVQATE9HSU5fVElNRU9VVABORVRXT1JLX1JFQURfVElNRU9VVABQT1NUAE1JU0RJUkVDVEVEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfTE9BRF9CQUxBTkNFRF9SRVFVRVNUAEJBRF9SRVFVRVNUAEhUVFBfUkVRVUVTVF9TRU5UX1RPX0hUVFBTX1BPUlQAUkVQT1JUAElNX0FfVEVBUE9UAFJFU0VUX0NPTlRFTlQATk9fQ09OVEVOVABQQVJUSUFMX0NPTlRFTlQASFBFX0lOVkFMSURfQ09OU1RBTlQASFBFX0NCX1JFU0VUAEdFVABIUEVfU1RSSUNUAENPTkZMSUNUAFRFTVBPUkFSWV9SRURJUkVDVABQRVJNQU5FTlRfUkVESVJFQ1QAQ09OTkVDVABNVUxUSV9TVEFUVVMASFBFX0lOVkFMSURfU1RBVFVTAFRPT19NQU5ZX1JFUVVFU1RTAEVBUkxZX0hJTlRTAFVOQVZBSUxBQkxFX0ZPUl9MRUdBTF9SRUFTT05TAE9QVElPTlMAU1dJVENISU5HX1BST1RPQ09MUwBWQVJJQU5UX0FMU09fTkVHT1RJQVRFUwBNVUxUSVBMRV9DSE9JQ0VTAElOVEVSTkFMX1NFUlZFUl9FUlJPUgBXRUJfU0VSVkVSX1VOS05PV05fRVJST1IAUkFJTEdVTl9FUlJPUgBJREVOVElUWV9QUk9WSURFUl9BVVRIRU5USUNBVElPTl9FUlJPUgBTU0xfQ0VSVElGSUNBVEVfRVJST1IASU5WQUxJRF9YX0ZPUldBUkRFRF9GT1IAU0VUX1BBUkFNRVRFUgBHRVRfUEFSQU1FVEVSAEhQRV9VU0VSAFNFRV9PVEhFUgBIUEVfQ0JfQ0hVTktfSEVBREVSAE1LQ0FMRU5EQVIAU0VUVVAAV0VCX1NFUlZFUl9JU19ET1dOAFRFQVJET1dOAEhQRV9DTE9TRURfQ09OTkVDVElPTgBIRVVSSVNUSUNfRVhQSVJBVElPTgBESVNDT05ORUNURURfT1BFUkFUSU9OAE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OAEhQRV9JTlZBTElEX1ZFUlNJT04ASFBFX0NCX01FU1NBR0VfQkVHSU4AU0lURV9JU19GUk9aRU4ASFBFX0lOVkFMSURfSEVBREVSX1RPS0VOAElOVkFMSURfVE9LRU4ARk9SQklEREVOAEVOSEFOQ0VfWU9VUl9DQUxNAEhQRV9JTlZBTElEX1VSTABCTE9DS0VEX0JZX1BBUkVOVEFMX0NPTlRST0wATUtDT0wAQUNMAEhQRV9JTlRFUk5BTABSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFX1VOT0ZGSUNJQUwASFBFX09LAFVOTElOSwBVTkxPQ0sAUFJJAFJFVFJZX1dJVEgASFBFX0lOVkFMSURfQ09OVEVOVF9MRU5HVEgASFBFX1VORVhQRUNURURfQ09OVEVOVF9MRU5HVEgARkxVU0gAUFJPUFBBVENIAE0tU0VBUkNIAFVSSV9UT09fTE9ORwBQUk9DRVNTSU5HAE1JU0NFTExBTkVPVVNfUEVSU0lTVEVOVF9XQVJOSU5HAE1JU0NFTExBTkVPVVNfV0FSTklORwBIUEVfSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElORwBFeHBlY3RlZCBDUkxGAEhQRV9JTlZBTElEX0NIVU5LX1NJWkUATU9WRQBDT05USU5VRQBIUEVfQ0JfU1RBVFVTX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJTX0NPTVBMRVRFAEhQRV9DQl9WRVJTSU9OX0NPTVBMRVRFAEhQRV9DQl9VUkxfQ09NUExFVEUASFBFX0NCX0NIVU5LX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX05BTUVfQ09NUExFVEUASFBFX0NCX01FU1NBR0VfQ09NUExFVEUASFBFX0NCX01FVEhPRF9DT01QTEVURQBIUEVfQ0JfSEVBREVSX0ZJRUxEX0NPTVBMRVRFAERFTEVURQBIUEVfSU5WQUxJRF9FT0ZfU1RBVEUASU5WQUxJRF9TU0xfQ0VSVElGSUNBVEUAUEFVU0UATk9fUkVTUE9OU0UAVU5TVVBQT1JURURfTUVESUFfVFlQRQBHT05FAE5PVF9BQ0NFUFRBQkxFAFNFUlZJQ0VfVU5BVkFJTEFCTEUAUkFOR0VfTk9UX1NBVElTRklBQkxFAE9SSUdJTl9JU19VTlJFQUNIQUJMRQBSRVNQT05TRV9JU19TVEFMRQBQVVJHRQBNRVJHRQBSRVFVRVNUX0hFQURFUl9GSUVMRFNfVE9PX0xBUkdFAFJFUVVFU1RfSEVBREVSX1RPT19MQVJHRQBQQVlMT0FEX1RPT19MQVJHRQBJTlNVRkZJQ0lFTlRfU1RPUkFHRQBIUEVfUEFVU0VEX1VQR1JBREUASFBFX1BBVVNFRF9IMl9VUEdSQURFAFNPVVJDRQBBTk5PVU5DRQBUUkFDRQBIUEVfVU5FWFBFQ1RFRF9TUEFDRQBERVNDUklCRQBVTlNVQlNDUklCRQBSRUNPUkQASFBFX0lOVkFMSURfTUVUSE9EAE5PVF9GT1VORABQUk9QRklORABVTkJJTkQAUkVCSU5EAFVOQVVUSE9SSVpFRABNRVRIT0RfTk9UX0FMTE9XRUQASFRUUF9WRVJTSU9OX05PVF9TVVBQT1JURUQAQUxSRUFEWV9SRVBPUlRFRABBQ0NFUFRFRABOT1RfSU1QTEVNRU5URUQATE9PUF9ERVRFQ1RFRABIUEVfQ1JfRVhQRUNURUQASFBFX0xGX0VYUEVDVEVEAENSRUFURUQASU1fVVNFRABIUEVfUEFVU0VEAFRJTUVPVVRfT0NDVVJFRABQQVlNRU5UX1JFUVVJUkVEAFBSRUNPTkRJVElPTl9SRVFVSVJFRABQUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRABORVRXT1JLX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAExFTkdUSF9SRVFVSVJFRABTU0xfQ0VSVElGSUNBVEVfUkVRVUlSRUQAVVBHUkFERV9SRVFVSVJFRABQQUdFX0VYUElSRUQAUFJFQ09ORElUSU9OX0ZBSUxFRABFWFBFQ1RBVElPTl9GQUlMRUQAUkVWQUxJREFUSU9OX0ZBSUxFRABTU0xfSEFORFNIQUtFX0ZBSUxFRABMT0NLRUQAVFJBTlNGT1JNQVRJT05fQVBQTElFRABOT1RfTU9ESUZJRUQATk9UX0VYVEVOREVEAEJBTkRXSURUSF9MSU1JVF9FWENFRURFRABTSVRFX0lTX09WRVJMT0FERUQASEVBRABFeHBlY3RlZCBIVFRQLwAAXhMAACYTAAAwEAAA8BcAAJ0TAAAVEgAAORcAAPASAAAKEAAAdRIAAK0SAACCEwAATxQAAH8QAACgFQAAIxQAAIkSAACLFAAATRUAANQRAADPFAAAEBgAAMkWAADcFgAAwREAAOAXAAC7FAAAdBQAAHwVAADlFAAACBcAAB8QAABlFQAAoxQAACgVAAACFQAAmRUAACwQAACLGQAATw8AANQOAABqEAAAzhAAAAIXAACJDgAAbhMAABwTAABmFAAAVhcAAMETAADNEwAAbBMAAGgXAABmFwAAXxcAACITAADODwAAaQ4AANgOAABjFgAAyxMAAKoOAAAoFwAAJhcAAMUTAABdFgAA6BEAAGcTAABlEwAA8hYAAHMTAAAdFwAA+RYAAPMRAADPDgAAzhUAAAwSAACzEQAApREAAGEQAAAyFwAAuxMAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIDAgICAgIAAAICAAICAAICAgICAgICAgIABAAAAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbG9zZWVlcC1hbGl2ZQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAQEBAQEAAAEBAAEBAAEBAQEBAQEBAQEAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AAAAAAAAAAAAAAAAAAAByYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AAAAAAAAAAAAAAAABAgABAwAAAAAAAAAAAAAAAAAAAAAAAAQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAQIAAQMAAAAAAAAAAAAAAAAAAAAAAAAEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAAAAQAAAgAAAAAAAAAAAAAAAAAAAAAAAAMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAIAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOT1VOQ0VFQ0tPVVRORUNURVRFQ1JJQkVMVVNIRVRFQURTRUFSQ0hSR0VDVElWSVRZTEVOREFSVkVPVElGWVBUSU9OU0NIU0VBWVNUQVRDSEdFT1JESVJFQ1RPUlRSQ0hQQVJBTUVURVJVUkNFQlNDUklCRUFSRE9XTkFDRUlORE5LQ0tVQlNDUklCRUhUVFAvQURUUC8="},5627:e=>{e.exports="AGFzbQEAAAABMAhgAX8Bf2ADf39/AX9gBH9/f38Bf2AAAGADf39/AGABfwBgAn9/AGAGf39/f39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQACA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAA0ZFAwMEAAAFAAAAAAAABQEFAAUFBQAABgAAAAAGBgYGAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAABAQcAAAUFAwABBAUBcAESEgUDAQACBggBfwFBgNQECwfRBSIGbWVtb3J5AgALX2luaXRpYWxpemUACRlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQALbGxodHRwX2luaXQAChhsbGh0dHBfc2hvdWxkX2tlZXBfYWxpdmUAQQxsbGh0dHBfYWxsb2MADAZtYWxsb2MARgtsbGh0dHBfZnJlZQANBGZyZWUASA9sbGh0dHBfZ2V0X3R5cGUADhVsbGh0dHBfZ2V0X2h0dHBfbWFqb3IADxVsbGh0dHBfZ2V0X2h0dHBfbWlub3IAEBFsbGh0dHBfZ2V0X21ldGhvZAARFmxsaHR0cF9nZXRfc3RhdHVzX2NvZGUAEhJsbGh0dHBfZ2V0X3VwZ3JhZGUAEwxsbGh0dHBfcmVzZXQAFA5sbGh0dHBfZXhlY3V0ZQAVFGxsaHR0cF9zZXR0aW5nc19pbml0ABYNbGxodHRwX2ZpbmlzaAAXDGxsaHR0cF9wYXVzZQAYDWxsaHR0cF9yZXN1bWUAGRtsbGh0dHBfcmVzdW1lX2FmdGVyX3VwZ3JhZGUAGhBsbGh0dHBfZ2V0X2Vycm5vABsXbGxodHRwX2dldF9lcnJvcl9yZWFzb24AHBdsbGh0dHBfc2V0X2Vycm9yX3JlYXNvbgAdFGxsaHR0cF9nZXRfZXJyb3JfcG9zAB4RbGxodHRwX2Vycm5vX25hbWUAHxJsbGh0dHBfbWV0aG9kX25hbWUAIBJs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IAH9CwMAIABBMGogAf0LAwAgAEEgaiAB/QsDACAAQd0BNgIcQQALewEBfwJAIAAoAgwiAw0AAkAgACgCBEUNACAAIAE2AgQLAkAgACABIAIQxICAgAAiAw0AIAAoAgwPCyAAIAM2AhxBACEDIAAoAgQiAUUNACAAIAEgAiAAKAIIEYGAgIAAACIBRQ0AIAAgAjYCFCAAIAE2AgwgASEDCyADC+TzAQMOfwN+BH8jgICAgABBEGsiAySAgICAACABIQQgASEFIAEhBiABIQcgASEIIAEhCSABIQogASELIAEhDCABIQ0gASEOIAEhDwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAKAIcIhBBf2oO3QHaAQHZAQIDBAUGBwgJCgsMDQ7YAQ8Q1wEREtYBExQVFhcYGRob4AHfARwdHtUBHyAhIiMkJdQBJicoKSorLNMB0gEtLtEB0AEvMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUbbAUdISUrPAc4BS80BTMwBTU5PUFFSU1RVVldYWVpbXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEB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QAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIBAOxwEAAQID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YWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsb3NlZWVwLWFsaXZlAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgAAAAAAAAAAAAAAAAAAAHJhbnNmZXItZW5jb2RpbmdwZ3JhZGUNCg0KDQpTTQ0KDQpUVFAvQ0UvVFNQLwAAAAAAAAAAAAAAAAECAAEDAAAAAAAAAAAAAAAAAAAAAAAABAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAAAAAAABAgABAwAAAAAAAAAAAAAAAAAAAAAAAAQBAQUBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAAAAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAAAAAAAABAAACAAAAAAAAAAAAAAAAAAAAAAAAAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAgAAAAACAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw=="},1891:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.enumToMap=void 0;function enumToMap(e){const t={};Object.keys(e).forEach((n=>{const s=e[n];if(typeof s==="number"){t[n]=s}}));return t}t.enumToMap=enumToMap},6771:(e,t,n)=>{"use strict";const{kClients:s}=n(2785);const i=n(7890);const{kAgent:r,kMockAgentSet:o,kMockAgentGet:A,kDispatches:a,kIsMockActive:c,kNetConnect:u,kGetNetConnect:l,kOptions:d,kFactory:p}=n(4347);const g=n(8687);const h=n(6193);const{matchValue:f,buildMockOptions:E}=n(9323);const{InvalidArgumentError:m,UndiciError:C}=n(8045);const Q=n(412);const I=n(8891);const B=n(6823);class FakeWeakRef{constructor(e){this.value=e}deref(){return this.value}}class MockAgent extends Q{constructor(e){super(e);this[u]=true;this[c]=true;if(e&&e.agent&&typeof e.agent.dispatch!=="function"){throw new m("Argument opts.agent must implement Agent")}const t=e&&e.agent?e.agent:new i(e);this[r]=t;this[s]=t[s];this[d]=E(e)}get(e){let t=this[A](e);if(!t){t=this[p](e);this[o](e,t)}return t}dispatch(e,t){this.get(e.origin);return this[r].dispatch(e,t)}async close(){await this[r].close();this[s].clear()}deactivate(){this[c]=false}activate(){this[c]=true}enableNetConnect(e){if(typeof e==="string"||typeof e==="function"||e instanceof RegExp){if(Array.isArray(this[u])){this[u].push(e)}else{this[u]=[e]}}else if(typeof e==="undefined"){this[u]=true}else{throw new m("Unsupported matcher. Must be one of String|Function|RegExp.")}}disableNetConnect(){this[u]=false}get isMockActive(){return this[c]}[o](e,t){this[s].set(e,new FakeWeakRef(t))}[p](e){const t=Object.assign({agent:this},this[d]);return this[d]&&this[d].connections===1?new g(e,t):new h(e,t)}[A](e){const t=this[s].get(e);if(t){return t.deref()}if(typeof e!=="string"){const t=this[p]("http://localhost:9999");this[o](e,t);return t}for(const[t,n]of Array.from(this[s])){const s=n.deref();if(s&&typeof t!=="string"&&f(t,e)){const t=this[p](e);this[o](e,t);t[a]=s[a];return t}}}[l](){return this[u]}pendingInterceptors(){const e=this[s];return Array.from(e.entries()).flatMap((([e,t])=>t.deref()[a].map((t=>({...t,origin:e}))))).filter((({pending:e})=>e))}assertNoPendingInterceptors({pendingInterceptorsFormatter:e=new B}={}){const t=this.pendingInterceptors();if(t.length===0){return}const n=new I("interceptor","interceptors").pluralize(t.length);throw new C(`\n${n.count} ${n.noun} ${n.is} pending:\n\n${e.format(t)}\n`.trim())}}e.exports=MockAgent},8687:(e,t,n)=>{"use strict";const{promisify:s}=n(3837);const i=n(3598);const{buildMockDispatch:r}=n(9323);const{kDispatches:o,kMockAgent:A,kClose:a,kOriginalClose:c,kOrigin:u,kOriginalDispatch:l,kConnected:d}=n(4347);const{MockInterceptor:p}=n(410);const g=n(2785);const{InvalidArgumentError:h}=n(8045);class MockClient extends i{constructor(e,t){super(e,t);if(!t||!t.agent||typeof t.agent.dispatch!=="function"){throw new h("Argument opts.agent must implement Agent")}this[A]=t.agent;this[u]=e;this[o]=[];this[d]=1;this[l]=this.dispatch;this[c]=this.close.bind(this);this.dispatch=r.call(this);this.close=this[a]}get[g.kConnected](){return this[d]}intercept(e){return new p(e,this[o])}async[a](){await s(this[c])();this[d]=0;this[A][g.kClients].delete(this[u])}}e.exports=MockClient},888:(e,t,n)=>{"use strict";const{UndiciError:s}=n(8045);class MockNotMatchedError extends s{constructor(e){super(e);Error.captureStackTrace(this,MockNotMatchedError);this.name="MockNotMatchedError";this.message=e||"The request does not match any registered mock dispatches";this.code="UND_MOCK_ERR_MOCK_NOT_MATCHED"}}e.exports={MockNotMatchedError:MockNotMatchedError}},410:(e,t,n)=>{"use strict";const{getResponseData:s,buildKey:i,addMockDispatch:r}=n(9323);const{kDispatches:o,kDispatchKey:A,kDefaultHeaders:a,kDefaultTrailers:c,kContentLength:u,kMockDispatch:l}=n(4347);const{InvalidArgumentError:d}=n(8045);const{buildURL:p}=n(3983);class MockScope{constructor(e){this[l]=e}delay(e){if(typeof e!=="number"||!Number.isInteger(e)||e<=0){throw new d("waitInMs must be a valid integer > 0")}this[l].delay=e;return this}persist(){this[l].persist=true;return this}times(e){if(typeof e!=="number"||!Number.isInteger(e)||e<=0){throw new d("repeatTimes must be a valid integer > 0")}this[l].times=e;return this}}class MockInterceptor{constructor(e,t){if(typeof e!=="object"){throw new d("opts must be an object")}if(typeof e.path==="undefined"){throw new d("opts.path must be defined")}if(typeof e.method==="undefined"){e.method="GET"}if(typeof e.path==="string"){if(e.query){e.path=p(e.path,e.query)}else{const t=new URL(e.path,"data://");e.path=t.pathname+t.search}}if(typeof e.method==="string"){e.method=e.method.toUpperCase()}this[A]=i(e);this[o]=t;this[a]={};this[c]={};this[u]=false}createMockScopeDispatchData(e,t,n={}){const i=s(t);const r=this[u]?{"content-length":i.length}:{};const o={...this[a],...r,...n.headers};const A={...this[c],...n.trailers};return{statusCode:e,data:t,headers:o,trailers:A}}validateReplyParameters(e,t,n){if(typeof e==="undefined"){throw new d("statusCode must be defined")}if(typeof t==="undefined"){throw new d("data must be defined")}if(typeof n!=="object"){throw new d("responseOptions must be an object")}}reply(e){if(typeof e==="function"){const wrappedDefaultsCallback=t=>{const n=e(t);if(typeof n!=="object"){throw new d("reply options callback must return an object")}const{statusCode:s,data:i="",responseOptions:r={}}=n;this.validateReplyParameters(s,i,r);return{...this.createMockScopeDispatchData(s,i,r)}};const t=r(this[o],this[A],wrappedDefaultsCallback);return new MockScope(t)}const[t,n="",s={}]=[...arguments];this.validateReplyParameters(t,n,s);const i=this.createMockScopeDispatchData(t,n,s);const a=r(this[o],this[A],i);return new MockScope(a)}replyWithError(e){if(typeof e==="undefined"){throw new d("error must be defined")}const t=r(this[o],this[A],{error:e});return new MockScope(t)}defaultReplyHeaders(e){if(typeof e==="undefined"){throw new d("headers must be defined")}this[a]=e;return this}defaultReplyTrailers(e){if(typeof e==="undefined"){throw new d("trailers must be defined")}this[c]=e;return this}replyContentLength(){this[u]=true;return this}}e.exports.MockInterceptor=MockInterceptor;e.exports.MockScope=MockScope},6193:(e,t,n)=>{"use strict";const{promisify:s}=n(3837);const i=n(4634);const{buildMockDispatch:r}=n(9323);const{kDispatches:o,kMockAgent:A,kClose:a,kOriginalClose:c,kOrigin:u,kOriginalDispatch:l,kConnected:d}=n(4347);const{MockInterceptor:p}=n(410);const g=n(2785);const{InvalidArgumentError:h}=n(8045);class MockPool extends i{constructor(e,t){super(e,t);if(!t||!t.agent||typeof t.agent.dispatch!=="function"){throw new h("Argument opts.agent must implement Agent")}this[A]=t.agent;this[u]=e;this[o]=[];this[d]=1;this[l]=this.dispatch;this[c]=this.close.bind(this);this.dispatch=r.call(this);this.close=this[a]}get[g.kConnected](){return this[d]}intercept(e){return new p(e,this[o])}async[a](){await s(this[c])();this[d]=0;this[A][g.kClients].delete(this[u])}}e.exports=MockPool},4347:e=>{"use strict";e.exports={kAgent:Symbol("agent"),kOptions:Symbol("options"),kFactory:Symbol("factory"),kDispatches:Symbol("dispatches"),kDispatchKey:Symbol("dispatch key"),kDefaultHeaders:Symbol("default headers"),kDefaultTrailers:Symbol("default trailers"),kContentLength:Symbol("content length"),kMockAgent:Symbol("mock agent"),kMockAgentSet:Symbol("mock agent set"),kMockAgentGet:Symbol("mock agent get"),kMockDispatch:Symbol("mock dispatch"),kClose:Symbol("close"),kOriginalClose:Symbol("original agent close"),kOrigin:Symbol("origin"),kIsMockActive:Symbol("is mock active"),kNetConnect:Symbol("net connect"),kGetNetConnect:Symbol("get net connect"),kConnected:Symbol("connected")}},9323:(e,t,n)=>{"use strict";const{MockNotMatchedError:s}=n(888);const{kDispatches:i,kMockAgent:r,kOriginalDispatch:o,kOrigin:A,kGetNetConnect:a}=n(4347);const{buildURL:c,nop:u}=n(3983);const{STATUS_CODES:l}=n(3685);const{types:{isPromise:d}}=n(3837);function matchValue(e,t){if(typeof e==="string"){return e===t}if(e instanceof RegExp){return e.test(t)}if(typeof e==="function"){return e(t)===true}return false}function lowerCaseEntries(e){return Object.fromEntries(Object.entries(e).map((([e,t])=>[e.toLocaleLowerCase(),t])))}function getHeaderByName(e,t){if(Array.isArray(e)){for(let n=0;n!e)).filter((({path:e})=>matchValue(safeUrl(e),i)));if(r.length===0){throw new s(`Mock dispatch not matched for path '${i}'`)}r=r.filter((({method:e})=>matchValue(e,t.method)));if(r.length===0){throw new s(`Mock dispatch not matched for method '${t.method}'`)}r=r.filter((({body:e})=>typeof e!=="undefined"?matchValue(e,t.body):true));if(r.length===0){throw new s(`Mock dispatch not matched for body '${t.body}'`)}r=r.filter((e=>matchHeaders(e,t.headers)));if(r.length===0){throw new s(`Mock dispatch not matched for headers '${typeof t.headers==="object"?JSON.stringify(t.headers):t.headers}'`)}return r[0]}function addMockDispatch(e,t,n){const s={timesInvoked:0,times:1,persist:false,consumed:false};const i=typeof n==="function"?{callback:n}:{...n};const r={...s,...t,pending:true,data:{error:null,...i}};e.push(r);return r}function deleteMockDispatch(e,t){const n=e.findIndex((e=>{if(!e.consumed){return false}return matchKey(e,t)}));if(n!==-1){e.splice(n,1)}}function buildKey(e){const{path:t,method:n,body:s,headers:i,query:r}=e;return{path:t,method:n,body:s,headers:i,query:r}}function generateKeyValues(e){return Object.entries(e).reduce(((e,[t,n])=>[...e,Buffer.from(`${t}`),Array.isArray(n)?n.map((e=>Buffer.from(`${e}`))):Buffer.from(`${n}`)]),[])}function getStatusText(e){return l[e]||"unknown"}async function getResponse(e){const t=[];for await(const n of e){t.push(n)}return Buffer.concat(t).toString("utf8")}function mockDispatch(e,t){const n=buildKey(e);const s=getMockDispatch(this[i],n);s.timesInvoked++;if(s.data.callback){s.data={...s.data,...s.data.callback(e)}}const{data:{statusCode:r,data:o,headers:A,trailers:a,error:c},delay:l,persist:p}=s;const{timesInvoked:g,times:h}=s;s.consumed=!p&&g>=h;s.pending=g0){setTimeout((()=>{handleReply(this[i])}),l)}else{handleReply(this[i])}function handleReply(s,i=o){const c=Array.isArray(e.headers)?buildHeadersFromArray(e.headers):e.headers;const l=typeof i==="function"?i({...e,headers:c}):i;if(d(l)){l.then((e=>handleReply(s,e)));return}const p=getResponseData(l);const g=generateKeyValues(A);const h=generateKeyValues(a);t.abort=u;t.onHeaders(r,g,resume,getStatusText(r));t.onData(Buffer.from(p));t.onComplete(h);deleteMockDispatch(s,n)}function resume(){}return true}function buildMockDispatch(){const e=this[r];const t=this[A];const n=this[o];return function dispatch(i,r){if(e.isMockActive){try{mockDispatch.call(this,i,r)}catch(o){if(o instanceof s){const A=e[a]();if(A===false){throw new s(`${o.message}: subsequent request to origin ${t} was not allowed (net.connect disabled)`)}if(checkNetConnect(A,t)){n.call(this,i,r)}else{throw new s(`${o.message}: subsequent request to origin ${t} was not allowed (net.connect is not enabled for this origin)`)}}else{throw o}}}else{n.call(this,i,r)}}}function checkNetConnect(e,t){const n=new URL(t);if(e===true){return true}else if(Array.isArray(e)&&e.some((e=>matchValue(e,n.host)))){return true}return false}function buildMockOptions(e){if(e){const{agent:t,...n}=e;return n}}e.exports={getResponseData:getResponseData,getMockDispatch:getMockDispatch,addMockDispatch:addMockDispatch,deleteMockDispatch:deleteMockDispatch,buildKey:buildKey,generateKeyValues:generateKeyValues,matchValue:matchValue,getResponse:getResponse,getStatusText:getStatusText,mockDispatch:mockDispatch,buildMockDispatch:buildMockDispatch,checkNetConnect:checkNetConnect,buildMockOptions:buildMockOptions,getHeaderByName:getHeaderByName}},6823:(e,t,n)=>{"use strict";const{Transform:s}=n(2781);const{Console:i}=n(6206);e.exports=class PendingInterceptorsFormatter{constructor({disableColors:e}={}){this.transform=new s({transform(e,t,n){n(null,e)}});this.logger=new i({stdout:this.transform,inspectOptions:{colors:!e&&!process.env.CI}})}format(e){const t=e.map((({method:e,path:t,data:{statusCode:n},persist:s,times:i,timesInvoked:r,origin:o})=>({Method:e,Origin:o,Path:t,"Status code":n,Persistent:s?"✅":"❌",Invocations:r,Remaining:s?Infinity:i-r})));this.logger.table(t);return this.transform.read().toString()}}},8891:e=>{"use strict";const t={pronoun:"it",is:"is",was:"was",this:"this"};const n={pronoun:"they",is:"are",was:"were",this:"these"};e.exports=class Pluralizer{constructor(e,t){this.singular=e;this.plural=t}pluralize(e){const s=e===1;const i=s?t:n;const r=s?this.singular:this.plural;return{...i,count:e,noun:r}}}},8266:e=>{"use strict";const t=2048;const n=t-1;class FixedCircularBuffer{constructor(){this.bottom=0;this.top=0;this.list=new Array(t);this.next=null}isEmpty(){return this.top===this.bottom}isFull(){return(this.top+1&n)===this.bottom}push(e){this.list[this.top]=e;this.top=this.top+1&n}shift(){const e=this.list[this.bottom];if(e===undefined)return null;this.list[this.bottom]=undefined;this.bottom=this.bottom+1&n;return e}}e.exports=class FixedQueue{constructor(){this.head=this.tail=new FixedCircularBuffer}isEmpty(){return this.head.isEmpty()}push(e){if(this.head.isFull()){this.head=this.head.next=new FixedCircularBuffer}this.head.push(e)}shift(){const e=this.tail;const t=e.shift();if(e.isEmpty()&&e.next!==null){this.tail=e.next}return t}}},3198:(e,t,n)=>{"use strict";const s=n(4839);const i=n(8266);const{kConnected:r,kSize:o,kRunning:A,kPending:a,kQueued:c,kBusy:u,kFree:l,kUrl:d,kClose:p,kDestroy:g,kDispatch:h}=n(2785);const f=n(9689);const E=Symbol("clients");const m=Symbol("needDrain");const C=Symbol("queue");const Q=Symbol("closed resolve");const I=Symbol("onDrain");const B=Symbol("onConnect");const y=Symbol("onDisconnect");const b=Symbol("onConnectionError");const w=Symbol("get dispatcher");const R=Symbol("add client");const v=Symbol("remove client");const k=Symbol("stats");class PoolBase extends s{constructor(){super();this[C]=new i;this[E]=[];this[c]=0;const e=this;this[I]=function onDrain(t,n){const s=e[C];let i=false;while(!i){const t=s.shift();if(!t){break}e[c]--;i=!this.dispatch(t.opts,t.handler)}this[m]=i;if(!this[m]&&e[m]){e[m]=false;e.emit("drain",t,[e,...n])}if(e[Q]&&s.isEmpty()){Promise.all(e[E].map((e=>e.close()))).then(e[Q])}};this[B]=(t,n)=>{e.emit("connect",t,[e,...n])};this[y]=(t,n,s)=>{e.emit("disconnect",t,[e,...n],s)};this[b]=(t,n,s)=>{e.emit("connectionError",t,[e,...n],s)};this[k]=new f(this)}get[u](){return this[m]}get[r](){return this[E].filter((e=>e[r])).length}get[l](){return this[E].filter((e=>e[r]&&!e[m])).length}get[a](){let e=this[c];for(const{[a]:t}of this[E]){e+=t}return e}get[A](){let e=0;for(const{[A]:t}of this[E]){e+=t}return e}get[o](){let e=this[c];for(const{[o]:t}of this[E]){e+=t}return e}get stats(){return this[k]}async[p](){if(this[C].isEmpty()){return Promise.all(this[E].map((e=>e.close())))}else{return new Promise((e=>{this[Q]=e}))}}async[g](e){while(true){const t=this[C].shift();if(!t){break}t.handler.onError(e)}return Promise.all(this[E].map((t=>t.destroy(e))))}[h](e,t){const n=this[w]();if(!n){this[m]=true;this[C].push({opts:e,handler:t});this[c]++}else if(!n.dispatch(e,t)){n[m]=true;this[m]=!this[w]()}return!this[m]}[R](e){e.on("drain",this[I]).on("connect",this[B]).on("disconnect",this[y]).on("connectionError",this[b]);this[E].push(e);if(this[m]){process.nextTick((()=>{if(this[m]){this[I](e[d],[this,e])}}))}return this}[v](e){e.close((()=>{const t=this[E].indexOf(e);if(t!==-1){this[E].splice(t,1)}}));this[m]=this[E].some((e=>!e[m]&&e.closed!==true&&e.destroyed!==true))}}e.exports={PoolBase:PoolBase,kClients:E,kNeedDrain:m,kAddClient:R,kRemoveClient:v,kGetDispatcher:w}},9689:(e,t,n)=>{const{kFree:s,kConnected:i,kPending:r,kQueued:o,kRunning:A,kSize:a}=n(2785);const c=Symbol("pool");class PoolStats{constructor(e){this[c]=e}get connected(){return this[c][i]}get free(){return this[c][s]}get pending(){return this[c][r]}get queued(){return this[c][o]}get running(){return this[c][A]}get size(){return this[c][a]}}e.exports=PoolStats},4634:(e,t,n)=>{"use strict";const{PoolBase:s,kClients:i,kNeedDrain:r,kAddClient:o,kGetDispatcher:A}=n(3198);const a=n(3598);const{InvalidArgumentError:c}=n(8045);const u=n(3983);const{kUrl:l,kInterceptors:d}=n(2785);const p=n(2067);const g=Symbol("options");const h=Symbol("connections");const f=Symbol("factory");function defaultFactory(e,t){return new a(e,t)}class Pool extends s{constructor(e,{connections:t,factory:n=defaultFactory,connect:s,connectTimeout:i,tls:r,maxCachedSessions:o,socketPath:A,autoSelectFamily:a,autoSelectFamilyAttemptTimeout:E,allowH2:m,...C}={}){super();if(t!=null&&(!Number.isFinite(t)||t<0)){throw new c("invalid connections")}if(typeof n!=="function"){throw new c("factory must be a function.")}if(s!=null&&typeof s!=="function"&&typeof s!=="object"){throw new c("connect must be a function or an object")}if(typeof s!=="function"){s=p({...r,maxCachedSessions:o,allowH2:m,socketPath:A,timeout:i==null?1e4:i,...u.nodeHasAutoSelectFamily&&a?{autoSelectFamily:a,autoSelectFamilyAttemptTimeout:E}:undefined,...s})}this[d]=C.interceptors&&C.interceptors.Pool&&Array.isArray(C.interceptors.Pool)?C.interceptors.Pool:[];this[h]=t||null;this[l]=u.parseOrigin(e);this[g]={...u.deepClone(C),connect:s,allowH2:m};this[g].interceptors=C.interceptors?{...C.interceptors}:undefined;this[f]=n}[A](){let e=this[i].find((e=>!e[r]));if(e){return e}if(!this[h]||this[i].length{"use strict";const{kProxy:s,kClose:i,kDestroy:r,kInterceptors:o}=n(2785);const{URL:A}=n(7310);const a=n(7890);const c=n(4634);const u=n(4839);const{InvalidArgumentError:l,RequestAbortedError:d}=n(8045);const p=n(2067);const g=Symbol("proxy agent");const h=Symbol("proxy client");const f=Symbol("proxy headers");const E=Symbol("request tls settings");const m=Symbol("proxy tls settings");const C=Symbol("connect endpoint function");function defaultProtocolPort(e){return e==="https:"?443:80}function buildProxyOptions(e){if(typeof e==="string"){e={uri:e}}if(!e||!e.uri){throw new l("Proxy opts.uri is mandatory")}return{uri:e.uri,protocol:e.protocol||"https"}}function defaultFactory(e,t){return new c(e,t)}class ProxyAgent extends u{constructor(e){super(e);this[s]=buildProxyOptions(e);this[g]=new a(e);this[o]=e.interceptors&&e.interceptors.ProxyAgent&&Array.isArray(e.interceptors.ProxyAgent)?e.interceptors.ProxyAgent:[];if(typeof e==="string"){e={uri:e}}if(!e||!e.uri){throw new l("Proxy opts.uri is mandatory")}const{clientFactory:t=defaultFactory}=e;if(typeof t!=="function"){throw new l("Proxy opts.clientFactory must be a function.")}this[E]=e.requestTls;this[m]=e.proxyTls;this[f]=e.headers||{};if(e.auth&&e.token){throw new l("opts.auth cannot be used in combination with opts.token")}else if(e.auth){this[f]["proxy-authorization"]=`Basic ${e.auth}`}else if(e.token){this[f]["proxy-authorization"]=e.token}const n=new A(e.uri);const{origin:i,port:r,host:c}=n;const u=p({...e.proxyTls});this[C]=p({...e.requestTls});this[h]=t(n,{connect:u});this[g]=new a({...e,connect:async(e,t)=>{let n=e.host;if(!e.port){n+=`:${defaultProtocolPort(e.protocol)}`}try{const{socket:s,statusCode:o}=await this[h].connect({origin:i,port:r,path:n,signal:e.signal,headers:{...this[f],host:c}});if(o!==200){s.on("error",(()=>{})).destroy();t(new d("Proxy response !== 200 when HTTP Tunneling"))}if(e.protocol!=="https:"){t(null,s);return}let A;if(this[E]){A=this[E].servername}else{A=e.servername}this[C]({...e,servername:A,httpSocket:s},t)}catch(e){t(e)}}})}dispatch(e,t){const{host:n}=new A(e.origin);const s=buildHeaders(e.headers);throwIfProxyAuthIsSent(s);return this[g].dispatch({...e,headers:{...s,host:n}},t)}async[i](){await this[g].close();await this[h].close()}async[r](){await this[g].destroy();await this[h].destroy()}}function buildHeaders(e){if(Array.isArray(e)){const t={};for(let n=0;ne.toLowerCase()==="proxy-authorization"));if(t){throw new l("Proxy-Authorization should be sent in ProxyAgent constructor")}}e.exports=ProxyAgent},9459:e=>{"use strict";let t=Date.now();let n;const s=[];function onTimeout(){t=Date.now();let e=s.length;let n=0;while(n0&&t>=i.state){i.state=-1;i.callback(i.opaque)}if(i.state===-1){i.state=-2;if(n!==e-1){s[n]=s.pop()}else{s.pop()}e-=1}else{n+=1}}if(s.length>0){refreshTimeout()}}function refreshTimeout(){if(n&&n.refresh){n.refresh()}else{clearTimeout(n);n=setTimeout(onTimeout,1e3);if(n.unref){n.unref()}}}class Timeout{constructor(e,t,n){this.callback=e;this.delay=t;this.opaque=n;this.state=-2;this.refresh()}refresh(){if(this.state===-2){s.push(this);if(!n||s.length===1){refreshTimeout()}}this.state=0}clear(){this.state=-1}}e.exports={setTimeout(e,t,n){return t<1e3?setTimeout(e,t,n):new Timeout(e,t,n)},clearTimeout(e){if(e instanceof Timeout){e.clear()}else{clearTimeout(e)}}}},5354:(e,t,n)=>{"use strict";const s=n(7643);const{uid:i,states:r}=n(9188);const{kReadyState:o,kSentClose:A,kByteParser:a,kReceivedClose:c}=n(7578);const{fireEvent:u,failWebsocketConnection:l}=n(5515);const{CloseEvent:d}=n(2611);const{makeRequest:p}=n(8359);const{fetching:g}=n(4881);const{Headers:h}=n(554);const{getGlobalDispatcher:f}=n(1892);const{kHeadersList:E}=n(2785);const m={};m.open=s.channel("undici:websocket:open");m.close=s.channel("undici:websocket:close");m.socketError=s.channel("undici:websocket:socket_error");let C;try{C=n(6113)}catch{}function establishWebSocketConnection(e,t,n,s,r){const o=e;o.protocol=e.protocol==="ws:"?"http:":"https:";const A=p({urlList:[o],serviceWorkers:"none",referrer:"no-referrer",mode:"websocket",credentials:"include",cache:"no-store",redirect:"error"});if(r.headers){const e=new h(r.headers)[E];A.headersList=e}const a=C.randomBytes(16).toString("base64");A.headersList.append("sec-websocket-key",a);A.headersList.append("sec-websocket-version","13");for(const e of t){A.headersList.append("sec-websocket-protocol",e)}const c="";const u=g({request:A,useParallelQueue:true,dispatcher:r.dispatcher??f(),processResponse(e){if(e.type==="error"||e.status!==101){l(n,"Received network error or non-101 status code.");return}if(t.length!==0&&!e.headersList.get("Sec-WebSocket-Protocol")){l(n,"Server did not respond with sent protocols.");return}if(e.headersList.get("Upgrade")?.toLowerCase()!=="websocket"){l(n,'Server did not set Upgrade header to "websocket".');return}if(e.headersList.get("Connection")?.toLowerCase()!=="upgrade"){l(n,'Server did not set Connection header to "upgrade".');return}const r=e.headersList.get("Sec-WebSocket-Accept");const o=C.createHash("sha1").update(a+i).digest("base64");if(r!==o){l(n,"Incorrect hash received in Sec-WebSocket-Accept header.");return}const u=e.headersList.get("Sec-WebSocket-Extensions");if(u!==null&&u!==c){l(n,"Received different permessage-deflate than the one set.");return}const d=e.headersList.get("Sec-WebSocket-Protocol");if(d!==null&&d!==A.headersList.get("Sec-WebSocket-Protocol")){l(n,"Protocol was not set in the opening handshake.");return}e.socket.on("data",onSocketData);e.socket.on("close",onSocketClose);e.socket.on("error",onSocketError);if(m.open.hasSubscribers){m.open.publish({address:e.socket.address(),protocol:d,extensions:u})}s(e)}});return u}function onSocketData(e){if(!this.ws[a].write(e)){this.pause()}}function onSocketClose(){const{ws:e}=this;const t=e[A]&&e[c];let n=1005;let s="";const i=e[a].closingInfo;if(i){n=i.code??1005;s=i.reason}else if(!e[A]){n=1006}e[o]=r.CLOSED;u("close",e,d,{wasClean:t,code:n,reason:s});if(m.close.hasSubscribers){m.close.publish({websocket:e,code:n,reason:s})}}function onSocketError(e){const{ws:t}=this;t[o]=r.CLOSING;if(m.socketError.hasSubscribers){m.socketError.publish(e)}this.destroy()}e.exports={establishWebSocketConnection:establishWebSocketConnection}},9188:e=>{"use strict";const t="258EAFA5-E914-47DA-95CA-C5AB0DC85B11";const n={enumerable:true,writable:false,configurable:false};const s={CONNECTING:0,OPEN:1,CLOSING:2,CLOSED:3};const i={CONTINUATION:0,TEXT:1,BINARY:2,CLOSE:8,PING:9,PONG:10};const r=2**16-1;const o={INFO:0,PAYLOADLENGTH_16:2,PAYLOADLENGTH_64:3,READ_DATA:4};const A=Buffer.allocUnsafe(0);e.exports={uid:t,staticPropertyDescriptors:n,states:s,opcodes:i,maxUnsigned16Bit:r,parserStates:o,emptyBuffer:A}},2611:(e,t,n)=>{"use strict";const{webidl:s}=n(1744);const{kEnumerableProperty:i}=n(3983);const{MessagePort:r}=n(1267);class MessageEvent extends Event{#r;constructor(e,t={}){s.argumentLengthCheck(arguments,1,{header:"MessageEvent constructor"});e=s.converters.DOMString(e);t=s.converters.MessageEventInit(t);super(e,t);this.#r=t}get data(){s.brandCheck(this,MessageEvent);return this.#r.data}get origin(){s.brandCheck(this,MessageEvent);return this.#r.origin}get lastEventId(){s.brandCheck(this,MessageEvent);return this.#r.lastEventId}get source(){s.brandCheck(this,MessageEvent);return this.#r.source}get ports(){s.brandCheck(this,MessageEvent);if(!Object.isFrozen(this.#r.ports)){Object.freeze(this.#r.ports)}return this.#r.ports}initMessageEvent(e,t=false,n=false,i=null,r="",o="",A=null,a=[]){s.brandCheck(this,MessageEvent);s.argumentLengthCheck(arguments,1,{header:"MessageEvent.initMessageEvent"});return new MessageEvent(e,{bubbles:t,cancelable:n,data:i,origin:r,lastEventId:o,source:A,ports:a})}}class CloseEvent extends Event{#r;constructor(e,t={}){s.argumentLengthCheck(arguments,1,{header:"CloseEvent constructor"});e=s.converters.DOMString(e);t=s.converters.CloseEventInit(t);super(e,t);this.#r=t}get wasClean(){s.brandCheck(this,CloseEvent);return this.#r.wasClean}get code(){s.brandCheck(this,CloseEvent);return this.#r.code}get reason(){s.brandCheck(this,CloseEvent);return this.#r.reason}}class ErrorEvent extends Event{#r;constructor(e,t){s.argumentLengthCheck(arguments,1,{header:"ErrorEvent constructor"});super(e,t);e=s.converters.DOMString(e);t=s.converters.ErrorEventInit(t??{});this.#r=t}get message(){s.brandCheck(this,ErrorEvent);return this.#r.message}get filename(){s.brandCheck(this,ErrorEvent);return this.#r.filename}get lineno(){s.brandCheck(this,ErrorEvent);return this.#r.lineno}get colno(){s.brandCheck(this,ErrorEvent);return this.#r.colno}get error(){s.brandCheck(this,ErrorEvent);return this.#r.error}}Object.defineProperties(MessageEvent.prototype,{[Symbol.toStringTag]:{value:"MessageEvent",configurable:true},data:i,origin:i,lastEventId:i,source:i,ports:i,initMessageEvent:i});Object.defineProperties(CloseEvent.prototype,{[Symbol.toStringTag]:{value:"CloseEvent",configurable:true},reason:i,code:i,wasClean:i});Object.defineProperties(ErrorEvent.prototype,{[Symbol.toStringTag]:{value:"ErrorEvent",configurable:true},message:i,filename:i,lineno:i,colno:i,error:i});s.converters.MessagePort=s.interfaceConverter(r);s.converters["sequence"]=s.sequenceConverter(s.converters.MessagePort);const o=[{key:"bubbles",converter:s.converters.boolean,defaultValue:false},{key:"cancelable",converter:s.converters.boolean,defaultValue:false},{key:"composed",converter:s.converters.boolean,defaultValue:false}];s.converters.MessageEventInit=s.dictionaryConverter([...o,{key:"data",converter:s.converters.any,defaultValue:null},{key:"origin",converter:s.converters.USVString,defaultValue:""},{key:"lastEventId",converter:s.converters.DOMString,defaultValue:""},{key:"source",converter:s.nullableConverter(s.converters.MessagePort),defaultValue:null},{key:"ports",converter:s.converters["sequence"],get defaultValue(){return[]}}]);s.converters.CloseEventInit=s.dictionaryConverter([...o,{key:"wasClean",converter:s.converters.boolean,defaultValue:false},{key:"code",converter:s.converters["unsigned short"],defaultValue:0},{key:"reason",converter:s.converters.USVString,defaultValue:""}]);s.converters.ErrorEventInit=s.dictionaryConverter([...o,{key:"message",converter:s.converters.DOMString,defaultValue:""},{key:"filename",converter:s.converters.USVString,defaultValue:""},{key:"lineno",converter:s.converters["unsigned long"],defaultValue:0},{key:"colno",converter:s.converters["unsigned long"],defaultValue:0},{key:"error",converter:s.converters.any}]);e.exports={MessageEvent:MessageEvent,CloseEvent:CloseEvent,ErrorEvent:ErrorEvent}},5444:(e,t,n)=>{"use strict";const{maxUnsigned16Bit:s}=n(9188);let i;try{i=n(6113)}catch{}class WebsocketFrameSend{constructor(e){this.frameData=e;this.maskKey=i.randomBytes(4)}createFrame(e){const t=this.frameData?.byteLength??0;let n=t;let i=6;if(t>s){i+=8;n=127}else if(t>125){i+=2;n=126}const r=Buffer.allocUnsafe(t+i);r[0]=r[1]=0;r[0]|=128;r[0]=(r[0]&240)+e; -/*! ws. MIT License. Einar Otto Stangvik */r[i-4]=this.maskKey[0];r[i-3]=this.maskKey[1];r[i-2]=this.maskKey[2];r[i-1]=this.maskKey[3];r[1]=n;if(n===126){r.writeUInt16BE(t,2)}else if(n===127){r[2]=r[3]=0;r.writeUIntBE(t,4,6)}r[1]|=128;for(let e=0;e{"use strict";const{Writable:s}=n(2781);const i=n(7643);const{parserStates:r,opcodes:o,states:A,emptyBuffer:a}=n(9188);const{kReadyState:c,kSentClose:u,kResponse:l,kReceivedClose:d}=n(7578);const{isValidStatusCode:p,failWebsocketConnection:g,websocketMessageReceived:h}=n(5515);const{WebsocketFrameSend:f}=n(5444);const E={};E.ping=i.channel("undici:websocket:ping");E.pong=i.channel("undici:websocket:pong");class ByteParser extends s{#o=[];#A=0;#a=r.INFO;#c={};#u=[];constructor(e){super();this.ws=e}_write(e,t,n){this.#o.push(e);this.#A+=e.length;this.run(n)}run(e){while(true){if(this.#a===r.INFO){if(this.#A<2){return e()}const t=this.consume(2);this.#c.fin=(t[0]&128)!==0;this.#c.opcode=t[0]&15;this.#c.originalOpcode??=this.#c.opcode;this.#c.fragmented=!this.#c.fin&&this.#c.opcode!==o.CONTINUATION;if(this.#c.fragmented&&this.#c.opcode!==o.BINARY&&this.#c.opcode!==o.TEXT){g(this.ws,"Invalid frame type was fragmented.");return}const n=t[1]&127;if(n<=125){this.#c.payloadLength=n;this.#a=r.READ_DATA}else if(n===126){this.#a=r.PAYLOADLENGTH_16}else if(n===127){this.#a=r.PAYLOADLENGTH_64}if(this.#c.fragmented&&n>125){g(this.ws,"Fragmented frame exceeded 125 bytes.");return}else if((this.#c.opcode===o.PING||this.#c.opcode===o.PONG||this.#c.opcode===o.CLOSE)&&n>125){g(this.ws,"Payload length for control frame exceeded 125 bytes.");return}else if(this.#c.opcode===o.CLOSE){if(n===1){g(this.ws,"Received close frame with a 1-byte body.");return}const e=this.consume(n);this.#c.closeInfo=this.parseCloseBody(false,e);if(!this.ws[u]){const e=Buffer.allocUnsafe(2);e.writeUInt16BE(this.#c.closeInfo.code,0);const t=new f(e);this.ws[l].socket.write(t.createFrame(o.CLOSE),(e=>{if(!e){this.ws[u]=true}}))}this.ws[c]=A.CLOSING;this.ws[d]=true;this.end();return}else if(this.#c.opcode===o.PING){const t=this.consume(n);if(!this.ws[d]){const e=new f(t);this.ws[l].socket.write(e.createFrame(o.PONG));if(E.ping.hasSubscribers){E.ping.publish({payload:t})}}this.#a=r.INFO;if(this.#A>0){continue}else{e();return}}else if(this.#c.opcode===o.PONG){const t=this.consume(n);if(E.pong.hasSubscribers){E.pong.publish({payload:t})}if(this.#A>0){continue}else{e();return}}}else if(this.#a===r.PAYLOADLENGTH_16){if(this.#A<2){return e()}const t=this.consume(2);this.#c.payloadLength=t.readUInt16BE(0);this.#a=r.READ_DATA}else if(this.#a===r.PAYLOADLENGTH_64){if(this.#A<8){return e()}const t=this.consume(8);const n=t.readUInt32BE(0);if(n>2**31-1){g(this.ws,"Received payload length > 2^31 bytes.");return}const s=t.readUInt32BE(4);this.#c.payloadLength=(n<<8)+s;this.#a=r.READ_DATA}else if(this.#a===r.READ_DATA){if(this.#A=this.#c.payloadLength){const e=this.consume(this.#c.payloadLength);this.#u.push(e);if(!this.#c.fragmented||this.#c.fin&&this.#c.opcode===o.CONTINUATION){const e=Buffer.concat(this.#u);h(this.ws,this.#c.originalOpcode,e);this.#c={};this.#u.length=0}this.#a=r.INFO}}if(this.#A>0){continue}else{e();break}}}consume(e){if(e>this.#A){return null}else if(e===0){return a}if(this.#o[0].length===e){this.#A-=this.#o[0].length;return this.#o.shift()}const t=Buffer.allocUnsafe(e);let n=0;while(n!==e){const s=this.#o[0];const{length:i}=s;if(i+n===e){t.set(this.#o.shift(),n);break}else if(i+n>e){t.set(s.subarray(0,e-n),n);this.#o[0]=s.subarray(e-n);break}else{t.set(this.#o.shift(),n);n+=s.length}}this.#A-=e;return t}parseCloseBody(e,t){let n;if(t.length>=2){n=t.readUInt16BE(0)}if(e){if(!p(n)){return null}return{code:n}}let s=t.subarray(2);if(s[0]===239&&s[1]===187&&s[2]===191){s=s.subarray(3)}if(n!==undefined&&!p(n)){return null}try{s=new TextDecoder("utf-8",{fatal:true}).decode(s)}catch{return null}return{code:n,reason:s}}get closingInfo(){return this.#c.closeInfo}}e.exports={ByteParser:ByteParser}},7578:e=>{"use strict";e.exports={kWebSocketURL:Symbol("url"),kReadyState:Symbol("ready state"),kController:Symbol("controller"),kResponse:Symbol("response"),kBinaryType:Symbol("binary type"),kSentClose:Symbol("sent close"),kReceivedClose:Symbol("received close"),kByteParser:Symbol("byte parser")}},5515:(e,t,n)=>{"use strict";const{kReadyState:s,kController:i,kResponse:r,kBinaryType:o,kWebSocketURL:A}=n(7578);const{states:a,opcodes:c}=n(9188);const{MessageEvent:u,ErrorEvent:l}=n(2611);function isEstablished(e){return e[s]===a.OPEN}function isClosing(e){return e[s]===a.CLOSING}function isClosed(e){return e[s]===a.CLOSED}function fireEvent(e,t,n=Event,s){const i=new n(e,s);t.dispatchEvent(i)}function websocketMessageReceived(e,t,n){if(e[s]!==a.OPEN){return}let i;if(t===c.TEXT){try{i=new TextDecoder("utf-8",{fatal:true}).decode(n)}catch{failWebsocketConnection(e,"Received invalid UTF-8 in text frame.");return}}else if(t===c.BINARY){if(e[o]==="blob"){i=new Blob([n])}else{i=new Uint8Array(n).buffer}}fireEvent("message",e,u,{origin:e[A].origin,data:i})}function isValidSubprotocol(e){if(e.length===0){return false}for(const t of e){const e=t.charCodeAt(0);if(e<33||e>126||t==="("||t===")"||t==="<"||t===">"||t==="@"||t===","||t===";"||t===":"||t==="\\"||t==='"'||t==="/"||t==="["||t==="]"||t==="?"||t==="="||t==="{"||t==="}"||e===32||e===9){return false}}return true}function isValidStatusCode(e){if(e>=1e3&&e<1015){return e!==1004&&e!==1005&&e!==1006}return e>=3e3&&e<=4999}function failWebsocketConnection(e,t){const{[i]:n,[r]:s}=e;n.abort();if(s?.socket&&!s.socket.destroyed){s.socket.destroy()}if(t){fireEvent("error",e,l,{error:new Error(t)})}}e.exports={isEstablished:isEstablished,isClosing:isClosing,isClosed:isClosed,fireEvent:fireEvent,isValidSubprotocol:isValidSubprotocol,isValidStatusCode:isValidStatusCode,failWebsocketConnection:failWebsocketConnection,websocketMessageReceived:websocketMessageReceived}},4284:(e,t,n)=>{"use strict";const{webidl:s}=n(1744);const{DOMException:i}=n(1037);const{URLSerializer:r}=n(685);const{getGlobalOrigin:o}=n(1246);const{staticPropertyDescriptors:A,states:a,opcodes:c,emptyBuffer:u}=n(9188);const{kWebSocketURL:l,kReadyState:d,kController:p,kBinaryType:g,kResponse:h,kSentClose:f,kByteParser:E}=n(7578);const{isEstablished:m,isClosing:C,isValidSubprotocol:Q,failWebsocketConnection:I,fireEvent:B}=n(5515);const{establishWebSocketConnection:y}=n(5354);const{WebsocketFrameSend:b}=n(5444);const{ByteParser:w}=n(1688);const{kEnumerableProperty:R,isBlobLike:v}=n(3983);const{getGlobalDispatcher:k}=n(1892);const{types:S}=n(3837);let x=false;class WebSocket extends EventTarget{#l={open:null,error:null,close:null,message:null};#d=0;#p="";#g="";constructor(e,t=[]){super();s.argumentLengthCheck(arguments,1,{header:"WebSocket constructor"});if(!x){x=true;process.emitWarning("WebSockets are experimental, expect them to change at any time.",{code:"UNDICI-WS"})}const n=s.converters["DOMString or sequence or WebSocketInit"](t);e=s.converters.USVString(e);t=n.protocols;const r=o();let A;try{A=new URL(e,r)}catch(e){throw new i(e,"SyntaxError")}if(A.protocol==="http:"){A.protocol="ws:"}else if(A.protocol==="https:"){A.protocol="wss:"}if(A.protocol!=="ws:"&&A.protocol!=="wss:"){throw new i(`Expected a ws: or wss: protocol, got ${A.protocol}`,"SyntaxError")}if(A.hash||A.href.endsWith("#")){throw new i("Got fragment","SyntaxError")}if(typeof t==="string"){t=[t]}if(t.length!==new Set(t.map((e=>e.toLowerCase()))).size){throw new i("Invalid Sec-WebSocket-Protocol value","SyntaxError")}if(t.length>0&&!t.every((e=>Q(e)))){throw new i("Invalid Sec-WebSocket-Protocol value","SyntaxError")}this[l]=new URL(A.href);this[p]=y(A,t,this,(e=>this.#h(e)),n);this[d]=WebSocket.CONNECTING;this[g]="blob"}close(e=undefined,t=undefined){s.brandCheck(this,WebSocket);if(e!==undefined){e=s.converters["unsigned short"](e,{clamp:true})}if(t!==undefined){t=s.converters.USVString(t)}if(e!==undefined){if(e!==1e3&&(e<3e3||e>4999)){throw new i("invalid code","InvalidAccessError")}}let n=0;if(t!==undefined){n=Buffer.byteLength(t);if(n>123){throw new i(`Reason must be less than 123 bytes; received ${n}`,"SyntaxError")}}if(this[d]===WebSocket.CLOSING||this[d]===WebSocket.CLOSED){}else if(!m(this)){I(this,"Connection was closed before it was established.");this[d]=WebSocket.CLOSING}else if(!C(this)){const s=new b;if(e!==undefined&&t===undefined){s.frameData=Buffer.allocUnsafe(2);s.frameData.writeUInt16BE(e,0)}else if(e!==undefined&&t!==undefined){s.frameData=Buffer.allocUnsafe(2+n);s.frameData.writeUInt16BE(e,0);s.frameData.write(t,2,"utf-8")}else{s.frameData=u}const i=this[h].socket;i.write(s.createFrame(c.CLOSE),(e=>{if(!e){this[f]=true}}));this[d]=a.CLOSING}else{this[d]=WebSocket.CLOSING}}send(e){s.brandCheck(this,WebSocket);s.argumentLengthCheck(arguments,1,{header:"WebSocket.send"});e=s.converters.WebSocketSendData(e);if(this[d]===WebSocket.CONNECTING){throw new i("Sent before connected.","InvalidStateError")}if(!m(this)||C(this)){return}const t=this[h].socket;if(typeof e==="string"){const n=Buffer.from(e);const s=new b(n);const i=s.createFrame(c.TEXT);this.#d+=n.byteLength;t.write(i,(()=>{this.#d-=n.byteLength}))}else if(S.isArrayBuffer(e)){const n=Buffer.from(e);const s=new b(n);const i=s.createFrame(c.BINARY);this.#d+=n.byteLength;t.write(i,(()=>{this.#d-=n.byteLength}))}else if(ArrayBuffer.isView(e)){const n=Buffer.from(e,e.byteOffset,e.byteLength);const s=new b(n);const i=s.createFrame(c.BINARY);this.#d+=n.byteLength;t.write(i,(()=>{this.#d-=n.byteLength}))}else if(v(e)){const n=new b;e.arrayBuffer().then((e=>{const s=Buffer.from(e);n.frameData=s;const i=n.createFrame(c.BINARY);this.#d+=s.byteLength;t.write(i,(()=>{this.#d-=s.byteLength}))}))}}get readyState(){s.brandCheck(this,WebSocket);return this[d]}get bufferedAmount(){s.brandCheck(this,WebSocket);return this.#d}get url(){s.brandCheck(this,WebSocket);return r(this[l])}get extensions(){s.brandCheck(this,WebSocket);return this.#g}get protocol(){s.brandCheck(this,WebSocket);return this.#p}get onopen(){s.brandCheck(this,WebSocket);return this.#l.open}set onopen(e){s.brandCheck(this,WebSocket);if(this.#l.open){this.removeEventListener("open",this.#l.open)}if(typeof e==="function"){this.#l.open=e;this.addEventListener("open",e)}else{this.#l.open=null}}get onerror(){s.brandCheck(this,WebSocket);return this.#l.error}set onerror(e){s.brandCheck(this,WebSocket);if(this.#l.error){this.removeEventListener("error",this.#l.error)}if(typeof e==="function"){this.#l.error=e;this.addEventListener("error",e)}else{this.#l.error=null}}get onclose(){s.brandCheck(this,WebSocket);return this.#l.close}set onclose(e){s.brandCheck(this,WebSocket);if(this.#l.close){this.removeEventListener("close",this.#l.close)}if(typeof e==="function"){this.#l.close=e;this.addEventListener("close",e)}else{this.#l.close=null}}get onmessage(){s.brandCheck(this,WebSocket);return this.#l.message}set onmessage(e){s.brandCheck(this,WebSocket);if(this.#l.message){this.removeEventListener("message",this.#l.message)}if(typeof e==="function"){this.#l.message=e;this.addEventListener("message",e)}else{this.#l.message=null}}get binaryType(){s.brandCheck(this,WebSocket);return this[g]}set binaryType(e){s.brandCheck(this,WebSocket);if(e!=="blob"&&e!=="arraybuffer"){this[g]="blob"}else{this[g]=e}}#h(e){this[h]=e;const t=new w(this);t.on("drain",(function onParserDrain(){this.ws[h].socket.resume()}));e.socket.ws=this;this[E]=t;this[d]=a.OPEN;const n=e.headersList.get("sec-websocket-extensions");if(n!==null){this.#g=n}const s=e.headersList.get("sec-websocket-protocol");if(s!==null){this.#p=s}B("open",this)}}WebSocket.CONNECTING=WebSocket.prototype.CONNECTING=a.CONNECTING;WebSocket.OPEN=WebSocket.prototype.OPEN=a.OPEN;WebSocket.CLOSING=WebSocket.prototype.CLOSING=a.CLOSING;WebSocket.CLOSED=WebSocket.prototype.CLOSED=a.CLOSED;Object.defineProperties(WebSocket.prototype,{CONNECTING:A,OPEN:A,CLOSING:A,CLOSED:A,url:R,readyState:R,bufferedAmount:R,onopen:R,onerror:R,onclose:R,close:R,onmessage:R,binaryType:R,send:R,extensions:R,protocol:R,[Symbol.toStringTag]:{value:"WebSocket",writable:false,enumerable:false,configurable:true}});Object.defineProperties(WebSocket,{CONNECTING:A,OPEN:A,CLOSING:A,CLOSED:A});s.converters["sequence"]=s.sequenceConverter(s.converters.DOMString);s.converters["DOMString or sequence"]=function(e){if(s.util.Type(e)==="Object"&&Symbol.iterator in e){return s.converters["sequence"](e)}return s.converters.DOMString(e)};s.converters.WebSocketInit=s.dictionaryConverter([{key:"protocols",converter:s.converters["DOMString or sequence"],get defaultValue(){return[]}},{key:"dispatcher",converter:e=>e,get defaultValue(){return k()}},{key:"headers",converter:s.nullableConverter(s.converters.HeadersInit)}]);s.converters["DOMString or sequence or WebSocketInit"]=function(e){if(s.util.Type(e)==="Object"&&!(Symbol.iterator in e)){return s.converters.WebSocketInit(e)}return{protocols:s.converters["DOMString or sequence"](e)}};s.converters.WebSocketSendData=function(e){if(s.util.Type(e)==="Object"){if(v(e)){return s.converters.Blob(e,{strict:false})}if(ArrayBuffer.isView(e)||S.isAnyArrayBuffer(e)){return s.converters.BufferSource(e)}}return s.converters.USVString(e)};e.exports={WebSocket:WebSocket}},5840:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});Object.defineProperty(t,"v1",{enumerable:true,get:function(){return s.default}});Object.defineProperty(t,"v3",{enumerable:true,get:function(){return i.default}});Object.defineProperty(t,"v4",{enumerable:true,get:function(){return r.default}});Object.defineProperty(t,"v5",{enumerable:true,get:function(){return o.default}});Object.defineProperty(t,"NIL",{enumerable:true,get:function(){return A.default}});Object.defineProperty(t,"version",{enumerable:true,get:function(){return a.default}});Object.defineProperty(t,"validate",{enumerable:true,get:function(){return c.default}});Object.defineProperty(t,"stringify",{enumerable:true,get:function(){return u.default}});Object.defineProperty(t,"parse",{enumerable:true,get:function(){return l.default}});var s=_interopRequireDefault(n(8628));var i=_interopRequireDefault(n(6409));var r=_interopRequireDefault(n(5122));var o=_interopRequireDefault(n(9120));var A=_interopRequireDefault(n(5332));var a=_interopRequireDefault(n(1595));var c=_interopRequireDefault(n(6900));var u=_interopRequireDefault(n(8950));var l=_interopRequireDefault(n(2746));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}},4569:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=_interopRequireDefault(n(6113));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function md5(e){if(Array.isArray(e)){e=Buffer.from(e)}else if(typeof e==="string"){e=Buffer.from(e,"utf8")}return s.default.createHash("md5").update(e).digest()}var i=md5;t["default"]=i},5332:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var n="00000000-0000-0000-0000-000000000000";t["default"]=n},2746:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=_interopRequireDefault(n(6900));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function parse(e){if(!(0,s.default)(e)){throw TypeError("Invalid UUID")}let t;const n=new Uint8Array(16);n[0]=(t=parseInt(e.slice(0,8),16))>>>24;n[1]=t>>>16&255;n[2]=t>>>8&255;n[3]=t&255;n[4]=(t=parseInt(e.slice(9,13),16))>>>8;n[5]=t&255;n[6]=(t=parseInt(e.slice(14,18),16))>>>8;n[7]=t&255;n[8]=(t=parseInt(e.slice(19,23),16))>>>8;n[9]=t&255;n[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255;n[11]=t/4294967296&255;n[12]=t>>>24&255;n[13]=t>>>16&255;n[14]=t>>>8&255;n[15]=t&255;return n}var i=parse;t["default"]=i},814:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var n=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;t["default"]=n},807:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=rng;var s=_interopRequireDefault(n(6113));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const i=new Uint8Array(256);let r=i.length;function rng(){if(r>i.length-16){s.default.randomFillSync(i);r=0}return i.slice(r,r+=16)}},5274:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=_interopRequireDefault(n(6113));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function sha1(e){if(Array.isArray(e)){e=Buffer.from(e)}else if(typeof e==="string"){e=Buffer.from(e,"utf8")}return s.default.createHash("sha1").update(e).digest()}var i=sha1;t["default"]=i},8950:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=_interopRequireDefault(n(6900));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const i=[];for(let e=0;e<256;++e){i.push((e+256).toString(16).substr(1))}function stringify(e,t=0){const n=(i[e[t+0]]+i[e[t+1]]+i[e[t+2]]+i[e[t+3]]+"-"+i[e[t+4]]+i[e[t+5]]+"-"+i[e[t+6]]+i[e[t+7]]+"-"+i[e[t+8]]+i[e[t+9]]+"-"+i[e[t+10]]+i[e[t+11]]+i[e[t+12]]+i[e[t+13]]+i[e[t+14]]+i[e[t+15]]).toLowerCase();if(!(0,s.default)(n)){throw TypeError("Stringified UUID is invalid")}return n}var r=stringify;t["default"]=r},8628:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=_interopRequireDefault(n(807));var i=_interopRequireDefault(n(8950));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let r;let o;let A=0;let a=0;function v1(e,t,n){let c=t&&n||0;const u=t||new Array(16);e=e||{};let l=e.node||r;let d=e.clockseq!==undefined?e.clockseq:o;if(l==null||d==null){const t=e.random||(e.rng||s.default)();if(l==null){l=r=[t[0]|1,t[1],t[2],t[3],t[4],t[5]]}if(d==null){d=o=(t[6]<<8|t[7])&16383}}let p=e.msecs!==undefined?e.msecs:Date.now();let g=e.nsecs!==undefined?e.nsecs:a+1;const h=p-A+(g-a)/1e4;if(h<0&&e.clockseq===undefined){d=d+1&16383}if((h<0||p>A)&&e.nsecs===undefined){g=0}if(g>=1e4){throw new Error("uuid.v1(): Can't create more than 10M uuids/sec")}A=p;a=g;o=d;p+=122192928e5;const f=((p&268435455)*1e4+g)%4294967296;u[c++]=f>>>24&255;u[c++]=f>>>16&255;u[c++]=f>>>8&255;u[c++]=f&255;const E=p/4294967296*1e4&268435455;u[c++]=E>>>8&255;u[c++]=E&255;u[c++]=E>>>24&15|16;u[c++]=E>>>16&255;u[c++]=d>>>8|128;u[c++]=d&255;for(let e=0;e<6;++e){u[c+e]=l[e]}return t||(0,i.default)(u)}var c=v1;t["default"]=c},6409:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=_interopRequireDefault(n(5998));var i=_interopRequireDefault(n(4569));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const r=(0,s.default)("v3",48,i.default);var o=r;t["default"]=o},5998:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=_default;t.URL=t.DNS=void 0;var s=_interopRequireDefault(n(8950));var i=_interopRequireDefault(n(2746));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function stringToBytes(e){e=unescape(encodeURIComponent(e));const t=[];for(let n=0;n{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=_interopRequireDefault(n(807));var i=_interopRequireDefault(n(8950));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function v4(e,t,n){e=e||{};const r=e.random||(e.rng||s.default)();r[6]=r[6]&15|64;r[8]=r[8]&63|128;if(t){n=n||0;for(let e=0;e<16;++e){t[n+e]=r[e]}return t}return(0,i.default)(r)}var r=v4;t["default"]=r},9120:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=_interopRequireDefault(n(5998));var i=_interopRequireDefault(n(5274));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const r=(0,s.default)("v5",80,i.default);var o=r;t["default"]=o},6900:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=_interopRequireDefault(n(814));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function validate(e){return typeof e==="string"&&s.default.test(e)}var i=validate;t["default"]=i},1595:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t["default"]=void 0;var s=_interopRequireDefault(n(6900));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function version(e){if(!(0,s.default)(e)){throw TypeError("Invalid UUID")}return parseInt(e.substr(14,1),16)}var i=version;t["default"]=i},8542:(e,t,n)=>{t.formatArgs=formatArgs;t.save=save;t.load=load;t.useColors=useColors;t.storage=localstorage();t.destroy=(()=>{let e=false;return()=>{if(!e){e=true;console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}}})();t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function useColors(){if(typeof window!=="undefined"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)){return true}if(typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)){return false}return typeof document!=="undefined"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!=="undefined"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function formatArgs(t){t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff);if(!this.useColors){return}const n="color: "+this.color;t.splice(1,0,n,"color: inherit");let s=0;let i=0;t[0].replace(/%[a-zA-Z%]/g,(e=>{if(e==="%%"){return}s++;if(e==="%c"){i=s}}));t.splice(i,0,n)}t.log=console.debug||console.log||(()=>{});function save(e){try{if(e){t.storage.setItem("debug",e)}else{t.storage.removeItem("debug")}}catch(e){}}function load(){let e;try{e=t.storage.getItem("debug")}catch(e){}if(!e&&typeof process!=="undefined"&&"env"in process){e=process.env.DEBUG}return e}function localstorage(){try{return localStorage}catch(e){}}e.exports=n(2624)(t);const{formatters:s}=e.exports;s.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}},2624:(e,t,n)=>{function setup(e){createDebug.debug=createDebug;createDebug.default=createDebug;createDebug.coerce=coerce;createDebug.disable=disable;createDebug.enable=enable;createDebug.enabled=enabled;createDebug.humanize=n(6628);createDebug.destroy=destroy;Object.keys(e).forEach((t=>{createDebug[t]=e[t]}));createDebug.names=[];createDebug.skips=[];createDebug.formatters={};function selectColor(e){let t=0;for(let n=0;n{if(t==="%%"){return"%"}r++;const i=createDebug.formatters[s];if(typeof i==="function"){const s=e[r];t=i.call(n,s);e.splice(r,1);r--}return t}));createDebug.formatArgs.call(n,e);const o=n.log||createDebug.log;o.apply(n,e)}debug.namespace=e;debug.useColors=createDebug.useColors();debug.color=createDebug.selectColor(e);debug.extend=extend;debug.destroy=createDebug.destroy;Object.defineProperty(debug,"enabled",{enumerable:true,configurable:false,get:()=>{if(n!==null){return n}if(s!==createDebug.namespaces){s=createDebug.namespaces;i=createDebug.enabled(e)}return i},set:e=>{n=e}});if(typeof createDebug.init==="function"){createDebug.init(debug)}return debug}function extend(e,t){const n=createDebug(this.namespace+(typeof t==="undefined"?":":t)+e);n.log=this.log;return n}function enable(e){createDebug.save(e);createDebug.namespaces=e;createDebug.names=[];createDebug.skips=[];let t;const n=(typeof e==="string"?e:"").split(/[\s,]+/);const s=n.length;for(t=0;t"-"+e))].join(",");createDebug.enable("");return e}function enabled(e){if(e[e.length-1]==="*"){return true}let t;let n;for(t=0,n=createDebug.skips.length;t{if(typeof process==="undefined"||process.type==="renderer"||process.browser===true||process.__nwjs){e.exports=n(8542)}else{e.exports=n(5305)}},5305:(e,t,n)=>{const s=n(6224);const i=n(3837);t.init=init;t.log=log;t.formatArgs=formatArgs;t.save=save;t.load=load;t.useColors=useColors;t.destroy=i.deprecate((()=>{}),"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");t.colors=[6,2,3,4,5,1];try{const e=n(1415);if(e&&(e.stderr||e).level>=2){t.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221]}}catch(e){}t.inspectOpts=Object.keys(process.env).filter((e=>/^debug_/i.test(e))).reduce(((e,t)=>{const n=t.substring(6).toLowerCase().replace(/_([a-z])/g,((e,t)=>t.toUpperCase()));let s=process.env[t];if(/^(yes|on|true|enabled)$/i.test(s)){s=true}else if(/^(no|off|false|disabled)$/i.test(s)){s=false}else if(s==="null"){s=null}else{s=Number(s)}e[n]=s;return e}),{});function useColors(){return"colors"in t.inspectOpts?Boolean(t.inspectOpts.colors):s.isatty(process.stderr.fd)}function formatArgs(t){const{namespace:n,useColors:s}=this;if(s){const s=this.color;const i="[3"+(s<8?s:"8;5;"+s);const r=` ${i};1m${n} `;t[0]=r+t[0].split("\n").join("\n"+r);t.push(i+"m+"+e.exports.humanize(this.diff)+"")}else{t[0]=getDate()+n+" "+t[0]}}function getDate(){if(t.inspectOpts.hideDate){return""}return(new Date).toISOString()+" "}function log(...e){return process.stderr.write(i.format(...e)+"\n")}function save(e){if(e){process.env.DEBUG=e}else{delete process.env.DEBUG}}function load(){return process.env.DEBUG}function init(e){e.inspectOpts={};const n=Object.keys(t.inspectOpts);for(let s=0;se.trim())).join(" ")};r.O=function(e){this.inspectOpts.colors=this.useColors;return i.inspect(e,this.inspectOpts)}},3787:e=>{"use strict";e.exports=(e,t=process.argv)=>{const n=e.startsWith("-")?"":e.length===1?"-":"--";const s=t.indexOf(n+e);const i=t.indexOf("--");return s!==-1&&(i===-1||s{var t=1e3;var n=t*60;var s=n*60;var i=s*24;var r=i*7;var o=i*365.25;e.exports=function(e,t){t=t||{};var n=typeof e;if(n==="string"&&e.length>0){return parse(e)}else if(n==="number"&&isFinite(e)){return t.long?fmtLong(e):fmtShort(e)}throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))};function parse(e){e=String(e);if(e.length>100){return}var A=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(!A){return}var a=parseFloat(A[1]);var c=(A[2]||"ms").toLowerCase();switch(c){case"years":case"year":case"yrs":case"yr":case"y":return a*o;case"weeks":case"week":case"w":return a*r;case"days":case"day":case"d":return a*i;case"hours":case"hour":case"hrs":case"hr":case"h":return a*s;case"minutes":case"minute":case"mins":case"min":case"m":return a*n;case"seconds":case"second":case"secs":case"sec":case"s":return a*t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return a;default:return undefined}}function fmtShort(e){var r=Math.abs(e);if(r>=i){return Math.round(e/i)+"d"}if(r>=s){return Math.round(e/s)+"h"}if(r>=n){return Math.round(e/n)+"m"}if(r>=t){return Math.round(e/t)+"s"}return e+"ms"}function fmtLong(e){var r=Math.abs(e);if(r>=i){return plural(e,r,i,"day")}if(r>=s){return plural(e,r,s,"hour")}if(r>=n){return plural(e,r,n,"minute")}if(r>=t){return plural(e,r,t,"second")}return e+" ms"}function plural(e,t,n,s){var i=t>=n*1.5;return Math.round(e/n)+" "+s+(i?"s":"")}},1415:(e,t,n)=>{"use strict";const s=n(2037);const i=n(6224);const r=n(3787);const{env:o}=process;let A;if(r("no-color")||r("no-colors")||r("color=false")||r("color=never")){A=0}else if(r("color")||r("colors")||r("color=true")||r("color=always")){A=1}if("FORCE_COLOR"in o){if(o.FORCE_COLOR==="true"){A=1}else if(o.FORCE_COLOR==="false"){A=0}else{A=o.FORCE_COLOR.length===0?1:Math.min(parseInt(o.FORCE_COLOR,10),3)}}function translateLevel(e){if(e===0){return false}return{level:e,hasBasic:true,has256:e>=2,has16m:e>=3}}function supportsColor(e,t){if(A===0){return 0}if(r("color=16m")||r("color=full")||r("color=truecolor")){return 3}if(r("color=256")){return 2}if(e&&!t&&A===undefined){return 0}const n=A||0;if(o.TERM==="dumb"){return n}if(process.platform==="win32"){const e=s.release().split(".");if(Number(e[0])>=10&&Number(e[2])>=10586){return Number(e[2])>=14931?3:2}return 1}if("CI"in o){if(["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some((e=>e in o))||o.CI_NAME==="codeship"){return 1}return n}if("TEAMCITY_VERSION"in o){return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(o.TEAMCITY_VERSION)?1:0}if(o.COLORTERM==="truecolor"){return 3}if("TERM_PROGRAM"in o){const e=parseInt((o.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(o.TERM_PROGRAM){case"iTerm.app":return e>=3?3:2;case"Apple_Terminal":return 2}}if(/-256(color)?$/i.test(o.TERM)){return 2}if(/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(o.TERM)){return 1}if("COLORTERM"in o){return 1}return n}function getSupportLevel(e){const t=supportsColor(e,e&&e.isTTY);return translateLevel(t)}e.exports={supportsColor:getSupportLevel,stdout:translateLevel(supportsColor(true,i.isatty(1))),stderr:translateLevel(supportsColor(true,i.isatty(2)))}},4978:module=>{module.exports=eval("require")("util/types")},9491:e=>{"use strict";e.exports=require("assert")},852:e=>{"use strict";e.exports=require("async_hooks")},4300:e=>{"use strict";e.exports=require("buffer")},6206:e=>{"use strict";e.exports=require("console")},6113:e=>{"use strict";e.exports=require("crypto")},7643:e=>{"use strict";e.exports=require("diagnostics_channel")},2361:e=>{"use strict";e.exports=require("events")},7147:e=>{"use strict";e.exports=require("fs")},3685:e=>{"use strict";e.exports=require("http")},5158:e=>{"use strict";e.exports=require("http2")},5687:e=>{"use strict";e.exports=require("https")},1808:e=>{"use strict";e.exports=require("net")},5673:e=>{"use strict";e.exports=require("node:events")},4492:e=>{"use strict";e.exports=require("node:stream")},7261:e=>{"use strict";e.exports=require("node:util")},2037:e=>{"use strict";e.exports=require("os")},1017:e=>{"use strict";e.exports=require("path")},4074:e=>{"use strict";e.exports=require("perf_hooks")},3477:e=>{"use strict";e.exports=require("querystring")},2781:e=>{"use strict";e.exports=require("stream")},5356:e=>{"use strict";e.exports=require("stream/web")},1576:e=>{"use strict";e.exports=require("string_decoder")},4404:e=>{"use strict";e.exports=require("tls")},6224:e=>{"use strict";e.exports=require("tty")},7310:e=>{"use strict";e.exports=require("url")},3837:e=>{"use strict";e.exports=require("util")},1267:e=>{"use strict";e.exports=require("worker_threads")},9796:e=>{"use strict";e.exports=require("zlib")},526:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.grant=t.BaseAuthAPI=t.AuthApiError=void 0;const s=n(8361);const i=n(5467);const r=n(6966);const o=n(8295);class AuthApiError extends Error{constructor(e,t,n,s,i){super(t||e);this.error=e;this.error_description=t;this.statusCode=n;this.body=s;this.headers=i;this.name="AuthApiError"}}t.AuthApiError=AuthApiError;function parseErrorBody(e){const t=JSON.parse(e);let n;if(t.error){n=t}else{n={error:t.code,error_description:t.description}}return n}async function parseError(e){const t=await e.text();try{const n=parseErrorBody(t);return new AuthApiError(n.error,n.error_description,e.status,t,e.headers)}catch(n){return new s.ResponseError(e.status,t,e.headers,"Response returned an error code")}}class BaseAuthAPI extends i.BaseAPI{constructor(e){super({...e,baseUrl:`https://${e.domain}`,middleware:e.telemetry!==false?[new o.TelemetryMiddleware(e)]:[],parseError:parseError,retry:{enabled:false,...e.retry}});this.domain=e.domain;this.clientId=e.clientId;this.clientSecret=e.clientSecret;this.clientAssertionSigningKey=e.clientAssertionSigningKey;this.clientAssertionSigningAlg=e.clientAssertionSigningAlg}async addClientAuthentication(e){return(0,r.addClientAuthentication)({payload:e,domain:this.domain,clientId:this.clientId,clientSecret:this.clientSecret,clientAssertionSigningKey:this.clientAssertionSigningKey,clientAssertionSigningAlg:this.clientAssertionSigningAlg})}}t.BaseAuthAPI=BaseAuthAPI;async function grant(e,t,{idTokenValidateOptions:n,initOverrides:s}={},r,o,A){const a=await A({path:"/oauth/token",method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({client_id:r,...t,grant_type:e})},s);const c=await i.JSONApiResponse.fromResponse(a);if(c.data.id_token){await o.validate(c.data.id_token,n)}return c}t.grant=grant},6966:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.addClientAuthentication=void 0;const o=r(n(4061));const A=n(6008);const addClientAuthentication=async({payload:e,domain:t,clientId:n,clientAssertionSigningKey:s,clientAssertionSigningAlg:i,clientSecret:r})=>{const a=e.client_id||n;if(s&&!e.client_assertion){const n=i||"RS256";const r=await o.importPKCS8(s,n);e.client_assertion=await new o.SignJWT({}).setProtectedHeader({alg:n}).setIssuedAt().setSubject(a).setJti((0,A.v4)()).setIssuer(a).setAudience(`https://${t}/`).setExpirationTime("2mins").sign(r);e.client_assertion_type="urn:ietf:params:oauth:client-assertion-type:jwt-bearer"}else if(r&&!e.client_secret){e.client_secret=r}if((!e.client_secret||e.client_secret.trim().length===0)&&(!e.client_assertion||e.client_assertion.trim().length===0)){throw new Error("The client_secret or client_assertion field is required.")}return e};t.addClientAuthentication=addClientAuthentication},8657:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.Database=void 0;const s=n(4667);const i=n(5467);const r=n(526);class Database extends r.BaseAuthAPI{async signUp(e,t){(0,i.validateRequiredRequestParams)(e,["email","password","connection"]);const n=await this.request({path:"/dbconnections/signup",method:"POST",headers:{"Content-Type":"application/json"},body:{client_id:this.clientId,...e}},t);return s.JSONApiResponse.fromResponse(n)}async changePassword(e,t){(0,i.validateRequiredRequestParams)(e,["email","connection"]);const n=await this.request({path:"/dbconnections/change_password",method:"POST",headers:{"Content-Type":"application/json"},body:{client_id:this.clientId,...e}},t);return s.TextApiResponse.fromResponse(n)}}t.Database=Database},2932:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.IDTokenValidator=t.IdTokenValidatorError=void 0;const o=r(n(4061));const A=60;class IdTokenValidatorError extends Error{}t.IdTokenValidatorError=IdTokenValidatorError;class IDTokenValidator{constructor({domain:e,clientId:t,clientSecret:n,agent:s,headers:i,timeoutDuration:r,idTokenSigningAlg:a="RS256",clockTolerance:c=A}){this.jwks=o.createRemoteJWKSet(new URL(`https://${e}/.well-known/jwks.json`),{timeoutDuration:r,agent:s,headers:i});this.alg=a;this.audience=t;this.secret=(new TextEncoder).encode(n);this.issuer=`https://${e}/`;this.clockTolerance=c}async validate(e,{nonce:t,maxAge:n,organization:s}={}){const i=this.alg==="HS256"?this.secret:this.jwks;const r=o.decodeProtectedHeader(e);const A=o.decodeJwt(e);if(r.alg!=="RS256"&&r.alg!=="HS256"){throw new Error(`Signature algorithm of "${r.alg}" is not supported. Expected the ID token to be signed with "RS256" or "HS256".`)}if(!A.iss||typeof A.iss!=="string"){throw new IdTokenValidatorError("Issuer (iss) claim must be a string present in the ID token")}if(A.iss!==this.issuer){throw new IdTokenValidatorError(`Issuer (iss) claim mismatch in the ID token; expected "${this.issuer}", found "${A.iss}"`)}if(!A.sub||typeof A.sub!=="string"){throw new IdTokenValidatorError("Subject (sub) claim must be a string present in the ID token")}if(!A.aud||!(typeof A.aud==="string"||Array.isArray(A.aud))){throw new IdTokenValidatorError("Audience (aud) claim must be a string or array of strings present in the ID token")}if(Array.isArray(A.aud)&&!A.aud.includes(this.audience)){throw new IdTokenValidatorError(`Audience (aud) claim mismatch in the ID token; expected "${this.audience}" but was not one of "${A.aud.join(", ")}"`)}else if(typeof A.aud==="string"&&A.aud!==this.audience){throw new IdTokenValidatorError(`Audience (aud) claim mismatch in the ID token; expected "${this.audience}" but found "${A.aud}"`)}if(s){if(s.indexOf("org_")===0){if(!A.org_id||typeof A.org_id!=="string"){throw new Error("Organization Id (org_id) claim must be a string present in the ID token")}if(A.org_id!==s){throw new Error(`Organization Id (org_id) claim value mismatch in the ID token; expected "${s}", found "${A.org_id}"'`)}}else{if(!A.org_name||typeof A.org_name!=="string"){throw new Error("Organization Name (org_name) claim must be a string present in the ID token")}if(A.org_name!==s.toLowerCase()){throw new Error(`Organization Name (org_name) claim value mismatch in the ID token; expected "${s}", found "${A.org_name}"'`)}}}const a=Math.floor(Date.now()/1e3);if(!A.exp||typeof A.exp!=="number"){throw new IdTokenValidatorError("Expiration Time (exp) claim must be a number present in the ID token")}const c=A.exp+this.clockTolerance;if(a>c){throw new IdTokenValidatorError(`Expiration Time (exp) claim error in the ID token; current time (${a}) is after expiration time (${c})`)}if(!A.iat||typeof A.iat!=="number"){throw new IdTokenValidatorError("Issued At (iat) claim must be a number present in the ID token")}if(t||A.nonce){if(!A.nonce||typeof A.nonce!=="string"){throw new IdTokenValidatorError("Nonce (nonce) claim must be a string present in the ID token")}if(A.nonce!==t){throw new IdTokenValidatorError(`Nonce (nonce) claim mismatch in the ID token; expected "${t}", found "${A.nonce}"`)}}if(Array.isArray(A.aud)&&A.aud.length>1){if(!A.azp||typeof A.azp!=="string"){throw new IdTokenValidatorError("Authorized Party (azp) claim must be a string present in the ID token when Audience (aud) claim has multiple values")}if(A.azp!==this.audience){throw new IdTokenValidatorError(`Authorized Party (azp) claim mismatch in the ID token; expected "${this.audience}", found "${A.azp}"`)}}if(n){if(!A.auth_time||typeof A.auth_time!=="number"){throw new IdTokenValidatorError("Authentication Time (auth_time) claim must be a number present in the ID token when Max Age (max_age) is specified")}const e=A.auth_time+n+this.clockTolerance;if(a>e){throw new IdTokenValidatorError(`Authentication Time (auth_time) claim in the ID token indicates that too much time has passed since the last end-user authentication. Currrent time (${a}) is after last auth at ${e}`)}}await o.jwtVerify(e,i,{issuer:this.issuer,audience:this.audience,clockTolerance:this.clockTolerance,maxTokenAge:n,algorithms:["HS256","RS256"]})}}t.IDTokenValidator=IDTokenValidator},3776:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__exportStar||function(e,t){for(var n in e)if(n!=="default"&&!Object.prototype.hasOwnProperty.call(t,n))s(t,e,n)};Object.defineProperty(t,"__esModule",{value:true});t.AuthenticationClient=t.AuthApiError=t.IdTokenValidatorError=void 0;const r=n(8657);const o=n(9424);const A=n(4475);i(n(8657),t);i(n(9424),t);i(n(4475),t);var a=n(2932);Object.defineProperty(t,"IdTokenValidatorError",{enumerable:true,get:function(){return a.IdTokenValidatorError}});var c=n(526);Object.defineProperty(t,"AuthApiError",{enumerable:true,get:function(){return c.AuthApiError}});class AuthenticationClient{constructor(e){this.database=new r.Database(e);this.oauth=new o.OAuth(e);this.passwordless=new A.Passwordless(e)}}t.AuthenticationClient=AuthenticationClient},9424:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.OAuth=void 0;const s=n(5467);const i=n(526);const r=n(2932);class OAuth extends i.BaseAuthAPI{constructor(e){super(e);this.idTokenValidator=new r.IDTokenValidator(e)}async authorizationCodeGrant(e,t={}){(0,s.validateRequiredRequestParams)(e,["code"]);return(0,i.grant)("authorization_code",await this.addClientAuthentication(e),t,this.clientId,this.idTokenValidator,this.request.bind(this))}async authorizationCodeGrantWithPKCE(e,t={}){(0,s.validateRequiredRequestParams)(e,["code","code_verifier"]);return(0,i.grant)("authorization_code",await this.addClientAuthentication(e),t,this.clientId,this.idTokenValidator,this.request.bind(this))}async clientCredentialsGrant(e,t={}){(0,s.validateRequiredRequestParams)(e,["audience"]);return(0,i.grant)("client_credentials",await this.addClientAuthentication(e),t,this.clientId,this.idTokenValidator,this.request.bind(this))}async passwordGrant(e,t={}){(0,s.validateRequiredRequestParams)(e,["username","password"]);return(0,i.grant)(e.realm?"http://auth0.com/oauth/grant-type/password-realm":"password",await this.addClientAuthentication(e),t,this.clientId,this.idTokenValidator,this.request.bind(this))}async refreshTokenGrant(e,t={}){(0,s.validateRequiredRequestParams)(e,["refresh_token"]);return(0,i.grant)("refresh_token",await this.addClientAuthentication(e),t,this.clientId,this.idTokenValidator,this.request.bind(this))}async revokeRefreshToken(e,t={}){(0,s.validateRequiredRequestParams)(e,["token"]);const n=await this.request({path:"/oauth/revoke",method:"POST",headers:{"Content-Type":"application/json"},body:await this.addClientAuthentication({client_id:this.clientId,...e})},t.initOverrides);return s.VoidApiResponse.fromResponse(n)}}t.OAuth=OAuth},4475:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.Passwordless=void 0;const s=n(5467);const i=n(526);const r=n(2932);class Passwordless extends i.BaseAuthAPI{constructor(e){super(e);this.idTokenValidator=new r.IDTokenValidator(e)}async sendEmail(e,t){(0,s.validateRequiredRequestParams)(e,["email"]);const n=await this.request({path:"/passwordless/start",method:"POST",headers:{"Content-Type":"application/json"},body:await this.addClientAuthentication({client_id:this.clientId,connection:"email",...e})},t);return s.VoidApiResponse.fromResponse(n)}async sendSMS(e,t){(0,s.validateRequiredRequestParams)(e,["phone_number"]);const n=await this.request({path:"/passwordless/start",method:"POST",headers:{"Content-Type":"application/json"},body:await this.addClientAuthentication({client_id:this.clientId,connection:"sms",...e})},t);return s.VoidApiResponse.fromResponse(n)}async loginWithEmail(e,t={}){(0,s.validateRequiredRequestParams)(e,["email","code"]);const{email:n,code:r,...o}=e;return(0,i.grant)("http://auth0.com/oauth/grant-type/passwordless/otp",await this.addClientAuthentication({username:n,otp:r,realm:"email",...o}),t,this.clientId,this.idTokenValidator,this.request.bind(this))}async loginWithSMS(e,t={}){(0,s.validateRequiredRequestParams)(e,["phone_number","code"]);const{phone_number:n,code:r,...o}=e;return(0,i.grant)("http://auth0.com/oauth/grant-type/passwordless/otp",await this.addClientAuthentication({username:n,otp:r,realm:"sms",...o}),t,this.clientId,this.idTokenValidator,this.request.bind(this))}}t.Passwordless=Passwordless},4035:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.PostProviderRequestNameEnum=t.PatchProviderRequestNameEnum=void 0;const s=n(195);t.PatchProviderRequestNameEnum=s.EmailProviderUpdateNameEnum;t.PostProviderRequestNameEnum=s.EmailProviderCreateNameEnum},4712:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__exportStar||function(e,t){for(var n in e)if(n!=="default"&&!Object.prototype.hasOwnProperty.call(t,n))s(t,e,n)};Object.defineProperty(t,"__esModule",{value:true});i(n(3119),t);i(n(3776),t);i(n(6650),t);i(n(8361),t);i(n(4667),t);i(n(4035),t)},8361:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.RequiredError=t.FetchError=t.TimeoutError=t.ResponseError=void 0;class ResponseError extends Error{constructor(e,t,n,s){super(s);this.statusCode=e;this.body=t;this.headers=n;this.name="ResponseError"}}t.ResponseError=ResponseError;class TimeoutError extends Error{constructor(){super("The request was timed out.");this.name="TimeoutError"}}t.TimeoutError=TimeoutError;class FetchError extends Error{constructor(e,t){super(t);this.cause=e;this.name="FetchError"}}t.FetchError=FetchError;class RequiredError extends Error{constructor(e,t){super(t);this.field=e;this.name="RequiredError"}}t.RequiredError=RequiredError},3551:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__exportStar||function(e,t){for(var n in e)if(n!=="default"&&!Object.prototype.hasOwnProperty.call(t,n))s(t,e,n)};Object.defineProperty(t,"__esModule",{value:true});i(n(8361),t);i(n(4667),t)},8295:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.TelemetryMiddleware=void 0;const s=n(8200);const i=n(4061);class TelemetryMiddleware{constructor(e){this.clientInfo=e.clientInfo||(0,s.generateClientInfo)()}async pre(e){if("string"===typeof this.clientInfo.name&&this.clientInfo.name.length>0){e.init.headers={...e.init.headers,"Auth0-Client":i.base64url.encode(JSON.stringify(this.clientInfo))}}return{url:e.url,init:e.init}}}t.TelemetryMiddleware=TelemetryMiddleware},4667:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.TextApiResponse=t.VoidApiResponse=t.JSONApiResponse=void 0;class JSONApiResponse{constructor(e,t,n,s){this.data=e;this.headers=t;this.status=n;this.statusText=s}static async fromResponse(e){const t=await e.json();return new JSONApiResponse(t,e.headers,e.status,e.statusText)}}t.JSONApiResponse=JSONApiResponse;class VoidApiResponse{constructor(e,t,n){this.headers=e;this.status=t;this.statusText=n}static async fromResponse(e){return new VoidApiResponse(e.headers,e.status,e.statusText)}}t.VoidApiResponse=VoidApiResponse;class TextApiResponse{constructor(e,t,n,s){this.data=e;this.headers=t;this.status=n;this.statusText=s}static async fromResponse(e){const t=await e.text();return new TextApiResponse(t,e.headers,e.status,e.statusText)}}t.TextApiResponse=TextApiResponse},577:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.retry=void 0;const n=250;const s=1e4;const i=3;const r=10;const o=500;function getRandomInt(e,t){e=Math.ceil(e);t=Math.floor(t);return Math.floor(Math.random()*(t-e)+e)}async function pause(e){return new Promise((t=>setTimeout(t,e)))}function retry(e,{maxRetries:t,retryWhen:A}){const a=Math.min(r,t!==null&&t!==void 0?t:i);let c=0;const retryAndWait=async()=>{let t;t=await e();if((A||[429]).includes(t.status)&&c{const n=new AbortController;const s=setTimeout((()=>{n.abort()}),this.timeoutDuration);try{return await this.fetchApi(e,{signal:n.signal,...t})}catch(e){if(e.name==="AbortError"){throw new o.TimeoutError}throw e}finally{clearTimeout(s)}};this.fetch=async(e,t)=>{var n;let s={url:e,init:t};for(const e of this.middleware){if(e.pre){s=await e.pre({fetch:this.fetchWithTimeout,...s})||s}}let i=undefined;let A=undefined;try{i=((n=this.configuration.retry)===null||n===void 0?void 0:n.enabled)!==false?await(0,r.retry)((()=>this.fetchWithTimeout(s.url,s.init)),{...this.configuration.retry}):await this.fetchWithTimeout(s.url,s.init)}catch(e){A=e}if(A||!i.ok){for(const e of this.middleware){if(e.onError){i=await e.onError({fetch:this.fetchWithTimeout,...s,error:A,response:i?i.clone():undefined})||i}}if(i===undefined){throw new o.FetchError(A,"The request failed and the interceptors did not return an alternative response")}}else{for(const e of this.middleware){if(e.post){i=await e.post({fetch:this.fetchApi,...s,response:i.clone()})||i}}}return i};if(e.baseUrl===null||e.baseUrl===undefined){throw new Error("Must provide a base URL for the API")}if("string"!==typeof e.baseUrl||e.baseUrl.length===0){throw new Error("The provided base URL is invalid")}this.middleware=e.middleware||[];this.fetchApi=e.fetch||fetch;this.parseError=e.parseError;this.timeoutDuration=typeof e.timeoutDuration==="number"?e.timeoutDuration:1e4}async request(e,t){const{url:n,init:s}=await this.createFetchParams(e,t);const i=await this.fetch(n,s);if(i&&i.status>=200&&i.status<300){return i}const r=await this.parseError(i);throw r}async createFetchParams(e,t){let n=this.configuration.baseUrl+e.path;if(e.query!==undefined&&Object.keys(e.query).length!==0){n+=`?${querystring(e.query)}`}const s=Object.assign({},this.configuration.headers,e.headers);Object.keys(s).forEach((e=>s[e]===undefined?delete s[e]:{}));const i=typeof t==="function"?t:async()=>t;const r={method:e.method,headers:s,body:e.body,agent:this.configuration.agent};const o={...r,...await i({init:r,context:e})};const A={...o,body:o.body instanceof FormData||o.body instanceof URLSearchParams||o.body instanceof Blob?o.body:JSON.stringify(o.body)};return{url:n,init:A}}}t.BaseAPI=BaseAPI;t.COLLECTION_FORMATS={csv:",",ssv:" ",tsv:"\t",pipes:"|"};function querystring(e){return Object.keys(e).map((t=>querystringSingleKey(t,e[t]))).filter((e=>e.length>0)).join("&")}function querystringSingleKey(e,t){if(t instanceof Array){const n=t.map((e=>encodeURIComponent(String(e)))).join(`&${encodeURIComponent(e)}=`);return`${encodeURIComponent(e)}=${n}`}return`${encodeURIComponent(e)}=${encodeURIComponent(String(t))}`}function validateRequiredRequestParams(e,t){t.forEach((t=>{if(e[t]===null||e[t]===undefined){throw new o.RequiredError(t,`Required parameter requestParameters.${t} was null or undefined.`)}}))}t.validateRequiredRequestParams=validateRequiredRequestParams;function applyQueryParams(e,n){return n.reduce(((n,{key:s,config:i})=>{let r;if(i.isArray){if(i.isCollectionFormatMulti){r=e[s]}else{r=e[s].join(t.COLLECTION_FORMATS[i.collectionFormat])}}else{if(e[s]!==undefined){r=e[s]}}return r!==undefined?{...n,[s]:r}:n}),{})}t.applyQueryParams=applyQueryParams;async function parseFormParam(e){let t=e;t=typeof t=="number"||typeof t=="boolean"?""+t:t;return t}t.parseFormParam=parseFormParam},7248:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__exportStar||function(e,t){for(var n in e)if(n!=="default"&&!Object.prototype.hasOwnProperty.call(t,n))s(t,e,n)};Object.defineProperty(t,"__esModule",{value:true});t.ManagementClientBase=void 0;i(n(892),t);i(n(195),t);const r=n(892);class ManagementClientBase{constructor(e){this.configuration=e;this.actions=new r.ActionsManager(this.configuration);this.anomaly=new r.AnomalyManager(this.configuration);this.attackProtection=new r.AttackProtectionManager(this.configuration);this.blacklists=new r.BlacklistsManager(this.configuration);this.branding=new r.BrandingManager(this.configuration);this.clientGrants=new r.ClientGrantsManager(this.configuration);this.clients=new r.ClientsManager(this.configuration);this.connections=new r.ConnectionsManager(this.configuration);this.customDomains=new r.CustomDomainsManager(this.configuration);this.deviceCredentials=new r.DeviceCredentialsManager(this.configuration);this.emailTemplates=new r.EmailTemplatesManager(this.configuration);this.emails=new r.EmailsManager(this.configuration);this.grants=new r.GrantsManager(this.configuration);this.guardian=new r.GuardianManager(this.configuration);this.hooks=new r.HooksManager(this.configuration);this.jobs=new r.JobsManager(this.configuration);this.keys=new r.KeysManager(this.configuration);this.logStreams=new r.LogStreamsManager(this.configuration);this.logs=new r.LogsManager(this.configuration);this.organizations=new r.OrganizationsManager(this.configuration);this.prompts=new r.PromptsManager(this.configuration);this.resourceServers=new r.ResourceServersManager(this.configuration);this.roles=new r.RolesManager(this.configuration);this.rules=new r.RulesManager(this.configuration);this.rulesConfigs=new r.RulesConfigsManager(this.configuration);this.stats=new r.StatsManager(this.configuration);this.tenants=new r.TenantsManager(this.configuration);this.tickets=new r.TicketsManager(this.configuration);this.userBlocks=new r.UserBlocksManager(this.configuration);this.users=new r.UsersManager(this.configuration);this.usersByEmail=new r.UsersByEmailManager(this.configuration)}}t.ManagementClientBase=ManagementClientBase},8048:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.ActionsManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class ActionsManager extends A{async delete(e,t){o.validateRequiredRequestParams(e,["id"]);const n=o.applyQueryParams(e,[{key:"force",config:{}}]);const s=await this.request({path:`/actions/actions/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE",query:n},t);return o.VoidApiResponse.fromResponse(s)}async get(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/actions/actions/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}async getVersion(e,t){o.validateRequiredRequestParams(e,["actionId","id"]);const n=await this.request({path:`/actions/actions/{actionId}/versions/{id}`.replace("{actionId}",encodeURIComponent(String(e.actionId))).replace("{id}",encodeURIComponent(String(e.id))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}async getVersions(e,t){o.validateRequiredRequestParams(e,["actionId"]);const n=o.applyQueryParams(e,[{key:"page",config:{}},{key:"per_page",config:{}}]);const s=await this.request({path:`/actions/actions/{actionId}/versions`.replace("{actionId}",encodeURIComponent(String(e.actionId))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async getAll(e={},t){const n=o.applyQueryParams(e,[{key:"triggerId",config:{}},{key:"actionName",config:{}},{key:"deployed",config:{}},{key:"page",config:{}},{key:"per_page",config:{}},{key:"installed",config:{}}]);const s=await this.request({path:`/actions/actions`,method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async getTriggerBindings(e,t){o.validateRequiredRequestParams(e,["triggerId"]);const n=o.applyQueryParams(e,[{key:"page",config:{}},{key:"per_page",config:{}}]);const s=await this.request({path:`/actions/triggers/{triggerId}/bindings`.replace("{triggerId}",encodeURIComponent(String(e.triggerId))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async getExecution(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/actions/executions/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}async getAllTriggers(e){const t=await this.request({path:`/actions/triggers`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async update(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/actions/actions/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"PATCH",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async updateTriggerBindings(e,t,n){o.validateRequiredRequestParams(e,["triggerId"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/actions/triggers/{triggerId}/bindings`.replace("{triggerId}",encodeURIComponent(String(e.triggerId))),method:"PATCH",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async create(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/actions/actions`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async deploy(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/actions/actions/{id}/deploy`.replace("{id}",encodeURIComponent(String(e.id))),method:"POST"},t);return o.JSONApiResponse.fromResponse(n)}async deployVersion(e,t,n){o.validateRequiredRequestParams(e,["id","actionId"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/actions/actions/{actionId}/versions/{id}/deploy`.replace("{id}",encodeURIComponent(String(e.id))).replace("{actionId}",encodeURIComponent(String(e.actionId))),method:"POST",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async test(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/actions/actions/{id}/test`.replace("{id}",encodeURIComponent(String(e.id))),method:"POST",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}}t.ActionsManager=ActionsManager},1734:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.AnomalyManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class AnomalyManager extends A{async deleteBlockedIp(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/anomaly/blocks/ips/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async checkIfIpIsBlocked(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/anomaly/blocks/ips/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET"},t);return o.VoidApiResponse.fromResponse(n)}}t.AnomalyManager=AnomalyManager},3716:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.AttackProtectionManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class AttackProtectionManager extends A{async getBreachedPasswordDetectionConfig(e){const t=await this.request({path:`/attack-protection/breached-password-detection`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async getBruteForceConfig(e){const t=await this.request({path:`/attack-protection/brute-force-protection`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async getSuspiciousIpThrottlingConfig(e){const t=await this.request({path:`/attack-protection/suspicious-ip-throttling`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async updateBreachedPasswordDetectionConfig(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/attack-protection/breached-password-detection`,method:"PATCH",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async updateBruteForceConfig(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/attack-protection/brute-force-protection`,method:"PATCH",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async updateSuspiciousIpThrottlingConfig(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/attack-protection/suspicious-ip-throttling`,method:"PATCH",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}}t.AttackProtectionManager=AttackProtectionManager},6654:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.BlacklistsManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class BlacklistsManager extends A{async getAll(e={},t){const n=o.applyQueryParams(e,[{key:"aud",config:{}}]);const s=await this.request({path:`/blacklists/tokens`,method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async add(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/blacklists/tokens`,method:"POST",headers:n,body:e},t);return o.VoidApiResponse.fromResponse(s)}}t.BlacklistsManager=BlacklistsManager},1147:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.BrandingManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class BrandingManager extends A{async deleteTheme(e,t){o.validateRequiredRequestParams(e,["themeId"]);const n=await this.request({path:`/branding/themes/{themeId}`.replace("{themeId}",encodeURIComponent(String(e.themeId))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async deleteUniversalLoginTemplate(e){const t=await this.request({path:`/branding/templates/universal-login`,method:"DELETE"},e);return o.VoidApiResponse.fromResponse(t)}async getSettings(e){const t=await this.request({path:`/branding`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async getTheme(e,t){o.validateRequiredRequestParams(e,["themeId"]);const n=await this.request({path:`/branding/themes/{themeId}`.replace("{themeId}",encodeURIComponent(String(e.themeId))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}async getDefaultTheme(e){const t=await this.request({path:`/branding/themes/default`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async getUniversalLoginTemplate(e){const t=await this.request({path:`/branding/templates/universal-login`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async updateSettings(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/branding`,method:"PATCH",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async updateTheme(e,t,n){o.validateRequiredRequestParams(e,["themeId"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/branding/themes/{themeId}`.replace("{themeId}",encodeURIComponent(String(e.themeId))),method:"PATCH",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async createTheme(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/branding/themes`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async setUniversalLoginTemplate(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/branding/templates/universal-login`,method:"PUT",headers:n,body:e},t);return o.VoidApiResponse.fromResponse(s)}}t.BrandingManager=BrandingManager},5345:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.ClientGrantsManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class ClientGrantsManager extends A{async delete(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/client-grants/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async getAll(e={},t){const n=o.applyQueryParams(e,[{key:"per_page",config:{}},{key:"page",config:{}},{key:"include_totals",config:{}},{key:"audience",config:{}},{key:"client_id",config:{}}]);const s=await this.request({path:`/client-grants`,method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async update(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/client-grants/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"PATCH",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async create(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/client-grants`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}}t.ClientGrantsManager=ClientGrantsManager},2909:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.ClientsManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class ClientsManager extends A{async delete(e,t){o.validateRequiredRequestParams(e,["client_id"]);const n=await this.request({path:`/clients/{client_id}`.replace("{client_id}",encodeURIComponent(String(e.client_id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async deleteCredential(e,t){o.validateRequiredRequestParams(e,["client_id","credential_id"]);const n=await this.request({path:`/clients/{client_id}/credentials/{credential_id}`.replace("{client_id}",encodeURIComponent(String(e.client_id))).replace("{credential_id}",encodeURIComponent(String(e.credential_id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async getAll(e={},t){const n=o.applyQueryParams(e,[{key:"fields",config:{}},{key:"include_fields",config:{}},{key:"page",config:{}},{key:"per_page",config:{}},{key:"include_totals",config:{}},{key:"is_global",config:{}},{key:"is_first_party",config:{}},{key:"app_type",config:{}}]);const s=await this.request({path:`/clients`,method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async get(e,t){o.validateRequiredRequestParams(e,["client_id"]);const n=o.applyQueryParams(e,[{key:"fields",config:{}},{key:"include_fields",config:{}}]);const s=await this.request({path:`/clients/{client_id}`.replace("{client_id}",encodeURIComponent(String(e.client_id))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async getCredentials(e,t){o.validateRequiredRequestParams(e,["client_id"]);const n=await this.request({path:`/clients/{client_id}/credentials`.replace("{client_id}",encodeURIComponent(String(e.client_id))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}async getCredential(e,t){o.validateRequiredRequestParams(e,["client_id","credential_id"]);const n=await this.request({path:`/clients/{client_id}/credentials/{credential_id}`.replace("{client_id}",encodeURIComponent(String(e.client_id))).replace("{credential_id}",encodeURIComponent(String(e.credential_id))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}async update(e,t,n){o.validateRequiredRequestParams(e,["client_id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/clients/{client_id}`.replace("{client_id}",encodeURIComponent(String(e.client_id))),method:"PATCH",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async updateCredential(e,t,n){o.validateRequiredRequestParams(e,["client_id","credential_id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/clients/{client_id}/credentials/{credential_id}`.replace("{client_id}",encodeURIComponent(String(e.client_id))).replace("{credential_id}",encodeURIComponent(String(e.credential_id))),method:"PATCH",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async create(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/clients`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async createCredential(e,t,n){o.validateRequiredRequestParams(e,["client_id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/clients/{client_id}/credentials`.replace("{client_id}",encodeURIComponent(String(e.client_id))),method:"POST",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async rotateClientSecret(e,t){o.validateRequiredRequestParams(e,["client_id"]);const n=await this.request({path:`/clients/{client_id}/rotate-secret`.replace("{client_id}",encodeURIComponent(String(e.client_id))),method:"POST"},t);return o.JSONApiResponse.fromResponse(n)}}t.ClientsManager=ClientsManager},1626:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.ConnectionsManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class ConnectionsManager extends A{async delete(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/connections/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async deleteUserByEmail(e,t){o.validateRequiredRequestParams(e,["id","email"]);const n=o.applyQueryParams(e,[{key:"email",config:{}}]);const s=await this.request({path:`/connections/{id}/users`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE",query:n},t);return o.VoidApiResponse.fromResponse(s)}async getAll(e={},t){const n=o.applyQueryParams(e,[{key:"per_page",config:{}},{key:"page",config:{}},{key:"include_totals",config:{}},{key:"from",config:{}},{key:"take",config:{}},{key:"strategy",config:{isArray:true,isCollectionFormatMulti:true}},{key:"name",config:{}},{key:"fields",config:{}},{key:"include_fields",config:{}}]);const s=await this.request({path:`/connections`,method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async get(e,t){o.validateRequiredRequestParams(e,["id"]);const n=o.applyQueryParams(e,[{key:"fields",config:{}},{key:"include_fields",config:{}}]);const s=await this.request({path:`/connections/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async checkStatus(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/connections/{id}/status`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET"},t);return o.VoidApiResponse.fromResponse(n)}async update(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/connections/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"PATCH",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async create(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/connections`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}}t.ConnectionsManager=ConnectionsManager},6948:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.CustomDomainsManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class CustomDomainsManager extends A{async delete(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/custom-domains/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async getAll(e){const t=await this.request({path:`/custom-domains`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async get(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/custom-domains/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}async update(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/custom-domains/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"PATCH",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async create(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/custom-domains`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async verify(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/custom-domains/{id}/verify`.replace("{id}",encodeURIComponent(String(e.id))),method:"POST"},t);return o.JSONApiResponse.fromResponse(n)}}t.CustomDomainsManager=CustomDomainsManager},4558:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.DeviceCredentialsManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class DeviceCredentialsManager extends A{async delete(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/device-credentials/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async getAll(e={},t){const n=o.applyQueryParams(e,[{key:"page",config:{}},{key:"per_page",config:{}},{key:"include_totals",config:{}},{key:"fields",config:{}},{key:"include_fields",config:{}},{key:"user_id",config:{}},{key:"client_id",config:{}},{key:"type",config:{}}]);const s=await this.request({path:`/device-credentials`,method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async createPublicKey(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/device-credentials`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}}t.DeviceCredentialsManager=DeviceCredentialsManager},537:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.EmailTemplatesManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class EmailTemplatesManager extends A{async get(e,t){o.validateRequiredRequestParams(e,["templateName"]);const n=await this.request({path:`/email-templates/{templateName}`.replace("{templateName}",encodeURIComponent(String(e.templateName))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}async update(e,t,n){o.validateRequiredRequestParams(e,["templateName"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/email-templates/{templateName}`.replace("{templateName}",encodeURIComponent(String(e.templateName))),method:"PATCH",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async create(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/email-templates`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async put(e,t,n){o.validateRequiredRequestParams(e,["templateName"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/email-templates/{templateName}`.replace("{templateName}",encodeURIComponent(String(e.templateName))),method:"PUT",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}}t.EmailTemplatesManager=EmailTemplatesManager},3541:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.EmailsManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class EmailsManager extends A{async get(e={},t){const n=o.applyQueryParams(e,[{key:"fields",config:{}},{key:"include_fields",config:{}}]);const s=await this.request({path:`/emails/provider`,method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async update(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/emails/provider`,method:"PATCH",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async configure(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/emails/provider`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}}t.EmailsManager=EmailsManager},513:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.GrantsManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class GrantsManager extends A{async delete(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/grants/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async deleteByUserId(e,t){o.validateRequiredRequestParams(e,["user_id"]);const n=o.applyQueryParams(e,[{key:"user_id",config:{}}]);const s=await this.request({path:`/grants`,method:"DELETE",query:n},t);return o.VoidApiResponse.fromResponse(s)}async getAll(e={},t){const n=o.applyQueryParams(e,[{key:"per_page",config:{}},{key:"page",config:{}},{key:"include_totals",config:{}},{key:"user_id",config:{}},{key:"client_id",config:{}},{key:"audience",config:{}}]);const s=await this.request({path:`/grants`,method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}}t.GrantsManager=GrantsManager},5428:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.GuardianManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class GuardianManager extends A{async deleteGuardianEnrollment(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/guardian/enrollments/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async getPushNotificationProviderAPNS(e){const t=await this.request({path:`/guardian/factors/push-notification/providers/apns`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async getGuardianEnrollment(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/guardian/enrollments/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}async getPhoneFactorTemplates(e){const t=await this.request({path:`/guardian/factors/phone/templates`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async getSmsFactorTemplates(e){const t=await this.request({path:`/guardian/factors/sms/templates`,method:"GET"},e);return t.status===204?o.VoidApiResponse.fromResponse(t):o.JSONApiResponse.fromResponse(t)}async getFactors(e){const t=await this.request({path:`/guardian/factors`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async getPhoneFactorMessageTypes(e){const t=await this.request({path:`/guardian/factors/phone/message-types`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async getPhoneFactorSelectedProvider(e){const t=await this.request({path:`/guardian/factors/phone/selected-provider`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async getPhoneFactorProviderTwilio(e){const t=await this.request({path:`/guardian/factors/phone/providers/twilio`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async getPushNotificationSelectedProvider(e){const t=await this.request({path:`/guardian/factors/push-notification/selected-provider`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async getPolicies(e){const t=await this.request({path:`/guardian/policies`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async getSmsSelectedProvider(e){const t=await this.request({path:`/guardian/factors/sms/selected-provider`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async getSmsFactorProviderTwilio(e){const t=await this.request({path:`/guardian/factors/sms/providers/twilio`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async getPushNotificationProviderSNS(e){const t=await this.request({path:`/guardian/factors/push-notification/providers/sns`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async updatePushNotificationProviderAPNS(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/guardian/factors/push-notification/providers/apns`,method:"PATCH",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async updatePushNotificationProviderFCM(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/guardian/factors/push-notification/providers/fcm`,method:"PATCH",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async updatePushNotificationProviderSNS(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/guardian/factors/push-notification/providers/sns`,method:"PATCH",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async createEnrollmentTicket(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/guardian/enrollments/ticket`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async setPushNotificationProviderAPNS(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/guardian/factors/push-notification/providers/apns`,method:"PUT",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async setPhoneFactorTemplates(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/guardian/factors/phone/templates`,method:"PUT",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async setSmsFactorTemplates(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/guardian/factors/sms/templates`,method:"PUT",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async updateFactor(e,t,n){o.validateRequiredRequestParams(e,["name"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/guardian/factors/{name}`.replace("{name}",encodeURIComponent(String(e.name))),method:"PUT",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async setPushNotificationProviderFCM(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/guardian/factors/push-notification/providers/fcm`,method:"PUT",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async updatePhoneFactorMessageTypes(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/guardian/factors/phone/message-types`,method:"PUT",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async updatePhoneFactorSelectedProvider(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/guardian/factors/phone/selected-provider`,method:"PUT",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async setPushNotificationSelectedProvider(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/guardian/factors/push-notification/selected-provider`,method:"PUT",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async updatePolicies(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/guardian/policies`,method:"PUT",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async setSmsSelectedProvider(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/guardian/factors/sms/selected-provider`,method:"PUT",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async setSmsFactorProviderTwilio(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/guardian/factors/sms/providers/twilio`,method:"PUT",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async setPushNotificationProviderSNS(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/guardian/factors/push-notification/providers/sns`,method:"PUT",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async updatePhoneFactorProviderTwilio(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/guardian/factors/phone/providers/twilio`,method:"PUT",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}}t.GuardianManager=GuardianManager},8476:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.HooksManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class HooksManager extends A{async delete(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/hooks/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async deleteSecrets(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/hooks/{id}/secrets`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE",headers:s,body:t},n);return o.VoidApiResponse.fromResponse(i)}async getAll(e={},t){const n=o.applyQueryParams(e,[{key:"page",config:{}},{key:"per_page",config:{}},{key:"include_totals",config:{}},{key:"enabled",config:{}},{key:"fields",config:{}},{key:"triggerId",config:{}}]);const s=await this.request({path:`/hooks`,method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async get(e,t){o.validateRequiredRequestParams(e,["id"]);const n=o.applyQueryParams(e,[{key:"fields",config:{}}]);const s=await this.request({path:`/hooks/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async getSecrets(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/hooks/{id}/secrets`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}async update(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/hooks/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"PATCH",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async updateSecrets(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/hooks/{id}/secrets`.replace("{id}",encodeURIComponent(String(e.id))),method:"PATCH",headers:s,body:t},n);return o.VoidApiResponse.fromResponse(i)}async create(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/hooks`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async addSecrets(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/hooks/{id}/secrets`.replace("{id}",encodeURIComponent(String(e.id))),method:"POST",headers:s,body:t},n);return o.VoidApiResponse.fromResponse(i)}}t.HooksManager=HooksManager},892:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__exportStar||function(e,t){for(var n in e)if(n!=="default"&&!Object.prototype.hasOwnProperty.call(t,n))s(t,e,n)};Object.defineProperty(t,"__esModule",{value:true});i(n(8048),t);i(n(1734),t);i(n(3716),t);i(n(6654),t);i(n(1147),t);i(n(5345),t);i(n(2909),t);i(n(1626),t);i(n(6948),t);i(n(4558),t);i(n(537),t);i(n(3541),t);i(n(513),t);i(n(5428),t);i(n(8476),t);i(n(486),t);i(n(2318),t);i(n(1118),t);i(n(4415),t);i(n(1302),t);i(n(6462),t);i(n(9160),t);i(n(2347),t);i(n(8556),t);i(n(683),t);i(n(5670),t);i(n(74),t);i(n(5744),t);i(n(2521),t);i(n(1713),t);i(n(6207),t)},486:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.JobsManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class JobsManager extends A{async getErrors(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/jobs/{id}/errors`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET"},t);return n.status===204?o.VoidApiResponse.fromResponse(n):o.JSONApiResponse.fromResponse(n)}async get(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/jobs/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}async exportUsers(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/jobs/users-exports`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async importUsers(e,t){const n=new FormData;if(e.users!==undefined){n.append("users",await o.parseFormParam(e.users))}if(e.connection_id!==undefined){n.append("connection_id",await o.parseFormParam(e.connection_id))}if(e.upsert!==undefined){n.append("upsert",await o.parseFormParam(e.upsert))}if(e.external_id!==undefined){n.append("external_id",await o.parseFormParam(e.external_id))}if(e.send_completion_email!==undefined){n.append("send_completion_email",await o.parseFormParam(e.send_completion_email))}const s=await this.request({path:`/jobs/users-imports`,method:"POST",body:n},t);return o.JSONApiResponse.fromResponse(s)}async verifyEmail(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/jobs/verification-email`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}}t.JobsManager=JobsManager},2318:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.KeysManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class KeysManager extends A{async get(e,t){o.validateRequiredRequestParams(e,["kid"]);const n=await this.request({path:`/keys/signing/{kid}`.replace("{kid}",encodeURIComponent(String(e.kid))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}async getAll(e){const t=await this.request({path:`/keys/signing`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async rotate(e){const t=await this.request({path:`/keys/signing/rotate`,method:"POST"},e);return o.JSONApiResponse.fromResponse(t)}async revoke(e,t){o.validateRequiredRequestParams(e,["kid"]);const n=await this.request({path:`/keys/signing/{kid}/revoke`.replace("{kid}",encodeURIComponent(String(e.kid))),method:"PUT"},t);return o.JSONApiResponse.fromResponse(n)}}t.KeysManager=KeysManager},1118:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.LogStreamsManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class LogStreamsManager extends A{async delete(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/log-streams/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async getAll(e){const t=await this.request({path:`/log-streams`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async get(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/log-streams/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}async update(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/log-streams/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"PATCH",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async create(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/log-streams`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}}t.LogStreamsManager=LogStreamsManager},4415:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.LogsManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class LogsManager extends A{async getAll(e={},t){const n=o.applyQueryParams(e,[{key:"page",config:{}},{key:"per_page",config:{}},{key:"sort",config:{}},{key:"fields",config:{}},{key:"include_fields",config:{}},{key:"include_totals",config:{}},{key:"from",config:{}},{key:"take",config:{}},{key:"q",config:{}}]);const s=await this.request({path:`/logs`,method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async get(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/logs/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}}t.LogsManager=LogsManager},1302:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.OrganizationsManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class OrganizationsManager extends A{async deleteEnabledConnection(e,t){o.validateRequiredRequestParams(e,["id","connectionId"]);const n=await this.request({path:`/organizations/{id}/enabled_connections/{connectionId}`.replace("{id}",encodeURIComponent(String(e.id))).replace("{connectionId}",encodeURIComponent(String(e.connectionId))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async deleteInvitation(e,t){o.validateRequiredRequestParams(e,["id","invitation_id"]);const n=await this.request({path:`/organizations/{id}/invitations/{invitation_id}`.replace("{id}",encodeURIComponent(String(e.id))).replace("{invitation_id}",encodeURIComponent(String(e.invitation_id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async deleteMembers(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/organizations/{id}/members`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE",headers:s,body:t},n);return o.VoidApiResponse.fromResponse(i)}async deleteMemberRoles(e,t,n){o.validateRequiredRequestParams(e,["id","user_id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/organizations/{id}/members/{user_id}/roles`.replace("{id}",encodeURIComponent(String(e.id))).replace("{user_id}",encodeURIComponent(String(e.user_id))),method:"DELETE",headers:s,body:t},n);return o.VoidApiResponse.fromResponse(i)}async delete(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/organizations/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async getEnabledConnections(e,t){o.validateRequiredRequestParams(e,["id"]);const n=o.applyQueryParams(e,[{key:"page",config:{}},{key:"per_page",config:{}},{key:"include_totals",config:{}}]);const s=await this.request({path:`/organizations/{id}/enabled_connections`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async getEnabledConnection(e,t){o.validateRequiredRequestParams(e,["id","connectionId"]);const n=await this.request({path:`/organizations/{id}/enabled_connections/{connectionId}`.replace("{id}",encodeURIComponent(String(e.id))).replace("{connectionId}",encodeURIComponent(String(e.connectionId))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}async getInvitations(e,t){o.validateRequiredRequestParams(e,["id"]);const n=o.applyQueryParams(e,[{key:"page",config:{}},{key:"per_page",config:{}},{key:"include_totals",config:{}},{key:"fields",config:{}},{key:"include_fields",config:{}},{key:"sort",config:{}}]);const s=await this.request({path:`/organizations/{id}/invitations`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async getInvitation(e,t){o.validateRequiredRequestParams(e,["id","invitation_id"]);const n=o.applyQueryParams(e,[{key:"fields",config:{}},{key:"include_fields",config:{}}]);const s=await this.request({path:`/organizations/{id}/invitations/{invitation_id}`.replace("{id}",encodeURIComponent(String(e.id))).replace("{invitation_id}",encodeURIComponent(String(e.invitation_id))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async getMembers(e,t){o.validateRequiredRequestParams(e,["id"]);const n=o.applyQueryParams(e,[{key:"page",config:{}},{key:"per_page",config:{}},{key:"include_totals",config:{}},{key:"from",config:{}},{key:"take",config:{}},{key:"fields",config:{}},{key:"include_fields",config:{}}]);const s=await this.request({path:`/organizations/{id}/members`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async getByName(e,t){o.validateRequiredRequestParams(e,["name"]);const n=await this.request({path:`/organizations/name/{name}`.replace("{name}",encodeURIComponent(String(e.name))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}async getMemberRoles(e,t){o.validateRequiredRequestParams(e,["id","user_id"]);const n=o.applyQueryParams(e,[{key:"page",config:{}},{key:"per_page",config:{}},{key:"include_totals",config:{}}]);const s=await this.request({path:`/organizations/{id}/members/{user_id}/roles`.replace("{id}",encodeURIComponent(String(e.id))).replace("{user_id}",encodeURIComponent(String(e.user_id))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async getAll(e={},t){const n=o.applyQueryParams(e,[{key:"page",config:{}},{key:"per_page",config:{}},{key:"include_totals",config:{}},{key:"from",config:{}},{key:"take",config:{}},{key:"sort",config:{}}]);const s=await this.request({path:`/organizations`,method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async get(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/organizations/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}async updateEnabledConnection(e,t,n){o.validateRequiredRequestParams(e,["id","connectionId"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/organizations/{id}/enabled_connections/{connectionId}`.replace("{id}",encodeURIComponent(String(e.id))).replace("{connectionId}",encodeURIComponent(String(e.connectionId))),method:"PATCH",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async update(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/organizations/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"PATCH",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async addEnabledConnection(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/organizations/{id}/enabled_connections`.replace("{id}",encodeURIComponent(String(e.id))),method:"POST",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async createInvitation(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/organizations/{id}/invitations`.replace("{id}",encodeURIComponent(String(e.id))),method:"POST",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async addMembers(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/organizations/{id}/members`.replace("{id}",encodeURIComponent(String(e.id))),method:"POST",headers:s,body:t},n);return o.VoidApiResponse.fromResponse(i)}async addMemberRoles(e,t,n){o.validateRequiredRequestParams(e,["id","user_id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/organizations/{id}/members/{user_id}/roles`.replace("{id}",encodeURIComponent(String(e.id))).replace("{user_id}",encodeURIComponent(String(e.user_id))),method:"POST",headers:s,body:t},n);return o.VoidApiResponse.fromResponse(i)}async create(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/organizations`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}}t.OrganizationsManager=OrganizationsManager},6462:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.PromptsManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class PromptsManager extends A{async getCustomTextByLanguage(e,t){o.validateRequiredRequestParams(e,["prompt","language"]);const n=await this.request({path:`/prompts/{prompt}/custom-text/{language}`.replace("{prompt}",encodeURIComponent(String(e.prompt))).replace("{language}",encodeURIComponent(String(e.language))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}async get(e){const t=await this.request({path:`/prompts`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async update(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/prompts`,method:"PATCH",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async updateCustomTextByLanguage(e,t,n){o.validateRequiredRequestParams(e,["prompt","language"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/prompts/{prompt}/custom-text/{language}`.replace("{prompt}",encodeURIComponent(String(e.prompt))).replace("{language}",encodeURIComponent(String(e.language))),method:"PUT",headers:s,body:t},n);return o.VoidApiResponse.fromResponse(i)}}t.PromptsManager=PromptsManager},9160:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.ResourceServersManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class ResourceServersManager extends A{async delete(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/resource-servers/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async getAll(e={},t){const n=o.applyQueryParams(e,[{key:"page",config:{}},{key:"per_page",config:{}},{key:"include_totals",config:{}},{key:"include_fields",config:{}}]);const s=await this.request({path:`/resource-servers`,method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async get(e,t){o.validateRequiredRequestParams(e,["id"]);const n=o.applyQueryParams(e,[{key:"include_fields",config:{}}]);const s=await this.request({path:`/resource-servers/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async update(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/resource-servers/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"PATCH",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async create(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/resource-servers`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}}t.ResourceServersManager=ResourceServersManager},2347:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.RolesManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class RolesManager extends A{async deletePermissions(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/roles/{id}/permissions`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE",headers:s,body:t},n);return o.VoidApiResponse.fromResponse(i)}async delete(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/roles/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async getPermissions(e,t){o.validateRequiredRequestParams(e,["id"]);const n=o.applyQueryParams(e,[{key:"per_page",config:{}},{key:"page",config:{}},{key:"include_totals",config:{}}]);const s=await this.request({path:`/roles/{id}/permissions`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async getUsers(e,t){o.validateRequiredRequestParams(e,["id"]);const n=o.applyQueryParams(e,[{key:"per_page",config:{}},{key:"page",config:{}},{key:"include_totals",config:{}},{key:"from",config:{}},{key:"take",config:{}}]);const s=await this.request({path:`/roles/{id}/users`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async getAll(e={},t){const n=o.applyQueryParams(e,[{key:"per_page",config:{}},{key:"page",config:{}},{key:"include_totals",config:{}},{key:"name_filter",config:{}}]);const s=await this.request({path:`/roles`,method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async get(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/roles/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}async update(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/roles/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"PATCH",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async addPermissions(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/roles/{id}/permissions`.replace("{id}",encodeURIComponent(String(e.id))),method:"POST",headers:s,body:t},n);return o.VoidApiResponse.fromResponse(i)}async assignUsers(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/roles/{id}/users`.replace("{id}",encodeURIComponent(String(e.id))),method:"POST",headers:s,body:t},n);return o.VoidApiResponse.fromResponse(i)}async create(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/roles`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}}t.RolesManager=RolesManager},683:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.RulesConfigsManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class RulesConfigsManager extends A{async delete(e,t){o.validateRequiredRequestParams(e,["key"]);const n=await this.request({path:`/rules-configs/{key}`.replace("{key}",encodeURIComponent(String(e.key))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async getAll(e){const t=await this.request({path:`/rules-configs`,method:"GET"},e);return o.JSONApiResponse.fromResponse(t)}async set(e,t,n){o.validateRequiredRequestParams(e,["key"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/rules-configs/{key}`.replace("{key}",encodeURIComponent(String(e.key))),method:"PUT",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}}t.RulesConfigsManager=RulesConfigsManager},8556:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.RulesManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class RulesManager extends A{async delete(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/rules/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async getAll(e={},t){const n=o.applyQueryParams(e,[{key:"page",config:{}},{key:"per_page",config:{}},{key:"include_totals",config:{}},{key:"enabled",config:{}},{key:"fields",config:{}},{key:"include_fields",config:{}}]);const s=await this.request({path:`/rules`,method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async get(e,t){o.validateRequiredRequestParams(e,["id"]);const n=o.applyQueryParams(e,[{key:"fields",config:{}},{key:"include_fields",config:{}}]);const s=await this.request({path:`/rules/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async update(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/rules/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"PATCH",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async create(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/rules`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}}t.RulesManager=RulesManager},5670:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.StatsManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class StatsManager extends A{async getActiveUsersCount(e){const t=await this.request({path:`/stats/active-users`,method:"GET"},e);return o.TextApiResponse.fromResponse(t)}async getDaily(e={},t){const n=o.applyQueryParams(e,[{key:"from",config:{}},{key:"to",config:{}}]);const s=await this.request({path:`/stats/daily`,method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}}t.StatsManager=StatsManager},74:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.TenantsManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class TenantsManager extends A{async updateSettings(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/tenants/settings`,method:"PATCH",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async getSettings(e={},t){const n=o.applyQueryParams(e,[{key:"fields",config:{}},{key:"include_fields",config:{}}]);const s=await this.request({path:`/tenants/settings`,method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}}t.TenantsManager=TenantsManager},5744:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.TicketsManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class TicketsManager extends A{async verifyEmail(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/tickets/email-verification`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async changePassword(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/tickets/password-change`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}}t.TicketsManager=TicketsManager},2521:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.UserBlocksManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class UserBlocksManager extends A{async deleteAll(e,t){o.validateRequiredRequestParams(e,["identifier"]);const n=o.applyQueryParams(e,[{key:"identifier",config:{}}]);const s=await this.request({path:`/user-blocks`,method:"DELETE",query:n},t);return o.VoidApiResponse.fromResponse(s)}async delete(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/user-blocks/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async getAll(e,t){o.validateRequiredRequestParams(e,["identifier"]);const n=o.applyQueryParams(e,[{key:"identifier",config:{}},{key:"consider_brute_force_enablement",config:{}}]);const s=await this.request({path:`/user-blocks`,method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async get(e,t){o.validateRequiredRequestParams(e,["id"]);const n=o.applyQueryParams(e,[{key:"consider_brute_force_enablement",config:{}}]);const s=await this.request({path:`/user-blocks/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}}t.UserBlocksManager=UserBlocksManager},6207:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.UsersByEmailManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class UsersByEmailManager extends A{async getByEmail(e,t){o.validateRequiredRequestParams(e,["email"]);const n=o.applyQueryParams(e,[{key:"fields",config:{}},{key:"include_fields",config:{}},{key:"email",config:{}}]);const s=await this.request({path:`/users-by-email`,method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}}t.UsersByEmailManager=UsersByEmailManager},1713:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:true,value:t})}:function(e,t){e["default"]=t});var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var n in e)if(n!=="default"&&Object.prototype.hasOwnProperty.call(e,n))s(t,e,n);i(t,e);return t};Object.defineProperty(t,"__esModule",{value:true});t.UsersManager=void 0;const o=r(n(5467));const{BaseAPI:A}=o;class UsersManager extends A{async deleteAuthenticationMethods(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/users/{id}/authentication-methods`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async deleteAuthenticationMethod(e,t){o.validateRequiredRequestParams(e,["id","authentication_method_id"]);const n=await this.request({path:`/users/{id}/authentication-methods/{authentication_method_id}`.replace("{id}",encodeURIComponent(String(e.id))).replace("{authentication_method_id}",encodeURIComponent(String(e.authentication_method_id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async deleteAllAuthenticators(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/users/{id}/authenticators`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async deleteMultifactorProvider(e,t){o.validateRequiredRequestParams(e,["id","provider"]);const n=await this.request({path:`/users/{id}/multifactor/{provider}`.replace("{id}",encodeURIComponent(String(e.id))).replace("{provider}",encodeURIComponent(String(e.provider))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async deletePermissions(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/users/{id}/permissions`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE",headers:s,body:t},n);return o.VoidApiResponse.fromResponse(i)}async unlink(e,t){o.validateRequiredRequestParams(e,["id","provider","user_id"]);const n=await this.request({path:`/users/{id}/identities/{provider}/{user_id}`.replace("{id}",encodeURIComponent(String(e.id))).replace("{provider}",encodeURIComponent(String(e.provider))).replace("{user_id}",encodeURIComponent(String(e.user_id))),method:"DELETE"},t);return o.JSONApiResponse.fromResponse(n)}async deleteRoles(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/users/{id}/roles`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE",headers:s,body:t},n);return o.VoidApiResponse.fromResponse(i)}async delete(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/users/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"DELETE"},t);return o.VoidApiResponse.fromResponse(n)}async getAuthenticationMethods(e,t){o.validateRequiredRequestParams(e,["id"]);const n=o.applyQueryParams(e,[{key:"page",config:{}},{key:"per_page",config:{}},{key:"include_totals",config:{}}]);const s=await this.request({path:`/users/{id}/authentication-methods`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async getAuthenticationMethod(e,t){o.validateRequiredRequestParams(e,["id","authentication_method_id"]);const n=await this.request({path:`/users/{id}/authentication-methods/{authentication_method_id}`.replace("{id}",encodeURIComponent(String(e.id))).replace("{authentication_method_id}",encodeURIComponent(String(e.authentication_method_id))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}async getEnrollments(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/users/{id}/enrollments`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET"},t);return o.JSONApiResponse.fromResponse(n)}async getLogs(e,t){o.validateRequiredRequestParams(e,["id"]);const n=o.applyQueryParams(e,[{key:"page",config:{}},{key:"per_page",config:{}},{key:"sort",config:{}},{key:"include_totals",config:{}}]);const s=await this.request({path:`/users/{id}/logs`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async getPermissions(e,t){o.validateRequiredRequestParams(e,["id"]);const n=o.applyQueryParams(e,[{key:"per_page",config:{}},{key:"page",config:{}},{key:"include_totals",config:{}}]);const s=await this.request({path:`/users/{id}/permissions`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async getUserOrganizations(e,t){o.validateRequiredRequestParams(e,["id"]);const n=o.applyQueryParams(e,[{key:"page",config:{}},{key:"per_page",config:{}},{key:"include_totals",config:{}}]);const s=await this.request({path:`/users/{id}/organizations`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async getRoles(e,t){o.validateRequiredRequestParams(e,["id"]);const n=o.applyQueryParams(e,[{key:"per_page",config:{}},{key:"page",config:{}},{key:"include_totals",config:{}}]);const s=await this.request({path:`/users/{id}/roles`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async getAll(e={},t){const n=o.applyQueryParams(e,[{key:"page",config:{}},{key:"per_page",config:{}},{key:"include_totals",config:{}},{key:"sort",config:{}},{key:"connection",config:{}},{key:"fields",config:{}},{key:"include_fields",config:{}},{key:"q",config:{}},{key:"search_engine",config:{}}]);const s=await this.request({path:`/users`,method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async get(e,t){o.validateRequiredRequestParams(e,["id"]);const n=o.applyQueryParams(e,[{key:"fields",config:{}},{key:"include_fields",config:{}}]);const s=await this.request({path:`/users/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"GET",query:n},t);return o.JSONApiResponse.fromResponse(s)}async updateAuthenticationMethod(e,t,n){o.validateRequiredRequestParams(e,["id","authentication_method_id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/users/{id}/authentication-methods/{authentication_method_id}`.replace("{id}",encodeURIComponent(String(e.id))).replace("{authentication_method_id}",encodeURIComponent(String(e.authentication_method_id))),method:"PATCH",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async update(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/users/{id}`.replace("{id}",encodeURIComponent(String(e.id))),method:"PATCH",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async createAuthenticationMethod(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/users/{id}/authentication-methods`.replace("{id}",encodeURIComponent(String(e.id))),method:"POST",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async link(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/users/{id}/identities`.replace("{id}",encodeURIComponent(String(e.id))),method:"POST",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}async invalidateRememberBrowser(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/users/{id}/multifactor/actions/invalidate-remember-browser`.replace("{id}",encodeURIComponent(String(e.id))),method:"POST"},t);return o.VoidApiResponse.fromResponse(n)}async assignPermissions(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/users/{id}/permissions`.replace("{id}",encodeURIComponent(String(e.id))),method:"POST",headers:s,body:t},n);return o.VoidApiResponse.fromResponse(i)}async regenerateRecoveryCode(e,t){o.validateRequiredRequestParams(e,["id"]);const n=await this.request({path:`/users/{id}/recovery-code-regeneration`.replace("{id}",encodeURIComponent(String(e.id))),method:"POST"},t);return o.JSONApiResponse.fromResponse(n)}async assignRoles(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/users/{id}/roles`.replace("{id}",encodeURIComponent(String(e.id))),method:"POST",headers:s,body:t},n);return o.VoidApiResponse.fromResponse(i)}async create(e,t){const n={};n["Content-Type"]="application/json";const s=await this.request({path:`/users`,method:"POST",headers:n,body:e},t);return o.JSONApiResponse.fromResponse(s)}async updateAuthenticationMethods(e,t,n){o.validateRequiredRequestParams(e,["id"]);const s={};s["Content-Type"]="application/json";const i=await this.request({path:`/users/{id}/authentication-methods`.replace("{id}",encodeURIComponent(String(e.id))),method:"PUT",headers:s,body:t},n);return o.JSONApiResponse.fromResponse(i)}}t.UsersManager=UsersManager},195:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.GetExecution200ResponseStatusEnum=t.GetEmailTemplatesByTemplateName200ResponseTemplateEnum=t.GetCredentials200ResponseInnerAlgEnum=t.GetBruteForceProtection200ResponseModeEnum=t.GetBruteForceProtection200ResponseShieldsEnum=t.GetBreachedPasswordDetection200ResponseStagePreUserRegistrationShieldsEnum=t.GetBreachedPasswordDetection200ResponseMethodEnum=t.GetBreachedPasswordDetection200ResponseAdminNotificationFrequencyEnum=t.GetBreachedPasswordDetection200ResponseShieldsEnum=t.GetAuthenticationMethods200ResponseOneOfInnerAuthenticationMethodsInnerTypeEnum=t.GetAuthenticationMethods200ResponseOneOfInnerPreferredAuthenticationMethodEnum=t.GetAuthenticationMethods200ResponseOneOfInnerTypeEnum=t.GetActions200ResponseActionsInnerSupportedTriggersInnerIdAnyOf=t.GetActions200ResponseActionsInnerIntegrationCurrentReleaseRequiredSecretsInnerTypeEnum=t.GetActions200ResponseActionsInnerIntegrationFeatureTypeEnum=t.GetActions200ResponseActionsInnerStatusEnum=t.GetActionVersions200ResponseVersionsInnerStatusEnum=t.FactorNameEnum=t.EnrollmentStatusEnum=t.EmailTemplateUpdateTemplateEnum=t.EmailProviderUpdateNameEnum=t.EmailProviderCreateNameEnum=t.DeviceCredentialCreateTypeEnum=t.DeviceCredentialTypeEnum=t.CustomDomainTypeEnum=t.CustomDomainStatusEnum=t.ConnectionUpdateOptionsSetUserRootAttributesEnum=t.ConnectionUpdateOptionsPasswordPolicyEnum=t.ConnectionCreateOptionsPasskeyOptionsChallengeUiEnum=t.ConnectionCreateOptionsSetUserRootAttributesEnum=t.ConnectionCreateOptionsPasswordPolicyEnum=t.ConnectionCreateStrategyEnum=t.ClientUpdateJwtConfigurationAlgEnum=t.ClientUpdateOrganizationRequireBehaviorEnum=t.ClientUpdateOrganizationUsageEnum=t.ClientUpdateAppTypeEnum=t.ClientUpdateTokenEndpointAuthMethodEnum=t.ClientRefreshTokenExpirationTypeEnum=t.ClientRefreshTokenRotationTypeEnum=t.ClientJwtConfigurationAlgEnum=t.ClientCreateJwtConfigurationAlgEnum=t.ClientCreateClientAuthenticationMethodsPrivateKeyJwtCredentialsInnerAlgEnum=t.ClientCreateClientAuthenticationMethodsPrivateKeyJwtCredentialsInnerCredentialTypeEnum=t.ClientCreateOrganizationRequireBehaviorEnum=t.ClientCreateOrganizationUsageEnum=t.ClientCreateAppTypeEnum=t.ClientCreateTokenEndpointAuthMethodEnum=t.ClientOrganizationRequireBehaviorEnum=t.ClientOrganizationUsageEnum=t.ClientTokenEndpointAuthMethodEnum=void 0;t.PostBrandingThemeRequestBordersInputsStyleEnum=t.PostBrandingThemeRequestBordersButtonsStyleEnum=t.PostAuthenticationMethodsRequestPreferredAuthenticationMethodEnum=t.PostAuthenticationMethodsRequestTypeEnum=t.PostAuthenticationMethods201ResponsePreferredAuthenticationMethodEnum=t.PostAuthenticationMethods201ResponseTypeEnum=t.PatchSuspiciousIpThrottlingRequestShieldsEnum=t.PatchLogStreamsByIdRequestSinkOneOf3MixpanelRegionEnum=t.PatchLogStreamsByIdRequestSinkOneOfDatadogRegionEnum=t.PatchLogStreamsByIdRequestStatusEnum=t.PatchEmailTemplatesByTemplateNameRequestTemplateEnum=t.PatchCustomDomainsByIdRequestCustomClientIpHeaderEnum=t.PatchCustomDomainsByIdRequestTlsPolicyEnum=t.PatchBruteForceProtectionRequestModeEnum=t.PatchBruteForceProtectionRequestShieldsEnum=t.PatchBreachedPasswordDetectionRequestStagePreUserRegistrationShieldsEnum=t.PatchBreachedPasswordDetectionRequestMethodEnum=t.PatchBreachedPasswordDetectionRequestAdminNotificationFrequencyEnum=t.PatchBreachedPasswordDetectionRequestShieldsEnum=t.PatchBindingsRequestBindingsInnerOneOfRefTypeEnum=t.PatchAuthenticationMethodsByAuthenticationMethodIdRequestPreferredAuthenticationMethodEnum=t.JobFormatEnum=t.HookCreateTriggerIdEnum=t.GetSuspiciousIpThrottling200ResponseShieldsEnum=t.GetPnProviders200ResponseProviderEnum=t.GetPhoneProviders200ResponseProviderEnum=t.GetMessageTypes200ResponseMessageTypesEnum=t.GetLogStreams200ResponseInnerOneOfSinkHttpContentFormatEnum=t.GetLogStreams200ResponseInnerOneOfFiltersInnerNameEnum=t.GetLogStreams200ResponseInnerOneOfFiltersInnerTypeEnum=t.GetLogStreams200ResponseInnerOneOf7SinkMixpanelRegionEnum=t.GetLogStreams200ResponseInnerOneOf7TypeEnum=t.GetLogStreams200ResponseInnerOneOf7StatusEnum=t.GetLogStreams200ResponseInnerOneOf6TypeEnum=t.GetLogStreams200ResponseInnerOneOf6StatusEnum=t.GetLogStreams200ResponseInnerOneOf5TypeEnum=t.GetLogStreams200ResponseInnerOneOf5StatusEnum=t.GetLogStreams200ResponseInnerOneOf4TypeEnum=t.GetLogStreams200ResponseInnerOneOf4StatusEnum=t.GetLogStreams200ResponseInnerOneOf3SinkDatadogRegionEnum=t.GetLogStreams200ResponseInnerOneOf3TypeEnum=t.GetLogStreams200ResponseInnerOneOf3StatusEnum=t.GetLogStreams200ResponseInnerOneOf2SinkAzureRegionEnum=t.GetLogStreams200ResponseInnerOneOf2TypeEnum=t.GetLogStreams200ResponseInnerOneOf2StatusEnum=t.GetLogStreams200ResponseInnerOneOf1SinkAwsRegionEnum=t.GetLogStreams200ResponseInnerOneOf1TypeEnum=t.GetLogStreams200ResponseInnerOneOf1StatusEnum=t.GetLogStreams200ResponseInnerOneOfTypeEnum=t.GetLogStreams200ResponseInnerOneOfStatusEnum=void 0;t.TenantSettingsUpdateFlagsChangePwdFlowV1Enum=t.TenantSettingsUpdateDeviceFlowCharsetEnum=t.TenantSettingsUpdateEnabledLocalesEnum=t.TenantSettingsSessionCookieModeEnum=t.TenantSettingsDeviceFlowCharsetEnum=t.TenantSettingsEnabledLocalesEnum=t.ResourceServerUpdateTokenDialectEnum=t.ResourceServerUpdateSigningAlgEnum=t.ResourceServerCreateTokenDialectEnum=t.ResourceServerCreateSigningAlgEnum=t.ResourceServerTokenDialectEnum=t.ResourceServerSigningAlgEnum=t.PutAuthenticationMethodsRequestInnerPreferredAuthenticationMethodEnum=t.PutAuthenticationMethodsRequestInnerTypeEnum=t.PutAuthenticationMethods200ResponseInnerAuthenticationMethodsInnerTypeEnum=t.PutAuthenticationMethods200ResponseInnerPreferredAuthenticationMethodEnum=t.PutAuthenticationMethods200ResponseInnerTypeEnum=t.PromptsSettingsUpdateUniversalLoginExperienceEnum=t.PromptsSettingsUniversalLoginExperienceEnum=t.PostVerify200ResponseTypeEnum=t.PostVerify200ResponseStatusEnum=t.PostVerificationEmailRequestIdentityProviderEnum=t.PostUsersExportsRequestFormatEnum=t.PostLogStreamsRequestOneOfFiltersInnerNameEnum=t.PostLogStreamsRequestOneOfFiltersInnerTypeEnum=t.PostLogStreamsRequestOneOf7TypeEnum=t.PostLogStreamsRequestOneOf6TypeEnum=t.PostLogStreamsRequestOneOf5TypeEnum=t.PostLogStreamsRequestOneOf4TypeEnum=t.PostLogStreamsRequestOneOf3TypeEnum=t.PostLogStreamsRequestOneOf2SinkAzureRegionEnum=t.PostLogStreamsRequestOneOf2TypeEnum=t.PostLogStreamsRequestOneOf1SinkAwsRegionEnum=t.PostLogStreamsRequestOneOf1TypeEnum=t.PostLogStreamsRequestOneOfTypeEnum=t.PostIdentitiesRequestProviderEnum=t.PostEmailTemplatesRequestTemplateEnum=t.PostCustomDomainsRequestCustomClientIpHeaderEnum=t.PostCustomDomainsRequestTlsPolicyEnum=t.PostCustomDomainsRequestVerificationMethodEnum=t.PostCustomDomainsRequestTypeEnum=t.PostCustomDomains201ResponseVerificationMethodsInnerNameEnum=t.PostCustomDomains201ResponseTypeEnum=t.PostCustomDomains201ResponseStatusEnum=t.PostCredentialsRequestCredentialTypeEnum=t.PostBrandingThemeRequestWidgetSocialButtonsLayoutEnum=t.PostBrandingThemeRequestWidgetLogoPositionEnum=t.PostBrandingThemeRequestWidgetHeaderTextAlignmentEnum=t.PostBrandingThemeRequestPageBackgroundPageLayoutEnum=t.PostBrandingThemeRequestFontsLinksStyleEnum=void 0;t.GetUsersSearchEngineEnum=t.DeleteUserIdentityByUserIdProviderEnum=t.DeleteMultifactorByProviderProviderEnum=t.PutCustomTextByLanguageLanguageEnum=t.PutCustomTextByLanguagePromptEnum=t.GetCustomTextByLanguageLanguageEnum=t.GetCustomTextByLanguagePromptEnum=t.GetHooksTriggerIdEnum=t.PutFactorsByNameOperationNameEnum=t.PutEmailTemplatesByTemplateNameTemplateNameEnum=t.PatchEmailTemplatesByTemplateNameOperationTemplateNameEnum=t.GetEmailTemplatesByTemplateNameTemplateNameEnum=t.GetDeviceCredentialsTypeEnum=t.GetConnectionsStrategyEnum=t.UserEnrollmentAuthMethodEnum=t.UserEnrollmentStatusEnum=void 0;t.ClientTokenEndpointAuthMethodEnum={none:"none",client_secret_post:"client_secret_post",client_secret_basic:"client_secret_basic"};t.ClientOrganizationUsageEnum={deny:"deny",allow:"allow",require:"require"};t.ClientOrganizationRequireBehaviorEnum={no_prompt:"no_prompt",pre_login_prompt:"pre_login_prompt",post_login_prompt:"post_login_prompt"};t.ClientCreateTokenEndpointAuthMethodEnum={none:"none",client_secret_post:"client_secret_post",client_secret_basic:"client_secret_basic"};t.ClientCreateAppTypeEnum={native:"native",spa:"spa",regular_web:"regular_web",non_interactive:"non_interactive",rms:"rms",box:"box",cloudbees:"cloudbees",concur:"concur",dropbox:"dropbox",mscrm:"mscrm",echosign:"echosign",egnyte:"egnyte",newrelic:"newrelic",office365:"office365",salesforce:"salesforce",sentry:"sentry",sharepoint:"sharepoint",slack:"slack",springcm:"springcm",zendesk:"zendesk",zoom:"zoom",sso_integration:"sso_integration",oag:"oag"};t.ClientCreateOrganizationUsageEnum={deny:"deny",allow:"allow",require:"require"};t.ClientCreateOrganizationRequireBehaviorEnum={no_prompt:"no_prompt",pre_login_prompt:"pre_login_prompt",post_login_prompt:"post_login_prompt"};t.ClientCreateClientAuthenticationMethodsPrivateKeyJwtCredentialsInnerCredentialTypeEnum={public_key:"public_key"};t.ClientCreateClientAuthenticationMethodsPrivateKeyJwtCredentialsInnerAlgEnum={RS256:"RS256",RS384:"RS384",PS256:"PS256"};t.ClientCreateJwtConfigurationAlgEnum={HS256:"HS256",RS256:"RS256",PS256:"PS256"};t.ClientJwtConfigurationAlgEnum={HS256:"HS256",RS256:"RS256",PS256:"PS256"};t.ClientRefreshTokenRotationTypeEnum={rotating:"rotating",non_rotating:"non-rotating"};t.ClientRefreshTokenExpirationTypeEnum={expiring:"expiring",non_expiring:"non-expiring"};t.ClientUpdateTokenEndpointAuthMethodEnum={none:"none",client_secret_post:"client_secret_post",client_secret_basic:"client_secret_basic",null:"null"};t.ClientUpdateAppTypeEnum={native:"native",spa:"spa",regular_web:"regular_web",non_interactive:"non_interactive",rms:"rms",box:"box",cloudbees:"cloudbees",concur:"concur",dropbox:"dropbox",mscrm:"mscrm",echosign:"echosign",egnyte:"egnyte",newrelic:"newrelic",office365:"office365",salesforce:"salesforce",sentry:"sentry",sharepoint:"sharepoint",slack:"slack",springcm:"springcm",zendesk:"zendesk",zoom:"zoom",sso_integration:"sso_integration",oag:"oag"};t.ClientUpdateOrganizationUsageEnum={deny:"deny",allow:"allow",require:"require"};t.ClientUpdateOrganizationRequireBehaviorEnum={no_prompt:"no_prompt",pre_login_prompt:"pre_login_prompt",post_login_prompt:"post_login_prompt"};t.ClientUpdateJwtConfigurationAlgEnum={HS256:"HS256",RS256:"RS256",PS256:"PS256"};t.ConnectionCreateStrategyEnum={ad:"ad",adfs:"adfs",amazon:"amazon",apple:"apple",dropbox:"dropbox",bitbucket:"bitbucket",aol:"aol",auth0_oidc:"auth0-oidc",auth0:"auth0",baidu:"baidu",bitly:"bitly",box:"box",custom:"custom",daccount:"daccount",dwolla:"dwolla",email:"email",evernote_sandbox:"evernote-sandbox",evernote:"evernote",exact:"exact",facebook:"facebook",fitbit:"fitbit",flickr:"flickr",github:"github",google_apps:"google-apps",google_oauth2:"google-oauth2",instagram:"instagram",ip:"ip",line:"line",linkedin:"linkedin",miicard:"miicard",oauth1:"oauth1",oauth2:"oauth2",office365:"office365",oidc:"oidc",okta:"okta",paypal:"paypal",paypal_sandbox:"paypal-sandbox",pingfederate:"pingfederate",planningcenter:"planningcenter",renren:"renren",salesforce_community:"salesforce-community",salesforce_sandbox:"salesforce-sandbox",salesforce:"salesforce",samlp:"samlp",sharepoint:"sharepoint",shopify:"shopify",sms:"sms",soundcloud:"soundcloud",thecity_sandbox:"thecity-sandbox",thecity:"thecity",thirtysevensignals:"thirtysevensignals",twitter:"twitter",untappd:"untappd",vkontakte:"vkontakte",waad:"waad",weibo:"weibo",windowslive:"windowslive",wordpress:"wordpress",yahoo:"yahoo",yammer:"yammer",yandex:"yandex"};t.ConnectionCreateOptionsPasswordPolicyEnum={none:"none",low:"low",fair:"fair",good:"good",excellent:"excellent",null:"null"};t.ConnectionCreateOptionsSetUserRootAttributesEnum={each_login:"on_each_login",first_login:"on_first_login"};t.ConnectionCreateOptionsPasskeyOptionsChallengeUiEnum={both:"both",autofill:"autofill",button:"button"};t.ConnectionUpdateOptionsPasswordPolicyEnum={none:"none",low:"low",fair:"fair",good:"good",excellent:"excellent",null:"null"};t.ConnectionUpdateOptionsSetUserRootAttributesEnum={each_login:"on_each_login",first_login:"on_first_login"};t.CustomDomainStatusEnum={disabled:"disabled",pending:"pending",pending_verification:"pending_verification",ready:"ready"};t.CustomDomainTypeEnum={auth0_managed_certs:"auth0_managed_certs",self_managed_certs:"self_managed_certs"};t.DeviceCredentialTypeEnum={public_key:"public_key",refresh_token:"refresh_token",rotating_refresh_token:"rotating_refresh_token"};t.DeviceCredentialCreateTypeEnum={public_key:"public_key"};t.EmailProviderCreateNameEnum={mailgun:"mailgun",mandrill:"mandrill",sendgrid:"sendgrid",ses:"ses",sparkpost:"sparkpost",smtp:"smtp",azure_cs:"azure_cs",ms365:"ms365"};t.EmailProviderUpdateNameEnum={mailgun:"mailgun",mandrill:"mandrill",sendgrid:"sendgrid",ses:"ses",sparkpost:"sparkpost",smtp:"smtp",azure_cs:"azure_cs",ms365:"ms365"};t.EmailTemplateUpdateTemplateEnum={verify_email:"verify_email",verify_email_by_code:"verify_email_by_code",reset_email:"reset_email",welcome_email:"welcome_email",blocked_account:"blocked_account",stolen_credentials:"stolen_credentials",enrollment_email:"enrollment_email",mfa_oob_code:"mfa_oob_code",user_invitation:"user_invitation",change_password:"change_password",password_reset:"password_reset"};t.EnrollmentStatusEnum={pending:"pending",confirmed:"confirmed"};t.FactorNameEnum={push_notification:"push-notification",sms:"sms",email:"email",duo:"duo",otp:"otp",webauthn_roaming:"webauthn-roaming",webauthn_platform:"webauthn-platform",recovery_code:"recovery-code"};t.GetActionVersions200ResponseVersionsInnerStatusEnum={pending:"pending",building:"building",packaged:"packaged",built:"built",retrying:"retrying",failed:"failed"};t.GetActions200ResponseActionsInnerStatusEnum={pending:"pending",building:"building",packaged:"packaged",built:"built",retrying:"retrying",failed:"failed"};t.GetActions200ResponseActionsInnerIntegrationFeatureTypeEnum={unspecified:"unspecified",action:"action",social_connection:"social_connection",log_stream:"log_stream",sso_integration:"sso_integration",sms_provider:"sms_provider"};t.GetActions200ResponseActionsInnerIntegrationCurrentReleaseRequiredSecretsInnerTypeEnum={UNSPECIFIED:"UNSPECIFIED",STRING:"STRING"};t.GetActions200ResponseActionsInnerSupportedTriggersInnerIdAnyOf={post_login:"post-login",credentials_exchange:"credentials-exchange",pre_user_registration:"pre-user-registration",post_user_registration:"post-user-registration",post_change_password:"post-change-password",send_phone_message:"send-phone-message",iga_approval:"iga-approval",iga_certification:"iga-certification",iga_fulfillment_assignment:"iga-fulfillment-assignment",iga_fulfillment_execution:"iga-fulfillment-execution",password_reset_post_challenge:"password-reset-post-challenge"};t.GetAuthenticationMethods200ResponseOneOfInnerTypeEnum={recovery_code:"recovery-code",totp:"totp",push:"push",phone:"phone",email:"email",email_verification:"email-verification",webauthn_roaming:"webauthn-roaming",webauthn_platform:"webauthn-platform",guardian:"guardian",passkey:"passkey"};t.GetAuthenticationMethods200ResponseOneOfInnerPreferredAuthenticationMethodEnum={sms:"sms",voice:"voice"};t.GetAuthenticationMethods200ResponseOneOfInnerAuthenticationMethodsInnerTypeEnum={totp:"totp",push:"push",sms:"sms",voice:"voice"};t.GetBreachedPasswordDetection200ResponseShieldsEnum={block:"block",user_notification:"user_notification",admin_notification:"admin_notification"};t.GetBreachedPasswordDetection200ResponseAdminNotificationFrequencyEnum={immediately:"immediately",daily:"daily",weekly:"weekly",monthly:"monthly"};t.GetBreachedPasswordDetection200ResponseMethodEnum={standard:"standard",enhanced:"enhanced"};t.GetBreachedPasswordDetection200ResponseStagePreUserRegistrationShieldsEnum={block:"block",admin_notification:"admin_notification"};t.GetBruteForceProtection200ResponseShieldsEnum={block:"block",user_notification:"user_notification"};t.GetBruteForceProtection200ResponseModeEnum={identifier_and_ip:"count_per_identifier_and_ip",identifier:"count_per_identifier"};t.GetCredentials200ResponseInnerAlgEnum={RS256:"RS256",RS384:"RS384",PS256:"PS256"};t.GetEmailTemplatesByTemplateName200ResponseTemplateEnum={verify_email:"verify_email",verify_email_by_code:"verify_email_by_code",reset_email:"reset_email",welcome_email:"welcome_email",blocked_account:"blocked_account",stolen_credentials:"stolen_credentials",enrollment_email:"enrollment_email",mfa_oob_code:"mfa_oob_code",user_invitation:"user_invitation",change_password:"change_password",password_reset:"password_reset"};t.GetExecution200ResponseStatusEnum={unspecified:"unspecified",pending:"pending",final:"final",partial:"partial",canceled:"canceled",suspended:"suspended"};t.GetLogStreams200ResponseInnerOneOfStatusEnum={active:"active",paused:"paused",suspended:"suspended"};t.GetLogStreams200ResponseInnerOneOfTypeEnum={http:"http"};t.GetLogStreams200ResponseInnerOneOf1StatusEnum={active:"active",paused:"paused",suspended:"suspended"};t.GetLogStreams200ResponseInnerOneOf1TypeEnum={eventbridge:"eventbridge"};t.GetLogStreams200ResponseInnerOneOf1SinkAwsRegionEnum={ap_east_1:"ap-east-1",ap_northeast_1:"ap-northeast-1",ap_northeast_2:"ap-northeast-2",ap_northeast_3:"ap-northeast-3",ap_south_1:"ap-south-1",ap_southeast_1:"ap-southeast-1",ap_southeast_2:"ap-southeast-2",ca_central_1:"ca-central-1",cn_north_1:"cn-north-1",cn_northwest_1:"cn-northwest-1",eu_central_1:"eu-central-1",eu_north_1:"eu-north-1",eu_west_1:"eu-west-1",eu_west_2:"eu-west-2",eu_west_3:"eu-west-3",me_south_1:"me-south-1",sa_east_1:"sa-east-1",us_gov_east_1:"us-gov-east-1",us_gov_west_1:"us-gov-west-1",us_east_1:"us-east-1",us_east_2:"us-east-2",us_west_1:"us-west-1",us_west_2:"us-west-2"};t.GetLogStreams200ResponseInnerOneOf2StatusEnum={active:"active",paused:"paused",suspended:"suspended"};t.GetLogStreams200ResponseInnerOneOf2TypeEnum={eventgrid:"eventgrid"};t.GetLogStreams200ResponseInnerOneOf2SinkAzureRegionEnum={australiacentral:"australiacentral",australiaeast:"australiaeast",australiasoutheast:"australiasoutheast",brazilsouth:"brazilsouth",canadacentral:"canadacentral",canadaeast:"canadaeast",centralindia:"centralindia",centralus:"centralus",eastasia:"eastasia",eastus:"eastus",eastus2:"eastus2",francecentral:"francecentral",germanywestcentral:"germanywestcentral",japaneast:"japaneast",japanwest:"japanwest",koreacentral:"koreacentral",koreasouth:"koreasouth",northcentralus:"northcentralus",northeurope:"northeurope",norwayeast:"norwayeast",southafricanorth:"southafricanorth",southcentralus:"southcentralus",southeastasia:"southeastasia",southindia:"southindia",switzerlandnorth:"switzerlandnorth",uaenorth:"uaenorth",uksouth:"uksouth",ukwest:"ukwest",westcentralus:"westcentralus",westeurope:"westeurope",westindia:"westindia",westus:"westus",westus2:"westus2"};t.GetLogStreams200ResponseInnerOneOf3StatusEnum={active:"active",paused:"paused",suspended:"suspended"};t.GetLogStreams200ResponseInnerOneOf3TypeEnum={datadog:"datadog"};t.GetLogStreams200ResponseInnerOneOf3SinkDatadogRegionEnum={us:"us",eu:"eu",us3:"us3",us5:"us5"};t.GetLogStreams200ResponseInnerOneOf4StatusEnum={active:"active",paused:"paused",suspended:"suspended"};t.GetLogStreams200ResponseInnerOneOf4TypeEnum={splunk:"splunk"};t.GetLogStreams200ResponseInnerOneOf5StatusEnum={active:"active",paused:"paused",suspended:"suspended"};t.GetLogStreams200ResponseInnerOneOf5TypeEnum={sumo:"sumo"};t.GetLogStreams200ResponseInnerOneOf6StatusEnum={active:"active",paused:"paused",suspended:"suspended"};t.GetLogStreams200ResponseInnerOneOf6TypeEnum={segment:"segment"};t.GetLogStreams200ResponseInnerOneOf7StatusEnum={active:"active",paused:"paused",suspended:"suspended"};t.GetLogStreams200ResponseInnerOneOf7TypeEnum={mixpanel:"mixpanel"};t.GetLogStreams200ResponseInnerOneOf7SinkMixpanelRegionEnum={us:"us",eu:"eu"};t.GetLogStreams200ResponseInnerOneOfFiltersInnerTypeEnum={category:"category"};t.GetLogStreams200ResponseInnerOneOfFiltersInnerNameEnum={auth_ancillary_fail:"auth.ancillary.fail",auth_ancillary_success:"auth.ancillary.success",auth_login_fail:"auth.login.fail",auth_login_notification:"auth.login.notification",auth_login_success:"auth.login.success",auth_logout_fail:"auth.logout.fail",auth_logout_success:"auth.logout.success",auth_signup_fail:"auth.signup.fail",auth_signup_success:"auth.signup.success",auth_silent_auth_fail:"auth.silent_auth.fail",auth_silent_auth_success:"auth.silent_auth.success",auth_token_exchange_fail:"auth.token_exchange.fail",auth_token_exchange_success:"auth.token_exchange.success",management_fail:"management.fail",management_success:"management.success",system_notification:"system.notification",user_fail:"user.fail",user_notification:"user.notification",user_success:"user.success",other:"other"};t.GetLogStreams200ResponseInnerOneOfSinkHttpContentFormatEnum={JSONARRAY:"JSONARRAY",JSONLINES:"JSONLINES",JSONOBJECT:"JSONOBJECT"};t.GetMessageTypes200ResponseMessageTypesEnum={sms:"sms",voice:"voice"};t.GetPhoneProviders200ResponseProviderEnum={auth0:"auth0",twilio:"twilio",phone_message_hook:"phone-message-hook"};t.GetPnProviders200ResponseProviderEnum={guardian:"guardian",sns:"sns",direct:"direct"};t.GetSuspiciousIpThrottling200ResponseShieldsEnum={block:"block",admin_notification:"admin_notification"};t.HookCreateTriggerIdEnum={credentials_exchange:"credentials-exchange",pre_user_registration:"pre-user-registration",post_user_registration:"post-user-registration",post_change_password:"post-change-password",send_phone_message:"send-phone-message"};t.JobFormatEnum={json:"json",csv:"csv"};t.PatchAuthenticationMethodsByAuthenticationMethodIdRequestPreferredAuthenticationMethodEnum={voice:"voice",sms:"sms"};t.PatchBindingsRequestBindingsInnerOneOfRefTypeEnum={binding_id:"binding_id",action_id:"action_id",action_name:"action_name"};t.PatchBreachedPasswordDetectionRequestShieldsEnum={block:"block",user_notification:"user_notification",admin_notification:"admin_notification"};t.PatchBreachedPasswordDetectionRequestAdminNotificationFrequencyEnum={immediately:"immediately",daily:"daily",weekly:"weekly",monthly:"monthly"};t.PatchBreachedPasswordDetectionRequestMethodEnum={standard:"standard",enhanced:"enhanced"};t.PatchBreachedPasswordDetectionRequestStagePreUserRegistrationShieldsEnum={block:"block",admin_notification:"admin_notification"};t.PatchBruteForceProtectionRequestShieldsEnum={block:"block",user_notification:"user_notification"};t.PatchBruteForceProtectionRequestModeEnum={identifier_and_ip:"count_per_identifier_and_ip",identifier:"count_per_identifier"};t.PatchCustomDomainsByIdRequestTlsPolicyEnum={recommended:"recommended",compatible:"compatible"};t.PatchCustomDomainsByIdRequestCustomClientIpHeaderEnum={true_client_ip:"true-client-ip",cf_connecting_ip:"cf-connecting-ip",x_forwarded_for:"x-forwarded-for",x_azure_clientip:"x-azure-clientip",empty:""};t.PatchEmailTemplatesByTemplateNameRequestTemplateEnum={verify_email:"verify_email",verify_email_by_code:"verify_email_by_code",reset_email:"reset_email",welcome_email:"welcome_email",blocked_account:"blocked_account",stolen_credentials:"stolen_credentials",enrollment_email:"enrollment_email",mfa_oob_code:"mfa_oob_code",user_invitation:"user_invitation",change_password:"change_password",password_reset:"password_reset"};t.PatchLogStreamsByIdRequestStatusEnum={active:"active",paused:"paused",suspended:"suspended"};t.PatchLogStreamsByIdRequestSinkOneOfDatadogRegionEnum={us:"us",eu:"eu",us3:"us3",us5:"us5"};t.PatchLogStreamsByIdRequestSinkOneOf3MixpanelRegionEnum={us:"us",eu:"eu"};t.PatchSuspiciousIpThrottlingRequestShieldsEnum={block:"block",admin_notification:"admin_notification"};t.PostAuthenticationMethods201ResponseTypeEnum={phone:"phone",email:"email",totp:"totp",webauthn_roaming:"webauthn-roaming"};t.PostAuthenticationMethods201ResponsePreferredAuthenticationMethodEnum={voice:"voice",sms:"sms"};t.PostAuthenticationMethodsRequestTypeEnum={phone:"phone",email:"email",totp:"totp",webauthn_roaming:"webauthn-roaming"};t.PostAuthenticationMethodsRequestPreferredAuthenticationMethodEnum={voice:"voice",sms:"sms"};t.PostBrandingThemeRequestBordersButtonsStyleEnum={pill:"pill",rounded:"rounded",sharp:"sharp"};t.PostBrandingThemeRequestBordersInputsStyleEnum={pill:"pill",rounded:"rounded",sharp:"sharp"};t.PostBrandingThemeRequestFontsLinksStyleEnum={normal:"normal",underlined:"underlined"};t.PostBrandingThemeRequestPageBackgroundPageLayoutEnum={center:"center",left:"left",right:"right"};t.PostBrandingThemeRequestWidgetHeaderTextAlignmentEnum={center:"center",left:"left",right:"right"};t.PostBrandingThemeRequestWidgetLogoPositionEnum={center:"center",left:"left",none:"none",right:"right"};t.PostBrandingThemeRequestWidgetSocialButtonsLayoutEnum={bottom:"bottom",top:"top"};t.PostCredentialsRequestCredentialTypeEnum={public_key:"public_key",cert_subject_dn:"cert_subject_dn",x509_cert:"x509_cert"};t.PostCustomDomains201ResponseStatusEnum={disabled:"disabled",pending:"pending",pending_verification:"pending_verification",ready:"ready"};t.PostCustomDomains201ResponseTypeEnum={auth0_managed_certs:"auth0_managed_certs",self_managed_certs:"self_managed_certs"};t.PostCustomDomains201ResponseVerificationMethodsInnerNameEnum={cname:"cname",txt:"txt"};t.PostCustomDomainsRequestTypeEnum={auth0_managed_certs:"auth0_managed_certs",self_managed_certs:"self_managed_certs"};t.PostCustomDomainsRequestVerificationMethodEnum={txt:"txt"};t.PostCustomDomainsRequestTlsPolicyEnum={recommended:"recommended",compatible:"compatible"};t.PostCustomDomainsRequestCustomClientIpHeaderEnum={true_client_ip:"true-client-ip",cf_connecting_ip:"cf-connecting-ip",x_forwarded_for:"x-forwarded-for",x_azure_clientip:"x-azure-clientip",null:"null"};t.PostEmailTemplatesRequestTemplateEnum={verify_email:"verify_email",verify_email_by_code:"verify_email_by_code",reset_email:"reset_email",welcome_email:"welcome_email",blocked_account:"blocked_account",stolen_credentials:"stolen_credentials",enrollment_email:"enrollment_email",mfa_oob_code:"mfa_oob_code",user_invitation:"user_invitation",change_password:"change_password",password_reset:"password_reset"};t.PostIdentitiesRequestProviderEnum={ad:"ad",adfs:"adfs",amazon:"amazon",apple:"apple",dropbox:"dropbox",bitbucket:"bitbucket",aol:"aol",auth0_oidc:"auth0-oidc",auth0:"auth0",baidu:"baidu",bitly:"bitly",box:"box",custom:"custom",daccount:"daccount",dwolla:"dwolla",email:"email",evernote_sandbox:"evernote-sandbox",evernote:"evernote",exact:"exact",facebook:"facebook",fitbit:"fitbit",flickr:"flickr",github:"github",google_apps:"google-apps",google_oauth2:"google-oauth2",instagram:"instagram",ip:"ip",line:"line",linkedin:"linkedin",miicard:"miicard",oauth1:"oauth1",oauth2:"oauth2",office365:"office365",oidc:"oidc",okta:"okta",paypal:"paypal",paypal_sandbox:"paypal-sandbox",pingfederate:"pingfederate",planningcenter:"planningcenter",renren:"renren",salesforce_community:"salesforce-community",salesforce_sandbox:"salesforce-sandbox",salesforce:"salesforce",samlp:"samlp",sharepoint:"sharepoint",shopify:"shopify",sms:"sms",soundcloud:"soundcloud",thecity_sandbox:"thecity-sandbox",thecity:"thecity",thirtysevensignals:"thirtysevensignals",twitter:"twitter",untappd:"untappd",vkontakte:"vkontakte",waad:"waad",weibo:"weibo",windowslive:"windowslive",wordpress:"wordpress",yahoo:"yahoo",yammer:"yammer",yandex:"yandex"};t.PostLogStreamsRequestOneOfTypeEnum={http:"http"};t.PostLogStreamsRequestOneOf1TypeEnum={eventbridge:"eventbridge"};t.PostLogStreamsRequestOneOf1SinkAwsRegionEnum={ap_east_1:"ap-east-1",ap_northeast_1:"ap-northeast-1",ap_northeast_2:"ap-northeast-2",ap_northeast_3:"ap-northeast-3",ap_south_1:"ap-south-1",ap_southeast_1:"ap-southeast-1",ap_southeast_2:"ap-southeast-2",ca_central_1:"ca-central-1",cn_north_1:"cn-north-1",cn_northwest_1:"cn-northwest-1",eu_central_1:"eu-central-1",eu_north_1:"eu-north-1",eu_west_1:"eu-west-1",eu_west_2:"eu-west-2",eu_west_3:"eu-west-3",me_south_1:"me-south-1",sa_east_1:"sa-east-1",us_gov_east_1:"us-gov-east-1",us_gov_west_1:"us-gov-west-1",us_east_1:"us-east-1",us_east_2:"us-east-2",us_west_1:"us-west-1",us_west_2:"us-west-2"};t.PostLogStreamsRequestOneOf2TypeEnum={eventgrid:"eventgrid"};t.PostLogStreamsRequestOneOf2SinkAzureRegionEnum={australiacentral:"australiacentral",australiaeast:"australiaeast",australiasoutheast:"australiasoutheast",brazilsouth:"brazilsouth",canadacentral:"canadacentral",canadaeast:"canadaeast",centralindia:"centralindia",centralus:"centralus",eastasia:"eastasia",eastus:"eastus",eastus2:"eastus2",francecentral:"francecentral",germanywestcentral:"germanywestcentral",japaneast:"japaneast",japanwest:"japanwest",koreacentral:"koreacentral",koreasouth:"koreasouth",northcentralus:"northcentralus",northeurope:"northeurope",norwayeast:"norwayeast",southafricanorth:"southafricanorth",southcentralus:"southcentralus",southeastasia:"southeastasia",southindia:"southindia",switzerlandnorth:"switzerlandnorth",uaenorth:"uaenorth",uksouth:"uksouth",ukwest:"ukwest",westcentralus:"westcentralus",westeurope:"westeurope",westindia:"westindia",westus:"westus",westus2:"westus2"};t.PostLogStreamsRequestOneOf3TypeEnum={datadog:"datadog"};t.PostLogStreamsRequestOneOf4TypeEnum={splunk:"splunk"};t.PostLogStreamsRequestOneOf5TypeEnum={sumo:"sumo"};t.PostLogStreamsRequestOneOf6TypeEnum={segment:"segment"};t.PostLogStreamsRequestOneOf7TypeEnum={mixpanel:"mixpanel"};t.PostLogStreamsRequestOneOfFiltersInnerTypeEnum={category:"category"};t.PostLogStreamsRequestOneOfFiltersInnerNameEnum={auth_ancillary_fail:"auth.ancillary.fail",auth_ancillary_success:"auth.ancillary.success",auth_login_fail:"auth.login.fail",auth_login_notification:"auth.login.notification",auth_login_success:"auth.login.success",auth_logout_fail:"auth.logout.fail",auth_logout_success:"auth.logout.success",auth_signup_fail:"auth.signup.fail",auth_signup_success:"auth.signup.success",auth_silent_auth_fail:"auth.silent_auth.fail",auth_silent_auth_success:"auth.silent_auth.success",auth_token_exchange_fail:"auth.token_exchange.fail",auth_token_exchange_success:"auth.token_exchange.success",management_fail:"management.fail",management_success:"management.success",system_notification:"system.notification",user_fail:"user.fail",user_notification:"user.notification",user_success:"user.success",other:"other"};t.PostUsersExportsRequestFormatEnum={json:"json",csv:"csv"};t.PostVerificationEmailRequestIdentityProviderEnum={ad:"ad",adfs:"adfs",amazon:"amazon",apple:"apple",dropbox:"dropbox",bitbucket:"bitbucket",aol:"aol",auth0_oidc:"auth0-oidc",auth0:"auth0",baidu:"baidu",bitly:"bitly",box:"box",custom:"custom",daccount:"daccount",dwolla:"dwolla",email:"email",evernote_sandbox:"evernote-sandbox",evernote:"evernote",exact:"exact",facebook:"facebook",fitbit:"fitbit",flickr:"flickr",github:"github",google_apps:"google-apps",google_oauth2:"google-oauth2",instagram:"instagram",ip:"ip",line:"line",linkedin:"linkedin",miicard:"miicard",oauth1:"oauth1",oauth2:"oauth2",office365:"office365",oidc:"oidc",okta:"okta",paypal:"paypal",paypal_sandbox:"paypal-sandbox",pingfederate:"pingfederate",planningcenter:"planningcenter",renren:"renren",salesforce_community:"salesforce-community",salesforce_sandbox:"salesforce-sandbox",salesforce:"salesforce",samlp:"samlp",sharepoint:"sharepoint",shopify:"shopify",sms:"sms",soundcloud:"soundcloud",thecity_sandbox:"thecity-sandbox",thecity:"thecity",thirtysevensignals:"thirtysevensignals",twitter:"twitter",untappd:"untappd",vkontakte:"vkontakte",waad:"waad",weibo:"weibo",windowslive:"windowslive",wordpress:"wordpress",yahoo:"yahoo",yammer:"yammer",yandex:"yandex"};t.PostVerify200ResponseStatusEnum={disabled:"disabled",pending:"pending",pending_verification:"pending_verification",ready:"ready"};t.PostVerify200ResponseTypeEnum={auth0_managed_certs:"auth0_managed_certs",self_managed_certs:"self_managed_certs"};t.PromptsSettingsUniversalLoginExperienceEnum={new:"new",classic:"classic"};t.PromptsSettingsUpdateUniversalLoginExperienceEnum={new:"new",classic:"classic"};t.PutAuthenticationMethods200ResponseInnerTypeEnum={phone:"phone",email:"email",totp:"totp",webauthn_roaming:"webauthn-roaming"};t.PutAuthenticationMethods200ResponseInnerPreferredAuthenticationMethodEnum={voice:"voice",sms:"sms"};t.PutAuthenticationMethods200ResponseInnerAuthenticationMethodsInnerTypeEnum={totp:"totp",push:"push",sms:"sms",voice:"voice"};t.PutAuthenticationMethodsRequestInnerTypeEnum={phone:"phone",email:"email",totp:"totp"};t.PutAuthenticationMethodsRequestInnerPreferredAuthenticationMethodEnum={voice:"voice",sms:"sms"};t.ResourceServerSigningAlgEnum={HS256:"HS256",RS256:"RS256",PS256:"PS256"};t.ResourceServerTokenDialectEnum={token:"access_token",token_authz:"access_token_authz"};t.ResourceServerCreateSigningAlgEnum={HS256:"HS256",RS256:"RS256",PS256:"PS256"};t.ResourceServerCreateTokenDialectEnum={token:"access_token",token_authz:"access_token_authz"};t.ResourceServerUpdateSigningAlgEnum={HS256:"HS256",RS256:"RS256",PS256:"PS256"};t.ResourceServerUpdateTokenDialectEnum={token:"access_token",token_authz:"access_token_authz"};t.TenantSettingsEnabledLocalesEnum={ar:"ar",bg:"bg",bs:"bs",ca_ES:"ca-ES",cs:"cs",cy:"cy",da:"da",de:"de",el:"el",en:"en",es:"es",et:"et",eu_ES:"eu-ES",fi:"fi",fr:"fr",fr_CA:"fr-CA",fr_FR:"fr-FR",gl_ES:"gl-ES",he:"he",hi:"hi",hr:"hr",hu:"hu",id:"id",is:"is",it:"it",ja:"ja",ko:"ko",lt:"lt",lv:"lv",nb:"nb",nl:"nl",nn:"nn",no:"no",pl:"pl",pt:"pt",pt_BR:"pt-BR",pt_PT:"pt-PT",ro:"ro",ru:"ru",sk:"sk",sl:"sl",sr:"sr",sv:"sv",th:"th",tr:"tr",uk:"uk",vi:"vi",zh_CN:"zh-CN",zh_TW:"zh-TW"};t.TenantSettingsDeviceFlowCharsetEnum={base20:"base20",digits:"digits"};t.TenantSettingsSessionCookieModeEnum={persistent:"persistent",non_persistent:"non-persistent"};t.TenantSettingsUpdateEnabledLocalesEnum={ar:"ar",bg:"bg",bs:"bs",ca_ES:"ca-ES",cs:"cs",cy:"cy",da:"da",de:"de",el:"el",en:"en",es:"es",et:"et",eu_ES:"eu-ES",fi:"fi",fr:"fr",fr_CA:"fr-CA",fr_FR:"fr-FR",gl_ES:"gl-ES",he:"he",hi:"hi",hr:"hr",hu:"hu",id:"id",is:"is",it:"it",ja:"ja",ko:"ko",lt:"lt",lv:"lv",nb:"nb",nl:"nl",nn:"nn",no:"no",pl:"pl",pt:"pt",pt_BR:"pt-BR",pt_PT:"pt-PT",ro:"ro",ru:"ru",sk:"sk",sl:"sl",sr:"sr",sv:"sv",th:"th",tr:"tr",uk:"uk",vi:"vi",zh_CN:"zh-CN",zh_TW:"zh-TW"};t.TenantSettingsUpdateDeviceFlowCharsetEnum={base20:"base20",digits:"digits"};t.TenantSettingsUpdateFlagsChangePwdFlowV1Enum={false:false};t.UserEnrollmentStatusEnum={pending:"pending",confirmed:"confirmed"};t.UserEnrollmentAuthMethodEnum={authenticator:"authenticator",guardian:"guardian",sms:"sms",webauthn_platform:"webauthn-platform",webauthn_roaming:"webauthn-roaming"};t.GetConnectionsStrategyEnum={ad:"ad",adfs:"adfs",amazon:"amazon",apple:"apple",dropbox:"dropbox",bitbucket:"bitbucket",aol:"aol",auth0_oidc:"auth0-oidc",auth0:"auth0",baidu:"baidu",bitly:"bitly",box:"box",custom:"custom",daccount:"daccount",dwolla:"dwolla",email:"email",evernote_sandbox:"evernote-sandbox",evernote:"evernote",exact:"exact",facebook:"facebook",fitbit:"fitbit",flickr:"flickr",github:"github",google_apps:"google-apps",google_oauth2:"google-oauth2",instagram:"instagram",ip:"ip",line:"line",linkedin:"linkedin",miicard:"miicard",oauth1:"oauth1",oauth2:"oauth2",office365:"office365",oidc:"oidc",okta:"okta",paypal:"paypal",paypal_sandbox:"paypal-sandbox",pingfederate:"pingfederate",planningcenter:"planningcenter",renren:"renren",salesforce_community:"salesforce-community",salesforce_sandbox:"salesforce-sandbox",salesforce:"salesforce",samlp:"samlp",sharepoint:"sharepoint",shopify:"shopify",sms:"sms",soundcloud:"soundcloud",thecity_sandbox:"thecity-sandbox",thecity:"thecity",thirtysevensignals:"thirtysevensignals",twitter:"twitter",untappd:"untappd",vkontakte:"vkontakte",waad:"waad",weibo:"weibo",windowslive:"windowslive",wordpress:"wordpress",yahoo:"yahoo",yammer:"yammer",yandex:"yandex",auth0_adldap:"auth0-adldap"};t.GetDeviceCredentialsTypeEnum={public_key:"public_key",refresh_token:"refresh_token",rotating_refresh_token:"rotating_refresh_token"};t.GetEmailTemplatesByTemplateNameTemplateNameEnum={verify_email:"verify_email",verify_email_by_code:"verify_email_by_code",reset_email:"reset_email",welcome_email:"welcome_email",blocked_account:"blocked_account",stolen_credentials:"stolen_credentials",enrollment_email:"enrollment_email",mfa_oob_code:"mfa_oob_code",user_invitation:"user_invitation",change_password:"change_password",password_reset:"password_reset"};t.PatchEmailTemplatesByTemplateNameOperationTemplateNameEnum={verify_email:"verify_email",verify_email_by_code:"verify_email_by_code",reset_email:"reset_email",welcome_email:"welcome_email",blocked_account:"blocked_account",stolen_credentials:"stolen_credentials",enrollment_email:"enrollment_email",mfa_oob_code:"mfa_oob_code",user_invitation:"user_invitation",change_password:"change_password",password_reset:"password_reset"};t.PutEmailTemplatesByTemplateNameTemplateNameEnum={verify_email:"verify_email",verify_email_by_code:"verify_email_by_code",reset_email:"reset_email",welcome_email:"welcome_email",blocked_account:"blocked_account",stolen_credentials:"stolen_credentials",enrollment_email:"enrollment_email",mfa_oob_code:"mfa_oob_code",user_invitation:"user_invitation",change_password:"change_password",password_reset:"password_reset"};t.PutFactorsByNameOperationNameEnum={push_notification:"push-notification",sms:"sms",email:"email",duo:"duo",otp:"otp",webauthn_roaming:"webauthn-roaming",webauthn_platform:"webauthn-platform",recovery_code:"recovery-code"};t.GetHooksTriggerIdEnum={credentials_exchange:"credentials-exchange",pre_user_registration:"pre-user-registration",post_user_registration:"post-user-registration",post_change_password:"post-change-password",send_phone_message:"send-phone-message"};t.GetCustomTextByLanguagePromptEnum={login:"login",login_id:"login-id",login_password:"login-password",login_passwordless:"login-passwordless",login_email_verification:"login-email-verification",signup:"signup",signup_id:"signup-id",signup_password:"signup-password",phone_identifier_enrollment:"phone-identifier-enrollment",phone_identifier_challenge:"phone-identifier-challenge",reset_password:"reset-password",consent:"consent",logout:"logout",mfa_push:"mfa-push",mfa_otp:"mfa-otp",mfa_voice:"mfa-voice",mfa_phone:"mfa-phone",mfa_webauthn:"mfa-webauthn",mfa_sms:"mfa-sms",mfa_email:"mfa-email",mfa_recovery_code:"mfa-recovery-code",mfa:"mfa",status:"status",device_flow:"device-flow",email_verification:"email-verification",email_otp_challenge:"email-otp-challenge",organizations:"organizations",invitation:"invitation",common:"common",passkeys:"passkeys"};t.GetCustomTextByLanguageLanguageEnum={ar:"ar",bg:"bg",bs:"bs",ca_ES:"ca-ES",cs:"cs",cy:"cy",da:"da",de:"de",el:"el",en:"en",es:"es",et:"et",eu_ES:"eu-ES",fi:"fi",fr:"fr",fr_CA:"fr-CA",fr_FR:"fr-FR",gl_ES:"gl-ES",he:"he",hi:"hi",hr:"hr",hu:"hu",id:"id",is:"is",it:"it",ja:"ja",ko:"ko",lt:"lt",lv:"lv",nb:"nb",nl:"nl",nn:"nn",no:"no",pl:"pl",pt:"pt",pt_BR:"pt-BR",pt_PT:"pt-PT",ro:"ro",ru:"ru",sk:"sk",sl:"sl",sr:"sr",sv:"sv",th:"th",tr:"tr",uk:"uk",vi:"vi",zh_CN:"zh-CN",zh_TW:"zh-TW"};t.PutCustomTextByLanguagePromptEnum={login:"login",login_id:"login-id",login_password:"login-password",login_passwordless:"login-passwordless",login_email_verification:"login-email-verification",signup:"signup",signup_id:"signup-id",signup_password:"signup-password",phone_identifier_enrollment:"phone-identifier-enrollment",phone_identifier_challenge:"phone-identifier-challenge",reset_password:"reset-password",consent:"consent",logout:"logout",mfa_push:"mfa-push",mfa_otp:"mfa-otp",mfa_voice:"mfa-voice",mfa_phone:"mfa-phone",mfa_webauthn:"mfa-webauthn",mfa_sms:"mfa-sms",mfa_email:"mfa-email",mfa_recovery_code:"mfa-recovery-code",mfa:"mfa",status:"status",device_flow:"device-flow",email_verification:"email-verification",email_otp_challenge:"email-otp-challenge",organizations:"organizations",invitation:"invitation",common:"common",passkeys:"passkeys"};t.PutCustomTextByLanguageLanguageEnum={ar:"ar",bg:"bg",bs:"bs",ca_ES:"ca-ES",cs:"cs",cy:"cy",da:"da",de:"de",el:"el",en:"en",es:"es",et:"et",eu_ES:"eu-ES",fi:"fi",fr:"fr",fr_CA:"fr-CA",fr_FR:"fr-FR",gl_ES:"gl-ES",he:"he",hi:"hi",hr:"hr",hu:"hu",id:"id",is:"is",it:"it",ja:"ja",ko:"ko",lt:"lt",lv:"lv",nb:"nb",nl:"nl",nn:"nn",no:"no",pl:"pl",pt:"pt",pt_BR:"pt-BR",pt_PT:"pt-PT",ro:"ro",ru:"ru",sk:"sk",sl:"sl",sr:"sr",sv:"sv",th:"th",tr:"tr",uk:"uk",vi:"vi",zh_CN:"zh-CN",zh_TW:"zh-TW"};t.DeleteMultifactorByProviderProviderEnum={duo:"duo",google_authenticator:"google-authenticator"};t.DeleteUserIdentityByUserIdProviderEnum={ad:"ad",adfs:"adfs",amazon:"amazon",apple:"apple",dropbox:"dropbox",bitbucket:"bitbucket",aol:"aol",auth0_oidc:"auth0-oidc",auth0:"auth0",baidu:"baidu",bitly:"bitly",box:"box",custom:"custom",daccount:"daccount",dwolla:"dwolla",email:"email",evernote_sandbox:"evernote-sandbox",evernote:"evernote",exact:"exact",facebook:"facebook",fitbit:"fitbit",flickr:"flickr",github:"github",google_apps:"google-apps",google_oauth2:"google-oauth2",instagram:"instagram",ip:"ip",line:"line",linkedin:"linkedin",miicard:"miicard",oauth1:"oauth1",oauth2:"oauth2",office365:"office365",oidc:"oidc",okta:"okta",paypal:"paypal",paypal_sandbox:"paypal-sandbox",pingfederate:"pingfederate",planningcenter:"planningcenter",renren:"renren",salesforce_community:"salesforce-community",salesforce_sandbox:"salesforce-sandbox",salesforce:"salesforce",samlp:"samlp",sharepoint:"sharepoint",shopify:"shopify",sms:"sms",soundcloud:"soundcloud",thecity_sandbox:"thecity-sandbox",thecity:"thecity",thirtysevensignals:"thirtysevensignals",twitter:"twitter",untappd:"untappd",vkontakte:"vkontakte",waad:"waad",weibo:"weibo",windowslive:"windowslive",wordpress:"wordpress",yahoo:"yahoo",yammer:"yammer",yandex:"yandex"};t.GetUsersSearchEngineEnum={v1:"v1",v2:"v2",v3:"v3"}},3119:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){if(s===undefined)s=n;var i=Object.getOwnPropertyDescriptor(t,n);if(!i||("get"in i?!t.__esModule:i.writable||i.configurable)){i={enumerable:true,get:function(){return t[n]}}}Object.defineProperty(e,s,i)}:function(e,t,n,s){if(s===undefined)s=n;e[s]=t[n]});var i=this&&this.__exportStar||function(e,t){for(var n in e)if(n!=="default"&&!Object.prototype.hasOwnProperty.call(t,n))s(t,e,n)};Object.defineProperty(t,"__esModule",{value:true});i(n(2602),t);i(n(2469),t);i(n(7248),t)},2602:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true})},2469:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.ManagementClient=t.ManagementApiError=void 0;const s=n(7248);const i=n(3387);const r=n(3551);const o=n(8295);class ManagementApiError extends Error{constructor(e,t,n,s,i,r){super(r);this.errorCode=e;this.error=t;this.statusCode=n;this.body=s;this.headers=i;this.msg=r;this.name="ManagementApiError"}}t.ManagementApiError=ManagementApiError;async function parseError(e){const t=await e.text();let n;try{n=JSON.parse(t);return new ManagementApiError(n.errorCode,n.error,n.statusCode||e.status,t,e.headers,n.message)}catch(n){return new r.ResponseError(e.status,t,e.headers,"Response returned an error code")}}class ManagementClient extends s.ManagementClientBase{constructor(e){super({...e,baseUrl:`https://${e.domain}/api/v2`,middleware:[new i.TokenProviderMiddleware(e),...e.telemetry!==false?[new o.TelemetryMiddleware(e)]:[]],parseError:parseError})}}t.ManagementClient=ManagementClient},3387:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.TokenProviderMiddleware=void 0;const s=n(206);class TokenProviderMiddleware{constructor(e){var t;if("token"in e){this.tokenProvider={getAccessToken:()=>Promise.resolve(e.token)}}else{this.tokenProvider=new s.TokenProvider({...e,audience:(t=e.audience)!==null&&t!==void 0?t:`https://${e.domain}/api/v2/`,...{clientSecret:e.clientSecret},...{clientAssertionSigningKey:e.clientAssertionSigningKey}})}}async pre(e){const t=await this.tokenProvider.getAccessToken();e.init.headers={...e.init.headers,Authorization:`Bearer ${t}`};return{url:e.url,init:e.init}}}t.TokenProviderMiddleware=TokenProviderMiddleware},206:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.TokenProvider=void 0;const s=n(3776);const i=10*1e3;class TokenProvider{constructor(e){this.options=e;this.expiresAt=0;this.accessToken="";this.authenticationClient=new s.AuthenticationClient(e)}async getAccessToken(){if(!this.accessToken||Date.now()>this.expiresAt-i){this.pending=this.pending||this.authenticationClient.oauth.clientCredentialsGrant({audience:this.options.audience});const{data:{access_token:e,expires_in:t}}=await this.pending.finally((()=>{delete this.pending}));this.expiresAt=Date.now()+t*1e3;this.accessToken=e}return this.accessToken}}t.TokenProvider=TokenProvider},6650:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.UserInfoClient=t.parseError=t.UserInfoError=void 0;const s=n(8361);const i=n(8295);const r=n(4667);const o=n(5467);class UserInfoError extends Error{constructor(e,t,n,s,i){super(t||e);this.error=e;this.error_description=t;this.statusCode=n;this.body=s;this.headers=i;this.name="UserInfoError"}}t.UserInfoError=UserInfoError;async function parseError(e){const t=await e.text();let n;try{n=JSON.parse(t);return new UserInfoError(n.error,n.error_description,e.status,t,e.headers)}catch(n){return new s.ResponseError(e.status,t,e.headers,"Response returned an error code")}}t.parseError=parseError;class UserInfoClient extends o.BaseAPI{constructor(e){super({...e,baseUrl:`https://${e.domain}`,middleware:e.telemetry!==false?[new i.TelemetryMiddleware(e)]:[],parseError:parseError})}async getUserInfo(e,t){const n=await this.request({path:`/userinfo`,method:"GET",headers:{Authorization:`Bearer ${e}`}},t);return r.JSONApiResponse.fromResponse(n)}}t.UserInfoClient=UserInfoClient},8200:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.generateClientInfo=void 0;const s=n(1817);const generateClientInfo=()=>({name:"node-auth0",version:s.version,env:{node:process.version.replace("v","")}});t.generateClientInfo=generateClientInfo},1817:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:true});t.version=void 0;t.version="4.1.0"},8757:(e,t,n)=>{"use strict";const s=n(4334);const i=n(7310);const r=n(3329);const o=n(3685);const A=n(5687);const a=n(3837);const c=n(7707);const u=n(9796);const l=n(2781);const d=n(2361);function _interopDefaultLegacy(e){return e&&typeof e==="object"&&"default"in e?e:{default:e}}const p=_interopDefaultLegacy(s);const g=_interopDefaultLegacy(i);const h=_interopDefaultLegacy(o);const f=_interopDefaultLegacy(A);const E=_interopDefaultLegacy(a);const m=_interopDefaultLegacy(c);const C=_interopDefaultLegacy(u);const Q=_interopDefaultLegacy(l);const I=_interopDefaultLegacy(d);function bind(e,t){return function wrap(){return e.apply(t,arguments)}}const{toString:B}=Object.prototype;const{getPrototypeOf:y}=Object;const b=(e=>t=>{const n=B.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null));const kindOfTest=e=>{e=e.toLowerCase();return t=>b(t)===e};const typeOfTest=e=>t=>typeof t===e;const{isArray:w}=Array;const R=typeOfTest("undefined");function isBuffer(e){return e!==null&&!R(e)&&e.constructor!==null&&!R(e.constructor)&&S(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const v=kindOfTest("ArrayBuffer");function isArrayBufferView(e){let t;if(typeof ArrayBuffer!=="undefined"&&ArrayBuffer.isView){t=ArrayBuffer.isView(e)}else{t=e&&e.buffer&&v(e.buffer)}return t}const k=typeOfTest("string");const S=typeOfTest("function");const x=typeOfTest("number");const isObject=e=>e!==null&&typeof e==="object";const isBoolean=e=>e===true||e===false;const isPlainObject=e=>{if(b(e)!=="object"){return false}const t=y(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)};const D=kindOfTest("Date");const _=kindOfTest("File");const N=kindOfTest("Blob");const F=kindOfTest("FileList");const isStream=e=>isObject(e)&&S(e.pipe);const isFormData=e=>{let t;return e&&(typeof FormData==="function"&&e instanceof FormData||S(e.append)&&((t=b(e))==="formdata"||t==="object"&&S(e.toString)&&e.toString()==="[object FormData]"))};const U=kindOfTest("URLSearchParams");const trim=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function forEach(e,t,{allOwnKeys:n=false}={}){if(e===null||typeof e==="undefined"){return}let s;let i;if(typeof e!=="object"){e=[e]}if(w(e)){for(s=0,i=e.length;s0){i=n[s];if(t===i.toLowerCase()){return i}}return null}const T=(()=>{if(typeof globalThis!=="undefined")return globalThis;return typeof self!=="undefined"?self:typeof window!=="undefined"?window:global})();const isContextDefined=e=>!R(e)&&e!==T;function merge(){const{caseless:e}=isContextDefined(this)&&this||{};const t={};const assignValue=(n,s)=>{const i=e&&findKey(t,s)||s;if(isPlainObject(t[i])&&isPlainObject(n)){t[i]=merge(t[i],n)}else if(isPlainObject(n)){t[i]=merge({},n)}else if(w(n)){t[i]=n.slice()}else{t[i]=n}};for(let e=0,t=arguments.length;e{forEach(t,((t,s)=>{if(n&&S(t)){e[s]=bind(t,n)}else{e[s]=t}}),{allOwnKeys:s});return e};const stripBOM=e=>{if(e.charCodeAt(0)===65279){e=e.slice(1)}return e};const inherits=(e,t,n,s)=>{e.prototype=Object.create(t.prototype,s);e.prototype.constructor=e;Object.defineProperty(e,"super",{value:t.prototype});n&&Object.assign(e.prototype,n)};const toFlatObject=(e,t,n,s)=>{let i;let r;let o;const A={};t=t||{};if(e==null)return t;do{i=Object.getOwnPropertyNames(e);r=i.length;while(r-- >0){o=i[r];if((!s||s(o,e,t))&&!A[o]){t[o]=e[o];A[o]=true}}e=n!==false&&y(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t};const endsWith=(e,t,n)=>{e=String(e);if(n===undefined||n>e.length){n=e.length}n-=t.length;const s=e.indexOf(t,n);return s!==-1&&s===n};const toArray=e=>{if(!e)return null;if(w(e))return e;let t=e.length;if(!x(t))return null;const n=new Array(t);while(t-- >0){n[t]=e[t]}return n};const M=(e=>t=>e&&t instanceof e)(typeof Uint8Array!=="undefined"&&y(Uint8Array));const forEachEntry=(e,t)=>{const n=e&&e[Symbol.iterator];const s=n.call(e);let i;while((i=s.next())&&!i.done){const n=i.value;t.call(e,n[0],n[1])}};const matchAll=(e,t)=>{let n;const s=[];while((n=e.exec(t))!==null){s.push(n)}return s};const L=kindOfTest("HTMLFormElement");const toCamelCase=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function replacer(e,t,n){return t.toUpperCase()+n}));const O=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype);const P=kindOfTest("RegExp");const reduceDescriptors=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e);const s={};forEach(n,((n,i)=>{let r;if((r=t(n,i,e))!==false){s[i]=r||n}}));Object.defineProperties(e,s)};const freezeMethods=e=>{reduceDescriptors(e,((t,n)=>{if(S(e)&&["arguments","caller","callee"].indexOf(n)!==-1){return false}const s=e[n];if(!S(s))return;t.enumerable=false;if("writable"in t){t.writable=false;return}if(!t.set){t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}}}))};const toObjectSet=(e,t)=>{const n={};const define=e=>{e.forEach((e=>{n[e]=true}))};w(e)?define(e):define(String(e).split(t));return n};const noop=()=>{};const toFiniteNumber=(e,t)=>{e=+e;return Number.isFinite(e)?e:t};const J="abcdefghijklmnopqrstuvwxyz";const H="0123456789";const q={DIGIT:H,ALPHA:J,ALPHA_DIGIT:J+J.toUpperCase()+H};const generateString=(e=16,t=q.ALPHA_DIGIT)=>{let n="";const{length:s}=t;while(e--){n+=t[Math.random()*s|0]}return n};function isSpecCompliantForm(e){return!!(e&&S(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}const toJSONObject=e=>{const t=new Array(10);const visit=(e,n)=>{if(isObject(e)){if(t.indexOf(e)>=0){return}if(!("toJSON"in e)){t[n]=e;const s=w(e)?[]:{};forEach(e,((e,t)=>{const i=visit(e,n+1);!R(i)&&(s[t]=i)}));t[n]=undefined;return s}}return e};return visit(e,0)};const G=kindOfTest("AsyncFunction");const isThenable=e=>e&&(isObject(e)||S(e))&&S(e.then)&&S(e.catch);const Y={isArray:w,isArrayBuffer:v,isBuffer:isBuffer,isFormData:isFormData,isArrayBufferView:isArrayBufferView,isString:k,isNumber:x,isBoolean:isBoolean,isObject:isObject,isPlainObject:isPlainObject,isUndefined:R,isDate:D,isFile:_,isBlob:N,isRegExp:P,isFunction:S,isStream:isStream,isURLSearchParams:U,isTypedArray:M,isFileList:F,forEach:forEach,merge:merge,extend:extend,trim:trim,stripBOM:stripBOM,inherits:inherits,toFlatObject:toFlatObject,kindOf:b,kindOfTest:kindOfTest,endsWith:endsWith,toArray:toArray,forEachEntry:forEachEntry,matchAll:matchAll,isHTMLForm:L,hasOwnProperty:O,hasOwnProp:O,reduceDescriptors:reduceDescriptors,freezeMethods:freezeMethods,toObjectSet:toObjectSet,toCamelCase:toCamelCase,noop:noop,toFiniteNumber:toFiniteNumber,findKey:findKey,global:T,isContextDefined:isContextDefined,ALPHABET:q,generateString:generateString,isSpecCompliantForm:isSpecCompliantForm,toJSONObject:toJSONObject,isAsyncFn:G,isThenable:isThenable};function AxiosError(e,t,n,s,i){Error.call(this);if(Error.captureStackTrace){Error.captureStackTrace(this,this.constructor)}else{this.stack=(new Error).stack}this.message=e;this.name="AxiosError";t&&(this.code=t);n&&(this.config=n);s&&(this.request=s);i&&(this.response=i)}Y.inherits(AxiosError,Error,{toJSON:function toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:Y.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const V=AxiosError.prototype;const j={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{j[e]={value:e}}));Object.defineProperties(AxiosError,j);Object.defineProperty(V,"isAxiosError",{value:true});AxiosError.from=(e,t,n,s,i,r)=>{const o=Object.create(V);Y.toFlatObject(e,o,(function filter(e){return e!==Error.prototype}),(e=>e!=="isAxiosError"));AxiosError.call(o,e.message,t,n,s,i);o.cause=e;o.name=e.name;r&&Object.assign(o,r);return o};function isVisitable(e){return Y.isPlainObject(e)||Y.isArray(e)}function removeBrackets(e){return Y.endsWith(e,"[]")?e.slice(0,-2):e}function renderKey(e,t,n){if(!e)return t;return e.concat(t).map((function each(e,t){e=removeBrackets(e);return!n&&t?"["+e+"]":e})).join(n?".":"")}function isFlatArray(e){return Y.isArray(e)&&!e.some(isVisitable)}const W=Y.toFlatObject(Y,{},null,(function filter(e){return/^is[A-Z]/.test(e)}));function toFormData(e,t,n){if(!Y.isObject(e)){throw new TypeError("target must be an object")}t=t||new(p["default"]||FormData);n=Y.toFlatObject(n,{metaTokens:true,dots:false,indexes:false},false,(function defined(e,t){return!Y.isUndefined(t[e])}));const s=n.metaTokens;const i=n.visitor||defaultVisitor;const r=n.dots;const o=n.indexes;const A=n.Blob||typeof Blob!=="undefined"&&Blob;const a=A&&Y.isSpecCompliantForm(t);if(!Y.isFunction(i)){throw new TypeError("visitor must be a function")}function convertValue(e){if(e===null)return"";if(Y.isDate(e)){return e.toISOString()}if(!a&&Y.isBlob(e)){throw new AxiosError("Blob is not supported. Use a Buffer instead.")}if(Y.isArrayBuffer(e)||Y.isTypedArray(e)){return a&&typeof Blob==="function"?new Blob([e]):Buffer.from(e)}return e}function defaultVisitor(e,n,i){let A=e;if(e&&!i&&typeof e==="object"){if(Y.endsWith(n,"{}")){n=s?n:n.slice(0,-2);e=JSON.stringify(e)}else if(Y.isArray(e)&&isFlatArray(e)||(Y.isFileList(e)||Y.endsWith(n,"[]"))&&(A=Y.toArray(e))){n=removeBrackets(n);A.forEach((function each(e,s){!(Y.isUndefined(e)||e===null)&&t.append(o===true?renderKey([n],s,r):o===null?n:n+"[]",convertValue(e))}));return false}}if(isVisitable(e)){return true}t.append(renderKey(i,n,r),convertValue(e));return false}const c=[];const u=Object.assign(W,{defaultVisitor:defaultVisitor,convertValue:convertValue,isVisitable:isVisitable});function build(e,n){if(Y.isUndefined(e))return;if(c.indexOf(e)!==-1){throw Error("Circular reference detected in "+n.join("."))}c.push(e);Y.forEach(e,(function each(e,s){const r=!(Y.isUndefined(e)||e===null)&&i.call(t,e,Y.isString(s)?s.trim():s,n,u);if(r===true){build(e,n?n.concat(s):[s])}}));c.pop()}if(!Y.isObject(e)){throw new TypeError("data must be an object")}build(e);return t}function encode$1(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function replacer(e){return t[e]}))}function AxiosURLSearchParams(e,t){this._pairs=[];e&&toFormData(e,this,t)}const K=AxiosURLSearchParams.prototype;K.append=function append(e,t){this._pairs.push([e,t])};K.toString=function toString(e){const t=e?function(t){return e.call(this,t,encode$1)}:encode$1;return this._pairs.map((function each(e){return t(e[0])+"="+t(e[1])}),"").join("&")};function encode(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function buildURL(e,t,n){if(!t){return e}const s=n&&n.encode||encode;const i=n&&n.serialize;let r;if(i){r=i(t,n)}else{r=Y.isURLSearchParams(t)?t.toString():new AxiosURLSearchParams(t,n).toString(s)}if(r){const t=e.indexOf("#");if(t!==-1){e=e.slice(0,t)}e+=(e.indexOf("?")===-1?"?":"&")+r}return e}class InterceptorManager{constructor(){this.handlers=[]}use(e,t,n){this.handlers.push({fulfilled:e,rejected:t,synchronous:n?n.synchronous:false,runWhen:n?n.runWhen:null});return this.handlers.length-1}eject(e){if(this.handlers[e]){this.handlers[e]=null}}clear(){if(this.handlers){this.handlers=[]}}forEach(e){Y.forEach(this.handlers,(function forEachHandler(t){if(t!==null){e(t)}}))}}const z=InterceptorManager;const Z={silentJSONParsing:true,forcedJSONParsing:true,clarifyTimeoutError:false};const X=g["default"].URLSearchParams;const $={isNode:true,classes:{URLSearchParams:X,FormData:p["default"],Blob:typeof Blob!=="undefined"&&Blob||null},protocols:["http","https","file","data"]};function toURLEncodedForm(e,t){return toFormData(e,new $.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,s){if(Y.isBuffer(e)){this.append(t,e.toString("base64"));return false}return s.defaultVisitor.apply(this,arguments)}},t))}function parsePropPath(e){return Y.matchAll(/\w+|\[(\w*)]/g,e).map((e=>e[0]==="[]"?"":e[1]||e[0]))}function arrayToObject(e){const t={};const n=Object.keys(e);let s;const i=n.length;let r;for(s=0;s=e.length;i=!i&&Y.isArray(n)?n.length:i;if(o){if(Y.hasOwnProp(n,i)){n[i]=[n[i],t]}else{n[i]=t}return!r}if(!n[i]||!Y.isObject(n[i])){n[i]=[]}const A=buildPath(e,t,n[i],s);if(A&&Y.isArray(n[i])){n[i]=arrayToObject(n[i])}return!r}if(Y.isFormData(e)&&Y.isFunction(e.entries)){const t={};Y.forEachEntry(e,((e,n)=>{buildPath(parsePropPath(e),n,t,0)}));return t}return null}function stringifySafely(e,t,n){if(Y.isString(e)){try{(t||JSON.parse)(e);return Y.trim(e)}catch(e){if(e.name!=="SyntaxError"){throw e}}}return(n||JSON.stringify)(e)}const ee={transitional:Z,adapter:["xhr","http"],transformRequest:[function transformRequest(e,t){const n=t.getContentType()||"";const s=n.indexOf("application/json")>-1;const i=Y.isObject(e);if(i&&Y.isHTMLForm(e)){e=new FormData(e)}const r=Y.isFormData(e);if(r){if(!s){return e}return s?JSON.stringify(formDataToJSON(e)):e}if(Y.isArrayBuffer(e)||Y.isBuffer(e)||Y.isStream(e)||Y.isFile(e)||Y.isBlob(e)){return e}if(Y.isArrayBufferView(e)){return e.buffer}if(Y.isURLSearchParams(e)){t.setContentType("application/x-www-form-urlencoded;charset=utf-8",false);return e.toString()}let o;if(i){if(n.indexOf("application/x-www-form-urlencoded")>-1){return toURLEncodedForm(e,this.formSerializer).toString()}if((o=Y.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return toFormData(o?{"files[]":e}:e,t&&new t,this.formSerializer)}}if(i||s){t.setContentType("application/json",false);return stringifySafely(e)}return e}],transformResponse:[function transformResponse(e){const t=this.transitional||ee.transitional;const n=t&&t.forcedJSONParsing;const s=this.responseType==="json";if(e&&Y.isString(e)&&(n&&!this.responseType||s)){const n=t&&t.silentJSONParsing;const i=!n&&s;try{return JSON.parse(e)}catch(e){if(i){if(e.name==="SyntaxError"){throw AxiosError.from(e,AxiosError.ERR_BAD_RESPONSE,this,null,this.response)}throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:$.classes.FormData,Blob:$.classes.Blob},validateStatus:function validateStatus(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":undefined}}};Y.forEach(["delete","get","head","post","put","patch"],(e=>{ee.headers[e]={}}));const te=ee;const ne=Y.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const parseHeaders=e=>{const t={};let n;let s;let i;e&&e.split("\n").forEach((function parser(e){i=e.indexOf(":");n=e.substring(0,i).trim().toLowerCase();s=e.substring(i+1).trim();if(!n||t[n]&&ne[n]){return}if(n==="set-cookie"){if(t[n]){t[n].push(s)}else{t[n]=[s]}}else{t[n]=t[n]?t[n]+", "+s:s}}));return t};const se=Symbol("internals");function normalizeHeader(e){return e&&String(e).trim().toLowerCase()}function normalizeValue(e){if(e===false||e==null){return e}return Y.isArray(e)?e.map(normalizeValue):String(e)}function parseTokens(e){const t=Object.create(null);const n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let s;while(s=n.exec(e)){t[s[1]]=s[2]}return t}const isValidHeaderName=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function matchHeaderValue(e,t,n,s,i){if(Y.isFunction(s)){return s.call(this,t,n)}if(i){t=n}if(!Y.isString(t))return;if(Y.isString(s)){return t.indexOf(s)!==-1}if(Y.isRegExp(s)){return s.test(t)}}function formatHeader(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}function buildAccessors(e,t){const n=Y.toCamelCase(" "+t);["get","set","has"].forEach((s=>{Object.defineProperty(e,s+n,{value:function(e,n,i){return this[s].call(this,t,e,n,i)},configurable:true})}))}class AxiosHeaders{constructor(e){e&&this.set(e)}set(e,t,n){const s=this;function setHeader(e,t,n){const i=normalizeHeader(t);if(!i){throw new Error("header name must be a non-empty string")}const r=Y.findKey(s,i);if(!r||s[r]===undefined||n===true||n===undefined&&s[r]!==false){s[r||t]=normalizeValue(e)}}const setHeaders=(e,t)=>Y.forEach(e,((e,n)=>setHeader(e,n,t)));if(Y.isPlainObject(e)||e instanceof this.constructor){setHeaders(e,t)}else if(Y.isString(e)&&(e=e.trim())&&!isValidHeaderName(e)){setHeaders(parseHeaders(e),t)}else{e!=null&&setHeader(t,e,n)}return this}get(e,t){e=normalizeHeader(e);if(e){const n=Y.findKey(this,e);if(n){const e=this[n];if(!t){return e}if(t===true){return parseTokens(e)}if(Y.isFunction(t)){return t.call(this,e,n)}if(Y.isRegExp(t)){return t.exec(e)}throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){e=normalizeHeader(e);if(e){const n=Y.findKey(this,e);return!!(n&&this[n]!==undefined&&(!t||matchHeaderValue(this,this[n],n,t)))}return false}delete(e,t){const n=this;let s=false;function deleteHeader(e){e=normalizeHeader(e);if(e){const i=Y.findKey(n,e);if(i&&(!t||matchHeaderValue(n,n[i],i,t))){delete n[i];s=true}}}if(Y.isArray(e)){e.forEach(deleteHeader)}else{deleteHeader(e)}return s}clear(e){const t=Object.keys(this);let n=t.length;let s=false;while(n--){const i=t[n];if(!e||matchHeaderValue(this,this[i],i,e,true)){delete this[i];s=true}}return s}normalize(e){const t=this;const n={};Y.forEach(this,((s,i)=>{const r=Y.findKey(n,i);if(r){t[r]=normalizeValue(s);delete t[i];return}const o=e?formatHeader(i):String(i).trim();if(o!==i){delete t[i]}t[o]=normalizeValue(s);n[o]=true}));return this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);Y.forEach(this,((n,s)=>{n!=null&&n!==false&&(t[s]=e&&Y.isArray(n)?n.join(", "):n)}));return t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);t.forEach((e=>n.set(e)));return n}static accessor(e){const t=this[se]=this[se]={accessors:{}};const n=t.accessors;const s=this.prototype;function defineAccessor(e){const t=normalizeHeader(e);if(!n[t]){buildAccessors(s,e);n[t]=true}}Y.isArray(e)?e.forEach(defineAccessor):defineAccessor(e);return this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);Y.reduceDescriptors(AxiosHeaders.prototype,(({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}}));Y.freezeMethods(AxiosHeaders);const ie=AxiosHeaders;function transformData(e,t){const n=this||te;const s=t||n;const i=ie.from(s.headers);let r=s.data;Y.forEach(e,(function transform(e){r=e.call(n,r,i.normalize(),t?t.status:undefined)}));i.normalize();return r}function isCancel(e){return!!(e&&e.__CANCEL__)}function CanceledError(e,t,n){AxiosError.call(this,e==null?"canceled":e,AxiosError.ERR_CANCELED,t,n);this.name="CanceledError"}Y.inherits(CanceledError,AxiosError,{__CANCEL__:true});function settle(e,t,n){const s=n.config.validateStatus;if(!n.status||!s||s(n.status)){e(n)}else{t(new AxiosError("Request failed with status code "+n.status,[AxiosError.ERR_BAD_REQUEST,AxiosError.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}}function isAbsoluteURL(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function combineURLs(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}function buildFullPath(e,t){if(e&&!isAbsoluteURL(t)){return combineURLs(e,t)}return t}const re="1.6.0";function parseProtocol(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}const oe=/^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/;function fromDataURI(e,t,n){const s=n&&n.Blob||$.classes.Blob;const i=parseProtocol(e);if(t===undefined&&s){t=true}if(i==="data"){e=i.length?e.slice(i.length+1):e;const n=oe.exec(e);if(!n){throw new AxiosError("Invalid URL",AxiosError.ERR_INVALID_URL)}const r=n[1];const o=n[2];const A=n[3];const a=Buffer.from(decodeURIComponent(A),o?"base64":"utf8");if(t){if(!s){throw new AxiosError("Blob is not supported",AxiosError.ERR_NOT_SUPPORT)}return new s([a],{type:r})}return a}throw new AxiosError("Unsupported protocol "+i,AxiosError.ERR_NOT_SUPPORT)}function throttle(e,t){let n=0;const s=1e3/t;let i=null;return function throttled(t,r){const o=Date.now();if(t||o-n>s){if(i){clearTimeout(i);i=null}n=o;return e.apply(null,r)}if(!i){i=setTimeout((()=>{i=null;n=Date.now();return e.apply(null,r)}),s-(o-n))}}}function speedometer(e,t){e=e||10;const n=new Array(e);const s=new Array(e);let i=0;let r=0;let o;t=t!==undefined?t:1e3;return function push(A){const a=Date.now();const c=s[r];if(!o){o=a}n[i]=A;s[i]=a;let u=r;let l=0;while(u!==i){l+=n[u++];u=u%e}i=(i+1)%e;if(i===r){r=(r+1)%e}if(a-o!Y.isUndefined(t[e])));super({readableHighWaterMark:e.chunkSize});const t=this;const n=this[Ae]={length:e.length,timeWindow:e.timeWindow,ticksRate:e.ticksRate,chunkSize:e.chunkSize,maxRate:e.maxRate,minChunkSize:e.minChunkSize,bytesSeen:0,isCaptured:false,notifiedBytesLoaded:0,ts:Date.now(),bytes:0,onReadCallback:null};const s=speedometer(n.ticksRate*e.samplesCount,n.timeWindow);this.on("newListener",(e=>{if(e==="progress"){if(!n.isCaptured){n.isCaptured=true}}}));let i=0;n.updateProgress=throttle((function throttledHandler(){const e=n.length;const r=n.bytesSeen;const o=r-i;if(!o||t.destroyed)return;const A=s(o);i=r;process.nextTick((()=>{t.emit("progress",{loaded:r,total:e,progress:e?r/e:undefined,bytes:o,rate:A?A:undefined,estimated:A&&e&&r<=e?(e-r)/A:undefined})}))}),n.ticksRate);const onFinish=()=>{n.updateProgress(true)};this.once("end",onFinish);this.once("error",onFinish)}_read(e){const t=this[Ae];if(t.onReadCallback){t.onReadCallback()}return super._read(e)}_transform(e,t,n){const s=this;const i=this[Ae];const r=i.maxRate;const o=this.readableHighWaterMark;const A=i.timeWindow;const a=1e3/A;const c=r/a;const u=i.minChunkSize!==false?Math.max(i.minChunkSize,c*.01):0;function pushChunk(e,t){const n=Buffer.byteLength(e);i.bytesSeen+=n;i.bytes+=n;if(i.isCaptured){i.updateProgress()}if(s.push(e)){process.nextTick(t)}else{i.onReadCallback=()=>{i.onReadCallback=null;process.nextTick(t)}}}const transformChunk=(e,t)=>{const n=Buffer.byteLength(e);let s=null;let a=o;let l;let d=0;if(r){const e=Date.now();if(!i.ts||(d=e-i.ts)>=A){i.ts=e;l=c-i.bytes;i.bytes=l<0?-l:0;d=0}l=c-i.bytes}if(r){if(l<=0){return setTimeout((()=>{t(null,e)}),A-d)}if(la&&n-a>u){s=e.subarray(a);e=e.subarray(0,a)}pushChunk(e,s?()=>{process.nextTick(t,null,s)}:t)};transformChunk(e,(function transformNextChunk(e,t){if(e){return n(e)}if(t){transformChunk(t,transformNextChunk)}else{n(null)}}))}setLength(e){this[Ae].length=+e;return this}}const ae=AxiosTransformStream;const{asyncIterator:ce}=Symbol;const readBlob=async function*(e){if(e.stream){yield*e.stream()}else if(e.arrayBuffer){yield await e.arrayBuffer()}else if(e[ce]){yield*e[ce]()}else{yield e}};const ue=readBlob;const le=Y.ALPHABET.ALPHA_DIGIT+"-_";const de=new a.TextEncoder;const pe="\r\n";const ge=de.encode(pe);const he=2;class FormDataPart{constructor(e,t){const{escapeName:n}=this.constructor;const s=Y.isString(t);let i=`Content-Disposition: form-data; name="${n(e)}"${!s&&t.name?`; filename="${n(t.name)}"`:""}${pe}`;if(s){t=de.encode(String(t).replace(/\r?\n|\r\n?/g,pe))}else{i+=`Content-Type: ${t.type||"application/octet-stream"}${pe}`}this.headers=de.encode(i+pe);this.contentLength=s?t.byteLength:t.size;this.size=this.headers.byteLength+this.contentLength+he;this.name=e;this.value=t}async*encode(){yield this.headers;const{value:e}=this;if(Y.isTypedArray(e)){yield e}else{yield*ue(e)}yield ge}static escapeName(e){return String(e).replace(/[\r\n"]/g,(e=>({"\r":"%0D","\n":"%0A",'"':"%22"}[e])))}}const formDataToStream=(e,t,n)=>{const{tag:s="form-data-boundary",size:i=25,boundary:r=s+"-"+Y.generateString(i,le)}=n||{};if(!Y.isFormData(e)){throw TypeError("FormData instance required")}if(r.length<1||r.length>70){throw Error("boundary must be 10-70 characters long")}const o=de.encode("--"+r+pe);const A=de.encode("--"+r+"--"+pe+pe);let a=A.byteLength;const c=Array.from(e.entries()).map((([e,t])=>{const n=new FormDataPart(e,t);a+=n.size;return n}));a+=o.byteLength*c.length;a=Y.toFiniteNumber(a);const u={"Content-Type":`multipart/form-data; boundary=${r}`};if(Number.isFinite(a)){u["Content-Length"]=a}t&&t(u);return l.Readable.from(async function*(){for(const e of c){yield o;yield*e.encode()}yield A}())};const fe=formDataToStream;class ZlibHeaderTransformStream extends Q["default"].Transform{__transform(e,t,n){this.push(e);n()}_transform(e,t,n){if(e.length!==0){this._transform=this.__transform;if(e[0]!==120){const e=Buffer.alloc(2);e[0]=120;e[1]=156;this.push(e,t)}}this.__transform(e,t,n)}}const Ee=ZlibHeaderTransformStream;const callbackify=(e,t)=>Y.isAsyncFn(e)?function(...n){const s=n.pop();e.apply(this,n).then((e=>{try{t?s(null,...t(e)):s(null,e)}catch(e){s(e)}}),s)}:e;const me=callbackify;const Ce={flush:C["default"].constants.Z_SYNC_FLUSH,finishFlush:C["default"].constants.Z_SYNC_FLUSH};const Qe={flush:C["default"].constants.BROTLI_OPERATION_FLUSH,finishFlush:C["default"].constants.BROTLI_OPERATION_FLUSH};const Ie=Y.isFunction(C["default"].createBrotliDecompress);const{http:Be,https:ye}=m["default"];const be=/https:?/;const we=$.protocols.map((e=>e+":"));function dispatchBeforeRedirect(e){if(e.beforeRedirects.proxy){e.beforeRedirects.proxy(e)}if(e.beforeRedirects.config){e.beforeRedirects.config(e)}}function setProxy(e,t,n){let s=t;if(!s&&s!==false){const e=r.getProxyForUrl(n);if(e){s=new URL(e)}}if(s){if(s.username){s.auth=(s.username||"")+":"+(s.password||"")}if(s.auth){if(s.auth.username||s.auth.password){s.auth=(s.auth.username||"")+":"+(s.auth.password||"")}const t=Buffer.from(s.auth,"utf8").toString("base64");e.headers["Proxy-Authorization"]="Basic "+t}e.headers.host=e.hostname+(e.port?":"+e.port:"");const t=s.hostname||s.host;e.hostname=t;e.host=t;e.port=s.port;e.path=n;if(s.protocol){e.protocol=s.protocol.includes(":")?s.protocol:`${s.protocol}:`}}e.beforeRedirects.proxy=function beforeRedirect(e){setProxy(e,t,e.href)}}const Re=typeof process!=="undefined"&&Y.kindOf(process)==="process";const wrapAsync=e=>new Promise(((t,n)=>{let s;let i;const done=(e,t)=>{if(i)return;i=true;s&&s(e,t)};const _resolve=e=>{done(e);t(e)};const _reject=e=>{done(e,true);n(e)};e(_resolve,_reject,(e=>s=e)).catch(_reject)}));const resolveFamily=({address:e,family:t})=>{if(!Y.isString(e)){throw TypeError("address must be a string")}return{address:e,family:t||(e.indexOf(".")<0?6:4)}};const buildAddressEntry=(e,t)=>resolveFamily(Y.isObject(e)?e:{address:e,family:t});const ve=Re&&function httpAdapter(e){return wrapAsync((async function dispatchHttpRequest(t,n,s){let{data:i,lookup:r,family:o}=e;const{responseType:A,responseEncoding:a}=e;const c=e.method.toUpperCase();let u;let l=false;let d;if(r){const e=me(r,(e=>Y.isArray(e)?e:[e]));r=(t,n,s)=>{e(t,n,((e,t,i)=>{const r=Y.isArray(t)?t.map((e=>buildAddressEntry(e))):[buildAddressEntry(t,i)];n.all?s(e,r):s(e,r[0].address,r[0].family)}))}}const p=new I["default"];const onFinished=()=>{if(e.cancelToken){e.cancelToken.unsubscribe(abort)}if(e.signal){e.signal.removeEventListener("abort",abort)}p.removeAllListeners()};s(((e,t)=>{u=true;if(t){l=true;onFinished()}}));function abort(t){p.emit("abort",!t||t.type?new CanceledError(null,e,d):t)}p.once("abort",n);if(e.cancelToken||e.signal){e.cancelToken&&e.cancelToken.subscribe(abort);if(e.signal){e.signal.aborted?abort():e.signal.addEventListener("abort",abort)}}const g=buildFullPath(e.baseURL,e.url);const m=new URL(g,"http://localhost");const B=m.protocol||we[0];if(B==="data:"){let s;if(c!=="GET"){return settle(t,n,{status:405,statusText:"method not allowed",headers:{},config:e})}try{s=fromDataURI(e.url,A==="blob",{Blob:e.env&&e.env.Blob})}catch(t){throw AxiosError.from(t,AxiosError.ERR_BAD_REQUEST,e)}if(A==="text"){s=s.toString(a);if(!a||a==="utf8"){s=Y.stripBOM(s)}}else if(A==="stream"){s=Q["default"].Readable.from(s)}return settle(t,n,{data:s,status:200,statusText:"OK",headers:new ie,config:e})}if(we.indexOf(B)===-1){return n(new AxiosError("Unsupported protocol "+B,AxiosError.ERR_BAD_REQUEST,e))}const y=ie.from(e.headers).normalize();y.set("User-Agent","axios/"+re,false);const b=e.onDownloadProgress;const w=e.onUploadProgress;const R=e.maxRate;let v=undefined;let k=undefined;if(Y.isSpecCompliantForm(i)){const e=y.getContentType(/boundary=([-_\w\d]{10,70})/i);i=fe(i,(e=>{y.set(e)}),{tag:`axios-${re}-boundary`,boundary:e&&e[1]||undefined})}else if(Y.isFormData(i)&&Y.isFunction(i.getHeaders)){y.set(i.getHeaders());if(!y.hasContentLength()){try{const e=await E["default"].promisify(i.getLength).call(i);Number.isFinite(e)&&e>=0&&y.setContentLength(e)}catch(e){}}}else if(Y.isBlob(i)){i.size&&y.setContentType(i.type||"application/octet-stream");y.setContentLength(i.size||0);i=Q["default"].Readable.from(ue(i))}else if(i&&!Y.isStream(i)){if(Buffer.isBuffer(i));else if(Y.isArrayBuffer(i)){i=Buffer.from(new Uint8Array(i))}else if(Y.isString(i)){i=Buffer.from(i,"utf-8")}else{return n(new AxiosError("Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream",AxiosError.ERR_BAD_REQUEST,e))}y.setContentLength(i.length,false);if(e.maxBodyLength>-1&&i.length>e.maxBodyLength){return n(new AxiosError("Request body larger than maxBodyLength limit",AxiosError.ERR_BAD_REQUEST,e))}}const S=Y.toFiniteNumber(y.getContentLength());if(Y.isArray(R)){v=R[0];k=R[1]}else{v=k=R}if(i&&(w||v)){if(!Y.isStream(i)){i=Q["default"].Readable.from(i,{objectMode:false})}i=Q["default"].pipeline([i,new ae({length:S,maxRate:Y.toFiniteNumber(v)})],Y.noop);w&&i.on("progress",(e=>{w(Object.assign(e,{upload:true}))}))}let x=undefined;if(e.auth){const t=e.auth.username||"";const n=e.auth.password||"";x=t+":"+n}if(!x&&m.username){const e=m.username;const t=m.password;x=e+":"+t}x&&y.delete("authorization");let D;try{D=buildURL(m.pathname+m.search,e.params,e.paramsSerializer).replace(/^\?/,"")}catch(t){const s=new Error(t.message);s.config=e;s.url=e.url;s.exists=true;return n(s)}y.set("Accept-Encoding","gzip, compress, deflate"+(Ie?", br":""),false);const _={path:D,method:c,headers:y.toJSON(),agents:{http:e.httpAgent,https:e.httpsAgent},auth:x,protocol:B,family:o,beforeRedirect:dispatchBeforeRedirect,beforeRedirects:{}};!Y.isUndefined(r)&&(_.lookup=r);if(e.socketPath){_.socketPath=e.socketPath}else{_.hostname=m.hostname;_.port=m.port;setProxy(_,e.proxy,B+"//"+m.hostname+(m.port?":"+m.port:"")+_.path)}let N;const F=be.test(_.protocol);_.agent=F?e.httpsAgent:e.httpAgent;if(e.transport){N=e.transport}else if(e.maxRedirects===0){N=F?f["default"]:h["default"]}else{if(e.maxRedirects){_.maxRedirects=e.maxRedirects}if(e.beforeRedirect){_.beforeRedirects.config=e.beforeRedirect}N=F?ye:Be}if(e.maxBodyLength>-1){_.maxBodyLength=e.maxBodyLength}else{_.maxBodyLength=Infinity}if(e.insecureHTTPParser){_.insecureHTTPParser=e.insecureHTTPParser}d=N.request(_,(function handleResponse(s){if(d.destroyed)return;const i=[s];const r=+s.headers["content-length"];if(b){const e=new ae({length:Y.toFiniteNumber(r),maxRate:Y.toFiniteNumber(k)});b&&e.on("progress",(e=>{b(Object.assign(e,{download:true}))}));i.push(e)}let o=s;const u=s.req||d;if(e.decompress!==false&&s.headers["content-encoding"]){if(c==="HEAD"||s.statusCode===204){delete s.headers["content-encoding"]}switch((s.headers["content-encoding"]||"").toLowerCase()){case"gzip":case"x-gzip":case"compress":case"x-compress":i.push(C["default"].createUnzip(Ce));delete s.headers["content-encoding"];break;case"deflate":i.push(new Ee);i.push(C["default"].createUnzip(Ce));delete s.headers["content-encoding"];break;case"br":if(Ie){i.push(C["default"].createBrotliDecompress(Qe));delete s.headers["content-encoding"]}}}o=i.length>1?Q["default"].pipeline(i,Y.noop):i[0];const g=Q["default"].finished(o,(()=>{g();onFinished()}));const h={status:s.statusCode,statusText:s.statusMessage,headers:new ie(s.headers),config:e,request:u};if(A==="stream"){h.data=o;settle(t,n,h)}else{const s=[];let i=0;o.on("data",(function handleStreamData(t){s.push(t);i+=t.length;if(e.maxContentLength>-1&&i>e.maxContentLength){l=true;o.destroy();n(new AxiosError("maxContentLength size of "+e.maxContentLength+" exceeded",AxiosError.ERR_BAD_RESPONSE,e,u))}}));o.on("aborted",(function handlerStreamAborted(){if(l){return}const t=new AxiosError("maxContentLength size of "+e.maxContentLength+" exceeded",AxiosError.ERR_BAD_RESPONSE,e,u);o.destroy(t);n(t)}));o.on("error",(function handleStreamError(t){if(d.destroyed)return;n(AxiosError.from(t,null,e,u))}));o.on("end",(function handleStreamEnd(){try{let e=s.length===1?s[0]:Buffer.concat(s);if(A!=="arraybuffer"){e=e.toString(a);if(!a||a==="utf8"){e=Y.stripBOM(e)}}h.data=e}catch(t){return n(AxiosError.from(t,null,e,h.request,h))}settle(t,n,h)}))}p.once("abort",(e=>{if(!o.destroyed){o.emit("error",e);o.destroy()}}))}));p.once("abort",(e=>{n(e);d.destroy(e)}));d.on("error",(function handleRequestError(t){n(AxiosError.from(t,null,e,d))}));d.on("socket",(function handleRequestSocket(e){e.setKeepAlive(true,1e3*60)}));if(e.timeout){const t=parseInt(e.timeout,10);if(Number.isNaN(t)){n(new AxiosError("error trying to parse `config.timeout` to int",AxiosError.ERR_BAD_OPTION_VALUE,e,d));return}d.setTimeout(t,(function handleRequestTimeout(){if(u)return;let t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const s=e.transitional||Z;if(e.timeoutErrorMessage){t=e.timeoutErrorMessage}n(new AxiosError(t,s.clarifyTimeoutError?AxiosError.ETIMEDOUT:AxiosError.ECONNABORTED,e,d));abort()}))}if(Y.isStream(i)){let t=false;let n=false;i.on("end",(()=>{t=true}));i.once("error",(e=>{n=true;d.destroy(e)}));i.on("close",(()=>{if(!t&&!n){abort(new CanceledError("Request stream has been aborted",e,d))}}));i.pipe(d)}else{d.end(i)}}))};const ke=$.isStandardBrowserEnv?function standardBrowserEnv(){return{write:function write(e,t,n,s,i,r){const o=[];o.push(e+"="+encodeURIComponent(t));if(Y.isNumber(n)){o.push("expires="+new Date(n).toGMTString())}if(Y.isString(s)){o.push("path="+s)}if(Y.isString(i)){o.push("domain="+i)}if(r===true){o.push("secure")}document.cookie=o.join("; ")},read:function read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function remove(e){this.write(e,"",Date.now()-864e5)}}}():function nonStandardBrowserEnv(){return{write:function write(){},read:function read(){return null},remove:function remove(){}}}();const Se=$.isStandardBrowserEnv?function standardBrowserEnv(){const e=/(msie|trident)/i.test(navigator.userAgent);const t=document.createElement("a");let n;function resolveURL(n){let s=n;if(e){t.setAttribute("href",s);s=t.href}t.setAttribute("href",s);return{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:t.pathname.charAt(0)==="/"?t.pathname:"/"+t.pathname}}n=resolveURL(window.location.href);return function isURLSameOrigin(e){const t=Y.isString(e)?resolveURL(e):e;return t.protocol===n.protocol&&t.host===n.host}}():function nonStandardBrowserEnv(){return function isURLSameOrigin(){return true}}();function progressEventReducer(e,t){let n=0;const s=speedometer(50,250);return i=>{const r=i.loaded;const o=i.lengthComputable?i.total:undefined;const A=r-n;const a=s(A);const c=r<=o;n=r;const u={loaded:r,total:o,progress:o?r/o:undefined,bytes:A,rate:a?a:undefined,estimated:a&&o&&c?(o-r)/a:undefined,event:i};u[t?"download":"upload"]=true;e(u)}}const xe=typeof XMLHttpRequest!=="undefined";const De=xe&&function(e){return new Promise((function dispatchXhrRequest(t,n){let s=e.data;const i=ie.from(e.headers).normalize();const r=e.responseType;let o;function done(){if(e.cancelToken){e.cancelToken.unsubscribe(o)}if(e.signal){e.signal.removeEventListener("abort",o)}}let A;if(Y.isFormData(s)){if($.isStandardBrowserEnv||$.isStandardBrowserWebWorkerEnv){i.setContentType(false)}else if(!i.getContentType(/^\s*multipart\/form-data/)){i.setContentType("multipart/form-data")}else if(Y.isString(A=i.getContentType())){i.setContentType(A.replace(/^\s*(multipart\/form-data);+/,"$1"))}}let a=new XMLHttpRequest;if(e.auth){const t=e.auth.username||"";const n=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";i.set("Authorization","Basic "+btoa(t+":"+n))}const c=buildFullPath(e.baseURL,e.url);a.open(e.method.toUpperCase(),buildURL(c,e.params,e.paramsSerializer),true);a.timeout=e.timeout;function onloadend(){if(!a){return}const s=ie.from("getAllResponseHeaders"in a&&a.getAllResponseHeaders());const i=!r||r==="text"||r==="json"?a.responseText:a.response;const o={data:i,status:a.status,statusText:a.statusText,headers:s,config:e,request:a};settle((function _resolve(e){t(e);done()}),(function _reject(e){n(e);done()}),o);a=null}if("onloadend"in a){a.onloadend=onloadend}else{a.onreadystatechange=function handleLoad(){if(!a||a.readyState!==4){return}if(a.status===0&&!(a.responseURL&&a.responseURL.indexOf("file:")===0)){return}setTimeout(onloadend)}}a.onabort=function handleAbort(){if(!a){return}n(new AxiosError("Request aborted",AxiosError.ECONNABORTED,e,a));a=null};a.onerror=function handleError(){n(new AxiosError("Network Error",AxiosError.ERR_NETWORK,e,a));a=null};a.ontimeout=function handleTimeout(){let t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const s=e.transitional||Z;if(e.timeoutErrorMessage){t=e.timeoutErrorMessage}n(new AxiosError(t,s.clarifyTimeoutError?AxiosError.ETIMEDOUT:AxiosError.ECONNABORTED,e,a));a=null};if($.isStandardBrowserEnv){const t=Se(c)&&e.xsrfCookieName&&ke.read(e.xsrfCookieName);if(t){i.set(e.xsrfHeaderName,t)}}s===undefined&&i.setContentType(null);if("setRequestHeader"in a){Y.forEach(i.toJSON(),(function setRequestHeader(e,t){a.setRequestHeader(t,e)}))}if(!Y.isUndefined(e.withCredentials)){a.withCredentials=!!e.withCredentials}if(r&&r!=="json"){a.responseType=e.responseType}if(typeof e.onDownloadProgress==="function"){a.addEventListener("progress",progressEventReducer(e.onDownloadProgress,true))}if(typeof e.onUploadProgress==="function"&&a.upload){a.upload.addEventListener("progress",progressEventReducer(e.onUploadProgress))}if(e.cancelToken||e.signal){o=t=>{if(!a){return}n(!t||t.type?new CanceledError(null,e,a):t);a.abort();a=null};e.cancelToken&&e.cancelToken.subscribe(o);if(e.signal){e.signal.aborted?o():e.signal.addEventListener("abort",o)}}const u=parseProtocol(c);if(u&&$.protocols.indexOf(u)===-1){n(new AxiosError("Unsupported protocol "+u+":",AxiosError.ERR_BAD_REQUEST,e));return}a.send(s||null)}))};const _e={http:ve,xhr:De};Y.forEach(_e,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const renderReason=e=>`- ${e}`;const isResolvedHandle=e=>Y.isFunction(e)||e===null||e===false;const Ne={getAdapter:e=>{e=Y.isArray(e)?e:[e];const{length:t}=e;let n;let s;const i={};for(let r=0;r`adapter ${e} `+(t===false?"is not supported by the environment":"is not available in the build")));let n=t?e.length>1?"since :\n"+e.map(renderReason).join("\n"):" "+renderReason(e[0]):"as no adapter specified";throw new AxiosError(`There is no suitable adapter to dispatch the request `+n,"ERR_NOT_SUPPORT")}return s},adapters:_e};function throwIfCancellationRequested(e){if(e.cancelToken){e.cancelToken.throwIfRequested()}if(e.signal&&e.signal.aborted){throw new CanceledError(null,e)}}function dispatchRequest(e){throwIfCancellationRequested(e);e.headers=ie.from(e.headers);e.data=transformData.call(e,e.transformRequest);if(["post","put","patch"].indexOf(e.method)!==-1){e.headers.setContentType("application/x-www-form-urlencoded",false)}const t=Ne.getAdapter(e.adapter||te.adapter);return t(e).then((function onAdapterResolution(t){throwIfCancellationRequested(e);t.data=transformData.call(e,e.transformResponse,t);t.headers=ie.from(t.headers);return t}),(function onAdapterRejection(t){if(!isCancel(t)){throwIfCancellationRequested(e);if(t&&t.response){t.response.data=transformData.call(e,e.transformResponse,t.response);t.response.headers=ie.from(t.response.headers)}}return Promise.reject(t)}))}const headersToObject=e=>e instanceof ie?e.toJSON():e;function mergeConfig(e,t){t=t||{};const n={};function getMergedValue(e,t,n){if(Y.isPlainObject(e)&&Y.isPlainObject(t)){return Y.merge.call({caseless:n},e,t)}else if(Y.isPlainObject(t)){return Y.merge({},t)}else if(Y.isArray(t)){return t.slice()}return t}function mergeDeepProperties(e,t,n){if(!Y.isUndefined(t)){return getMergedValue(e,t,n)}else if(!Y.isUndefined(e)){return getMergedValue(undefined,e,n)}}function valueFromConfig2(e,t){if(!Y.isUndefined(t)){return getMergedValue(undefined,t)}}function defaultToConfig2(e,t){if(!Y.isUndefined(t)){return getMergedValue(undefined,t)}else if(!Y.isUndefined(e)){return getMergedValue(undefined,e)}}function mergeDirectKeys(n,s,i){if(i in t){return getMergedValue(n,s)}else if(i in e){return getMergedValue(undefined,n)}}const s={url:valueFromConfig2,method:valueFromConfig2,data:valueFromConfig2,baseURL:defaultToConfig2,transformRequest:defaultToConfig2,transformResponse:defaultToConfig2,paramsSerializer:defaultToConfig2,timeout:defaultToConfig2,timeoutMessage:defaultToConfig2,withCredentials:defaultToConfig2,adapter:defaultToConfig2,responseType:defaultToConfig2,xsrfCookieName:defaultToConfig2,xsrfHeaderName:defaultToConfig2,onUploadProgress:defaultToConfig2,onDownloadProgress:defaultToConfig2,decompress:defaultToConfig2,maxContentLength:defaultToConfig2,maxBodyLength:defaultToConfig2,beforeRedirect:defaultToConfig2,transport:defaultToConfig2,httpAgent:defaultToConfig2,httpsAgent:defaultToConfig2,cancelToken:defaultToConfig2,socketPath:defaultToConfig2,responseEncoding:defaultToConfig2,validateStatus:mergeDirectKeys,headers:(e,t)=>mergeDeepProperties(headersToObject(e),headersToObject(t),true)};Y.forEach(Object.keys(Object.assign({},e,t)),(function computeConfigValue(i){const r=s[i]||mergeDeepProperties;const o=r(e[i],t[i],i);Y.isUndefined(o)&&r!==mergeDirectKeys||(n[i]=o)}));return n}const Fe={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{Fe[e]=function validator(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const Ue={};Fe.transitional=function transitional(e,t,n){function formatMessage(e,t){return"[Axios v"+re+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,s,i)=>{if(e===false){throw new AxiosError(formatMessage(s," has been removed"+(t?" in "+t:"")),AxiosError.ERR_DEPRECATED)}if(t&&!Ue[s]){Ue[s]=true;console.warn(formatMessage(s," has been deprecated since v"+t+" and will be removed in the near future"))}return e?e(n,s,i):true}};function assertOptions(e,t,n){if(typeof e!=="object"){throw new AxiosError("options must be an object",AxiosError.ERR_BAD_OPTION_VALUE)}const s=Object.keys(e);let i=s.length;while(i-- >0){const r=s[i];const o=t[r];if(o){const t=e[r];const n=t===undefined||o(t,r,e);if(n!==true){throw new AxiosError("option "+r+" must be "+n,AxiosError.ERR_BAD_OPTION_VALUE)}continue}if(n!==true){throw new AxiosError("Unknown option "+r,AxiosError.ERR_BAD_OPTION)}}}const Te={assertOptions:assertOptions,validators:Fe};const Me=Te.validators;class Axios{constructor(e){this.defaults=e;this.interceptors={request:new z,response:new z}}request(e,t){if(typeof e==="string"){t=t||{};t.url=e}else{t=e||{}}t=mergeConfig(this.defaults,t);const{transitional:n,paramsSerializer:s,headers:i}=t;if(n!==undefined){Te.assertOptions(n,{silentJSONParsing:Me.transitional(Me.boolean),forcedJSONParsing:Me.transitional(Me.boolean),clarifyTimeoutError:Me.transitional(Me.boolean)},false)}if(s!=null){if(Y.isFunction(s)){t.paramsSerializer={serialize:s}}else{Te.assertOptions(s,{encode:Me.function,serialize:Me.function},true)}}t.method=(t.method||this.defaults.method||"get").toLowerCase();let r=i&&Y.merge(i.common,i[t.method]);i&&Y.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete i[e]}));t.headers=ie.concat(r,i);const o=[];let A=true;this.interceptors.request.forEach((function unshiftRequestInterceptors(e){if(typeof e.runWhen==="function"&&e.runWhen(t)===false){return}A=A&&e.synchronous;o.unshift(e.fulfilled,e.rejected)}));const a=[];this.interceptors.response.forEach((function pushResponseInterceptors(e){a.push(e.fulfilled,e.rejected)}));let c;let u=0;let l;if(!A){const e=[dispatchRequest.bind(this),undefined];e.unshift.apply(e,o);e.push.apply(e,a);l=e.length;c=Promise.resolve(t);while(u{if(!n._listeners)return;let t=n._listeners.length;while(t-- >0){n._listeners[t](e)}n._listeners=null}));this.promise.then=e=>{let t;const s=new Promise((e=>{n.subscribe(e);t=e})).then(e);s.cancel=function reject(){n.unsubscribe(t)};return s};e((function cancel(e,s,i){if(n.reason){return}n.reason=new CanceledError(e,s,i);t(n.reason)}))}throwIfRequested(){if(this.reason){throw this.reason}}subscribe(e){if(this.reason){e(this.reason);return}if(this._listeners){this._listeners.push(e)}else{this._listeners=[e]}}unsubscribe(e){if(!this._listeners){return}const t=this._listeners.indexOf(e);if(t!==-1){this._listeners.splice(t,1)}}static source(){let e;const t=new CancelToken((function executor(t){e=t}));return{token:t,cancel:e}}}const Oe=CancelToken;function spread(e){return function wrap(t){return e.apply(null,t)}}function isAxiosError(e){return Y.isObject(e)&&e.isAxiosError===true}const Pe={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Pe).forEach((([e,t])=>{Pe[t]=e}));const Je=Pe;function createInstance(e){const t=new Le(e);const n=bind(Le.prototype.request,t);Y.extend(n,Le.prototype,t,{allOwnKeys:true});Y.extend(n,t,null,{allOwnKeys:true});n.create=function create(t){return createInstance(mergeConfig(e,t))};return n}const He=createInstance(te);He.Axios=Le;He.CanceledError=CanceledError;He.CancelToken=Oe;He.isCancel=isCancel;He.VERSION=re;He.toFormData=toFormData;He.AxiosError=AxiosError;He.Cancel=He.CanceledError;He.all=function all(e){return Promise.all(e)};He.spread=spread;He.isAxiosError=isAxiosError;He.mergeConfig=mergeConfig;He.AxiosHeaders=ie;He.formToJSON=e=>formDataToJSON(Y.isHTMLForm(e)?new FormData(e):e);He.getAdapter=Ne.getAdapter;He.HttpStatusCode=Je;He.default=He;e.exports=He},3765:e=>{"use strict";e.exports=JSON.parse('{"application/1d-interleaved-parityfec":{"source":"iana"},"application/3gpdash-qoe-report+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/3gpp-ims+xml":{"source":"iana","compressible":true},"application/3gpphal+json":{"source":"iana","compressible":true},"application/3gpphalforms+json":{"source":"iana","compressible":true},"application/a2l":{"source":"iana"},"application/ace+cbor":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/activity+json":{"source":"iana","compressible":true},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/alto-updatestreamcontrol+json":{"source":"iana","compressible":true},"application/alto-updatestreamparams+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/at+jwt":{"source":"iana"},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","compressible":true,"extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana","compressible":true,"extensions":["atomdeleted"]},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","compressible":true,"extensions":["atomsvc"]},"application/atsc-dwd+xml":{"source":"iana","compressible":true,"extensions":["dwd"]},"application/atsc-dynamic-event-message":{"source":"iana"},"application/atsc-held+xml":{"source":"iana","compressible":true,"extensions":["held"]},"application/atsc-rdt+json":{"source":"iana","compressible":true},"application/atsc-rsat+xml":{"source":"iana","compressible":true,"extensions":["rsat"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana","compressible":true},"application/bacnet-xdd+zip":{"source":"iana","compressible":false},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana","compressible":true,"extensions":["xcs"]},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/captive+json":{"source":"iana","compressible":true},"application/cbor":{"source":"iana"},"application/cbor-seq":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana","compressible":true},"application/ccxml+xml":{"source":"iana","compressible":true,"extensions":["ccxml"]},"application/cdfx+xml":{"source":"iana","compressible":true,"extensions":["cdfx"]},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana","compressible":true},"application/cellml+xml":{"source":"iana","compressible":true},"application/cfw":{"source":"iana"},"application/city+json":{"source":"iana","compressible":true},"application/clr":{"source":"iana"},"application/clue+xml":{"source":"iana","compressible":true},"application/clue_info+xml":{"source":"iana","compressible":true},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana","compressible":true},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/conference-info+xml":{"source":"iana","compressible":true},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cpl+xml":{"source":"iana","compressible":true,"extensions":["cpl"]},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana","compressible":true},"application/cstadata+xml":{"source":"iana","compressible":true},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cwt":{"source":"iana"},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","compressible":true,"extensions":["mpd"]},"application/dash-patch+xml":{"source":"iana","compressible":true,"extensions":["mpp"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","compressible":true,"extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana","compressible":true},"application/dicom":{"source":"iana"},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana","compressible":true},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/dns+json":{"source":"iana","compressible":true},"application/dns-message":{"source":"iana"},"application/docbook+xml":{"source":"apache","compressible":true,"extensions":["dbk"]},"application/dots+cbor":{"source":"iana"},"application/dskpp+xml":{"source":"iana","compressible":true},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","compressible":true,"extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/ecmascript":{"source":"iana","compressible":true,"extensions":["es","ecma"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/elm+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/elm+xml":{"source":"iana","compressible":true},"application/emergencycalldata.cap+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/emergencycalldata.comment+xml":{"source":"iana","compressible":true},"application/emergencycalldata.control+xml":{"source":"iana","compressible":true},"application/emergencycalldata.deviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.providerinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.serviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.veds+xml":{"source":"iana","compressible":true},"application/emma+xml":{"source":"iana","compressible":true,"extensions":["emma"]},"application/emotionml+xml":{"source":"iana","compressible":true,"extensions":["emotionml"]},"application/encaprtp":{"source":"iana"},"application/epp+xml":{"source":"iana","compressible":true},"application/epub+zip":{"source":"iana","compressible":false,"extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/expect-ct-report+json":{"source":"iana","compressible":true},"application/express":{"source":"iana","extensions":["exp"]},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdt+xml":{"source":"iana","compressible":true,"extensions":["fdt"]},"application/fhir+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/fhir+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/flexfec":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false},"application/framework-attributes+xml":{"source":"iana","compressible":true},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geopackage+sqlite3":{"source":"iana"},"application/geoxacml+xml":{"source":"iana","compressible":true},"application/gltf-buffer":{"source":"iana"},"application/gml+xml":{"source":"iana","compressible":true,"extensions":["gml"]},"application/gpx+xml":{"source":"apache","compressible":true,"extensions":["gpx"]},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana","compressible":true},"application/hjson":{"extensions":["hjson"]},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana","compressible":true},"application/ibe-pkg-reply+xml":{"source":"iana","compressible":true},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","compressible":true,"extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana","compressible":true,"extensions":["its"]},"application/java-archive":{"source":"apache","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/jscalendar+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana","compressible":true},"application/kpml-response+xml":{"source":"iana","compressible":true},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana","compressible":true,"extensions":["lgr"]},"application/link-format":{"source":"iana"},"application/load-control+xml":{"source":"iana","compressible":true},"application/lost+xml":{"source":"iana","compressible":true,"extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana","compressible":true},"application/lpf+zip":{"source":"iana","compressible":false},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","compressible":true,"extensions":["mads"]},"application/manifest+json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","compressible":true,"extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","compressible":true,"extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana","compressible":true},"application/mathml-presentation+xml":{"source":"iana","compressible":true},"application/mbms-associated-procedure-description+xml":{"source":"iana","compressible":true},"application/mbms-deregister+xml":{"source":"iana","compressible":true},"application/mbms-envelope+xml":{"source":"iana","compressible":true},"application/mbms-msk+xml":{"source":"iana","compressible":true},"application/mbms-msk-response+xml":{"source":"iana","compressible":true},"application/mbms-protection-description+xml":{"source":"iana","compressible":true},"application/mbms-reception-report+xml":{"source":"iana","compressible":true},"application/mbms-register+xml":{"source":"iana","compressible":true},"application/mbms-register-response+xml":{"source":"iana","compressible":true},"application/mbms-schedule+xml":{"source":"iana","compressible":true},"application/mbms-user-service-description+xml":{"source":"iana","compressible":true},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana","compressible":true,"extensions":["mpf"]},"application/media_control+xml":{"source":"iana","compressible":true},"application/mediaservercontrol+xml":{"source":"iana","compressible":true,"extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","compressible":true,"extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","compressible":true,"extensions":["meta4"]},"application/mets+xml":{"source":"iana","compressible":true,"extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mipc":{"source":"iana"},"application/missing-blocks+cbor-seq":{"source":"iana"},"application/mmt-aei+xml":{"source":"iana","compressible":true,"extensions":["maei"]},"application/mmt-usd+xml":{"source":"iana","compressible":true,"extensions":["musd"]},"application/mods+xml":{"source":"iana","compressible":true,"extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana","compressible":true},"application/mrb-publish+xml":{"source":"iana","compressible":true},"application/msc-ivr+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msc-mixer+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/multipart-core":{"source":"iana"},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana","extensions":["nq"]},"application/n-triples":{"source":"iana","extensions":["nt"]},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana","charset":"US-ASCII"},"application/news-groupinfo":{"source":"iana","charset":"US-ASCII"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana","compressible":true},"application/node":{"source":"iana","extensions":["cjs"]},"application/nss":{"source":"iana"},"application/oauth-authz-req+jwt":{"source":"iana"},"application/oblivious-dns-message":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":false,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odm+xml":{"source":"iana","compressible":true},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","compressible":true,"extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/omdoc+xml":{"source":"apache","compressible":true,"extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg"]},"application/opc-nodeset+xml":{"source":"iana","compressible":true},"application/oscore":{"source":"iana"},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p21":{"source":"iana"},"application/p21+zip":{"source":"iana","compressible":false},"application/p2p-overlay+xml":{"source":"iana","compressible":true,"extensions":["relo"]},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pem-certificate-chain":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana","extensions":["asc"]},"application/pgp-signature":{"source":"iana","extensions":["asc","sig"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pidf-diff+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkcs8-encrypted":{"source":"iana"},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","compressible":true,"extensions":["pls"]},"application/poc-settings+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana","compressible":true},"application/provenance+xml":{"source":"iana","compressible":true,"extensions":["provx"]},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.cyn":{"source":"iana","charset":"7-BIT"},"application/prs.hpub+zip":{"source":"iana","compressible":false},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana","compressible":true},"application/pskc+xml":{"source":"iana","compressible":true,"extensions":["pskcxml"]},"application/pvd+json":{"source":"iana","compressible":true},"application/qsig":{"source":"iana"},"application/raml+yaml":{"compressible":true,"extensions":["raml"]},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf","owl"]},"application/reginfo+xml":{"source":"iana","compressible":true,"extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"iana"},"application/reputon+json":{"source":"iana","compressible":true},"application/resource-lists+xml":{"source":"iana","compressible":true,"extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","compressible":true,"extensions":["rld"]},"application/rfc+xml":{"source":"iana","compressible":true},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana","compressible":true},"application/rls-services+xml":{"source":"iana","compressible":true,"extensions":["rs"]},"application/route-apd+xml":{"source":"iana","compressible":true,"extensions":["rapd"]},"application/route-s-tsid+xml":{"source":"iana","compressible":true,"extensions":["sls"]},"application/route-usd+xml":{"source":"iana","compressible":true,"extensions":["rusd"]},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","compressible":true,"extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana","compressible":true},"application/samlmetadata+xml":{"source":"iana","compressible":true},"application/sarif+json":{"source":"iana","compressible":true},"application/sarif-external-properties+json":{"source":"iana","compressible":true},"application/sbe":{"source":"iana"},"application/sbml+xml":{"source":"iana","compressible":true,"extensions":["sbml"]},"application/scaip+xml":{"source":"iana","compressible":true},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/secevent+jwt":{"source":"iana"},"application/senml+cbor":{"source":"iana"},"application/senml+json":{"source":"iana","compressible":true},"application/senml+xml":{"source":"iana","compressible":true,"extensions":["senmlx"]},"application/senml-etch+cbor":{"source":"iana"},"application/senml-etch+json":{"source":"iana","compressible":true},"application/senml-exi":{"source":"iana"},"application/sensml+cbor":{"source":"iana"},"application/sensml+json":{"source":"iana","compressible":true},"application/sensml+xml":{"source":"iana","compressible":true,"extensions":["sensmlx"]},"application/sensml-exi":{"source":"iana"},"application/sep+xml":{"source":"iana","compressible":true},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","compressible":true,"extensions":["shf"]},"application/sieve":{"source":"iana","extensions":["siv","sieve"]},"application/simple-filter+xml":{"source":"iana","compressible":true},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/sipc":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"iana"},"application/smil+xml":{"source":"iana","compressible":true,"extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","compressible":true,"extensions":["srx"]},"application/spdx+json":{"source":"iana","compressible":true},"application/spirits-event+xml":{"source":"iana","compressible":true},"application/sql":{"source":"iana"},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","compressible":true,"extensions":["grxml"]},"application/sru+xml":{"source":"iana","compressible":true,"extensions":["sru"]},"application/ssdl+xml":{"source":"apache","compressible":true,"extensions":["ssdl"]},"application/ssml+xml":{"source":"iana","compressible":true,"extensions":["ssml"]},"application/stix+json":{"source":"iana","compressible":true},"application/swid+xml":{"source":"iana","compressible":true,"extensions":["swidtag"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/taxii+json":{"source":"iana","compressible":true},"application/td+json":{"source":"iana","compressible":true},"application/tei+xml":{"source":"iana","compressible":true,"extensions":["tei","teicorpus"]},"application/tetra_isi":{"source":"iana"},"application/thraud+xml":{"source":"iana","compressible":true,"extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/tlsrpt+gzip":{"source":"iana"},"application/tlsrpt+json":{"source":"iana","compressible":true},"application/tnauthlist":{"source":"iana"},"application/token-introspection+jwt":{"source":"iana"},"application/toml":{"compressible":true,"extensions":["toml"]},"application/trickle-ice-sdpfrag":{"source":"iana"},"application/trig":{"source":"iana","extensions":["trig"]},"application/ttml+xml":{"source":"iana","compressible":true,"extensions":["ttml"]},"application/tve-trigger":{"source":"iana"},"application/tzif":{"source":"iana"},"application/tzif-leap":{"source":"iana"},"application/ubjson":{"compressible":false,"extensions":["ubj"]},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana","compressible":true},"application/urc-ressheet+xml":{"source":"iana","compressible":true,"extensions":["rsheet"]},"application/urc-targetdesc+xml":{"source":"iana","compressible":true,"extensions":["td"]},"application/urc-uisocketdesc+xml":{"source":"iana","compressible":true},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana","compressible":true},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana","compressible":true,"extensions":["1km"]},"application/vnd.3gpp-prose+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-v2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.5gnas":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.bsf+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gmop+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gtpc":{"source":"iana"},"application/vnd.3gpp.interworking-data":{"source":"iana"},"application/vnd.3gpp.lpp":{"source":"iana"},"application/vnd.3gpp.mc-signalling-ear":{"source":"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-payload":{"source":"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-signalling":{"source":"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-floor-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-signed+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-init-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-transmission-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mid-call+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ngap":{"source":"iana"},"application/vnd.3gpp.pfcp":{"source":"iana"},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.s1ap":{"source":"iana"},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ussd+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","compressible":false,"extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","compressible":true,"extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"iana","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.afpc.afplinedata":{"source":"iana"},"application/vnd.afpc.afplinedata-pagedef":{"source":"iana"},"application/vnd.afpc.cmoca-cmresource":{"source":"iana"},"application/vnd.afpc.foca-charset":{"source":"iana"},"application/vnd.afpc.foca-codedfont":{"source":"iana"},"application/vnd.afpc.foca-codepage":{"source":"iana"},"application/vnd.afpc.modca":{"source":"iana"},"application/vnd.afpc.modca-cmtable":{"source":"iana"},"application/vnd.afpc.modca-formdef":{"source":"iana"},"application/vnd.afpc.modca-mediummap":{"source":"iana"},"application/vnd.afpc.modca-objectcontainer":{"source":"iana"},"application/vnd.afpc.modca-overlay":{"source":"iana"},"application/vnd.afpc.modca-pagesegment":{"source":"iana"},"application/vnd.age":{"source":"iana","extensions":["age"]},"application/vnd.ah-barcode":{"source":"iana"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amadeus+json":{"source":"iana","compressible":true},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana","compressible":true},"application/vnd.android.ota":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.arrow.file":{"source":"iana"},"application/vnd.apache.arrow.stream":{"source":"iana"},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.aplextor.warrp+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","compressible":true,"extensions":["mpkg"]},"application/vnd.apple.keynote":{"source":"iana","extensions":["key"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.numbers":{"source":"iana","extensions":["numbers"]},"application/vnd.apple.pages":{"source":"iana","extensions":["pages"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"iana"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artisan+json":{"source":"iana","compressible":true},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avalon+json":{"source":"iana","compressible":true},"application/vnd.avistar+xml":{"source":"iana","compressible":true},"application/vnd.balsamiq.bmml+xml":{"source":"iana","compressible":true,"extensions":["bmml"]},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.banana-accounting":{"source":"iana"},"application/vnd.bbf.usp.error":{"source":"iana"},"application/vnd.bbf.usp.msg":{"source":"iana"},"application/vnd.bbf.usp.msg+json":{"source":"iana","compressible":true},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana","compressible":true},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.bpf":{"source":"iana"},"application/vnd.bpf3":{"source":"iana"},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.byu.uapi+json":{"source":"iana","compressible":true},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","compressible":true,"extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.ciedi":{"source":"iana"},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana","compressible":true,"extensions":["csl"]},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collabio.xodocuments.document":{"source":"iana"},"application/vnd.collabio.xodocuments.document-template":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation-template":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana","compressible":false},"application/vnd.comicbook-rar":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","compressible":true,"extensions":["wbs"]},"application/vnd.cryptii.pipe+json":{"source":"iana","compressible":true},"application/vnd.crypto-shade-file":{"source":"iana"},"application/vnd.cryptomator.encrypted":{"source":"iana"},"application/vnd.cryptomator.vault":{"source":"iana"},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana","compressible":true},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana","compressible":true},"application/vnd.cybank":{"source":"iana"},"application/vnd.cyclonedx+json":{"source":"iana","compressible":true},"application/vnd.cyclonedx+xml":{"source":"iana","compressible":true},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana","compressible":false},"application/vnd.d3m-dataset":{"source":"iana"},"application/vnd.d3m-problem":{"source":"iana"},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.dbf":{"source":"iana","extensions":["dbf"]},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","compressible":true,"extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume.movie":{"source":"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana","compressible":true},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbisl+xml":{"source":"iana","compressible":true},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-container+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-generic+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-init+xml":{"source":"iana","compressible":true},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecip.rlp":{"source":"iana"},"application/vnd.eclipse.ditto+json":{"source":"iana","compressible":true},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.emclient.accessrequest+xml":{"source":"iana","compressible":true},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana","compressible":true},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana","compressible":false},"application/vnd.eszigno3+xml":{"source":"iana","compressible":true,"extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.asic-e+zip":{"source":"iana","compressible":false},"application/vnd.etsi.asic-s+zip":{"source":"iana","compressible":false},"application/vnd.etsi.cug+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvcommand+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvservice+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsync+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mcid+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana","compressible":true},"application/vnd.etsi.pstn+xml":{"source":"iana","compressible":true},"application/vnd.etsi.sci+xml":{"source":"iana","compressible":true},"application/vnd.etsi.simservs+xml":{"source":"iana","compressible":true},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana","compressible":true},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eu.kasparian.car+json":{"source":"iana","compressible":true},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.exstream-empower+zip":{"source":"iana","compressible":false},"application/vnd.exstream-package":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.familysearch.gedcom+zip":{"source":"iana","compressible":false},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"iana","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.ffsns":{"source":"iana"},"application/vnd.ficlab.flb+zip":{"source":"iana","compressible":false},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{"source":"iana","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"iana","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujifilm.fb.docuworks":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.container":{"source":"iana"},"application/vnd.fujifilm.fb.jfi+xml":{"source":"iana","compressible":true},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.futoin+cbor":{"source":"iana"},"application/vnd.futoin+json":{"source":"iana","compressible":true},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.gentics.grd+json":{"source":"iana","compressible":true},"application/vnd.geo+json":{"source":"iana","compressible":true},"application/vnd.geocube+xml":{"source":"iana","compressible":true},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.slides":{"source":"iana"},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"iana","compressible":true},"application/vnd.gov.sk.e-form+zip":{"source":"iana","compressible":false},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana","compressible":true},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","compressible":true,"extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","compressible":true,"extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hl7cda+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.hl7v2+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper+json":{"source":"iana","compressible":true},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"iana"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"iana","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana","compressible":false},"application/vnd.imagemeter.image+zip":{"source":"iana","compressible":false},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana","compressible":true},"application/vnd.informix-visionary":{"source":"iana"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana","compressible":true},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana","compressible":true},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","compressible":true,"extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.iso11783-10+zip":{"source":"iana","compressible":false},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las":{"source":"iana"},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","compressible":true,"extensions":["lasxml"]},"application/vnd.laszip":{"source":"iana"},"application/vnd.leap+json":{"source":"iana","compressible":true},"application/vnd.liberty-request+xml":{"source":"iana","compressible":true},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","compressible":true,"extensions":["lbe"]},"application/vnd.logipipe.circuit+zip":{"source":"iana","compressible":false},"application/vnd.loom":{"source":"iana"},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana","extensions":["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.license+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxar.archive.3tz+zip":{"source":"iana","compressible":false},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana","compressible":true},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana","compressible":true},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana","compressible":true},"application/vnd.ms-printing.printticket+xml":{"source":"apache","compressible":true},"application/vnd.ms-printschematicket+xml":{"source":"iana","compressible":true},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.nacamar.ybrid+json":{"source":"iana","compressible":true},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nebumind.line":{"source":"iana"},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nimn":{"source":"iana"},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana","compressible":true},"application/vnd.nokia.iptv.config+xml":{"source":"iana","compressible":true},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana","compressible":true},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana","compressible":true},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana","compressible":true,"extensions":["ac"]},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"iana","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana","compressible":true},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"iana","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oci.image.manifest.v1+json":{"source":"iana","compressible":true},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana","compressible":true},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana","compressible":true},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana","compressible":true},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana","compressible":true},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.oipf.spdlist+xml":{"source":"iana","compressible":true},"application/vnd.oipf.ueprofile+xml":{"source":"iana","compressible":true},"application/vnd.oipf.userprofile+xml":{"source":"iana","compressible":true},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.imd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sprov+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-pcc+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana","compressible":true},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","compressible":true,"extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana","compressible":true},"application/vnd.oma.group-usage-list+xml":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+cbor":{"source":"iana"},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.final-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.groups+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana","compressible":true},"application/vnd.oma.xcap-directory+xml":{"source":"iana","compressible":true},"application/vnd.omads-email+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-file+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-folder+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana","compressible":true,"extensions":["obgx"]},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana","compressible":true,"extensions":["osm"]},"application/vnd.opentimestamps.ots":{"source":"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"iana","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"iana","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"iana","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana","compressible":true},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana","compressible":true},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos.xml":{"source":"iana"},"application/vnd.patentdive":{"source":"iana"},"application/vnd.patientecommsdoc":{"source":"iana"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana","compressible":true},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.psfs":{"source":"iana"},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana","compressible":true},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana","compressible":true},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana","extensions":["rar"]},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","compressible":true,"extensions":["musicxml"]},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.resilient.logic":{"source":"iana"},"application/vnd.restful+json":{"source":"iana","compressible":true},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","compressible":true,"extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sar":{"source":"iana"},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.seis+json":{"source":"iana","compressible":true},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shade-save-file":{"source":"iana"},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.shootproof+json":{"source":"iana","compressible":true},"application/vnd.shopkick+json":{"source":"iana","compressible":true},"application/vnd.shp":{"source":"iana"},"application/vnd.shx":{"source":"iana"},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.snesdev-page-table":{"source":"iana"},"application/vnd.software602.filler.form+xml":{"source":"iana","compressible":true,"extensions":["fo"]},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","compressible":true,"extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sqlite3":{"source":"iana"},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.sycle+xml":{"source":"iana","compressible":true},"application/vnd.syft+json":{"source":"iana","compressible":true},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","charset":"UTF-8","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{"source":"iana","compressible":true},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana","compressible":true},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","compressible":true,"extensions":["uoml"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.veritone.aion+json":{"source":"iana","compressible":true},"application/vnd.veryant.thin":{"source":"iana"},"application/vnd.ves.encrypted":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","charset":"UTF-8","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.dpp":{"source":"iana"},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana","compressible":true},"application/vnd.wv.ssp+xml":{"source":"iana","compressible":true},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana","compressible":true},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","compressible":true,"extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.youtube.yt":{"source":"iana"},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","compressible":true,"extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","compressible":true,"extensions":["vxml"]},"application/voucher-cms+json":{"source":"iana","compressible":true},"application/vq-rtcpxr":{"source":"iana"},"application/wasm":{"source":"iana","compressible":true,"extensions":["wasm"]},"application/watcherinfo+xml":{"source":"iana","compressible":true,"extensions":["wif"]},"application/webpush-options+json":{"source":"iana","compressible":true},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","compressible":true,"extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","compressible":true,"extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","compressible":true,"extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","compressible":true,"extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","compressible":true,"extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-iwork-keynote-sffkey":{"extensions":["key"]},"application/x-iwork-numbers-sffnumbers":{"extensions":["numbers"]},"application/x-iwork-pages-sffpages":{"extensions":["pages"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-keepass2":{"extensions":["kdbx"]},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-pki-message":{"source":"iana"},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"iana","extensions":["der","crt","pem"]},"application/x-x509-ca-ra-cert":{"source":"iana"},"application/x-x509-next-ca-cert":{"source":"iana"},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","compressible":true,"extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana","compressible":true},"application/xaml+xml":{"source":"apache","compressible":true,"extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana","compressible":true,"extensions":["xav"]},"application/xcap-caps+xml":{"source":"iana","compressible":true,"extensions":["xca"]},"application/xcap-diff+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana","compressible":true,"extensions":["xel"]},"application/xcap-error+xml":{"source":"iana","compressible":true},"application/xcap-ns+xml":{"source":"iana","compressible":true,"extensions":["xns"]},"application/xcon-conference-info+xml":{"source":"iana","compressible":true},"application/xcon-conference-info-diff+xml":{"source":"iana","compressible":true},"application/xenc+xml":{"source":"iana","compressible":true,"extensions":["xenc"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache","compressible":true},"application/xliff+xml":{"source":"iana","compressible":true,"extensions":["xlf"]},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana","compressible":true},"application/xmpp+xml":{"source":"iana","compressible":true},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","compressible":true,"extensions":["xpl"]},"application/xslt+xml":{"source":"iana","compressible":true,"extensions":["xsl","xslt"]},"application/xspf+xml":{"source":"apache","compressible":true,"extensions":["xspf"]},"application/xv+xml":{"source":"iana","compressible":true,"extensions":["mxml","xhvml","xvml","xvm"]},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana","compressible":true},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana","compressible":true},"application/yin+xml":{"source":"iana","compressible":true,"extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zlib":{"source":"iana"},"application/zstd":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/aac":{"source":"iana"},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana","extensions":["amr"]},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/flexfec":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/mhas":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/mobile-xmf":{"source":"iana","extensions":["mxmf"]},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx","opus"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/scip":{"source":"iana"},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sofa":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tetra_acelp":{"source":"iana"},"audio/tetra_acelp_bb":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/tsvcis":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/usac":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dts.uhd":{"source":"iana"},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"iana"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/collection":{"source":"iana","extensions":["ttc"]},"font/otf":{"source":"iana","compressible":true,"extensions":["otf"]},"font/sfnt":{"source":"iana"},"font/ttf":{"source":"iana","compressible":true,"extensions":["ttf"]},"font/woff":{"source":"iana","extensions":["woff"]},"font/woff2":{"source":"iana","extensions":["woff2"]},"image/aces":{"source":"iana","extensions":["exr"]},"image/apng":{"compressible":false,"extensions":["apng"]},"image/avci":{"source":"iana","extensions":["avci"]},"image/avcs":{"source":"iana","extensions":["avcs"]},"image/avif":{"source":"iana","compressible":false,"extensions":["avif"]},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana","extensions":["drle"]},"image/emf":{"source":"iana","extensions":["emf"]},"image/fits":{"source":"iana","extensions":["fits"]},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/heic":{"source":"iana","extensions":["heic"]},"image/heic-sequence":{"source":"iana","extensions":["heics"]},"image/heif":{"source":"iana","extensions":["heif"]},"image/heif-sequence":{"source":"iana","extensions":["heifs"]},"image/hej2k":{"source":"iana","extensions":["hej2"]},"image/hsj2":{"source":"iana","extensions":["hsj2"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/jls":{"source":"iana","extensions":["jls"]},"image/jp2":{"source":"iana","compressible":false,"extensions":["jp2","jpg2"]},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpeg","jpg","jpe"]},"image/jph":{"source":"iana","extensions":["jph"]},"image/jphc":{"source":"iana","extensions":["jhc"]},"image/jpm":{"source":"iana","compressible":false,"extensions":["jpm"]},"image/jpx":{"source":"iana","compressible":false,"extensions":["jpx","jpf"]},"image/jxr":{"source":"iana","extensions":["jxr"]},"image/jxra":{"source":"iana","extensions":["jxra"]},"image/jxrs":{"source":"iana","extensions":["jxrs"]},"image/jxs":{"source":"iana","extensions":["jxs"]},"image/jxsc":{"source":"iana","extensions":["jxsc"]},"image/jxsi":{"source":"iana","extensions":["jxsi"]},"image/jxss":{"source":"iana","extensions":["jxss"]},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/ktx2":{"source":"iana","extensions":["ktx2"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif"]},"image/prs.pti":{"source":"iana","extensions":["pti"]},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana","extensions":["t38"]},"image/tiff":{"source":"iana","compressible":false,"extensions":["tif","tiff"]},"image/tiff-fx":{"source":"iana","extensions":["tfx"]},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana","extensions":["azv"]},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana","compressible":true,"extensions":["ico"]},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-dds":{"compressible":true,"extensions":["dds"]},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.pco.b16":{"source":"iana","extensions":["b16"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana","extensions":["tap"]},"image/vnd.valve.source.texture":{"source":"iana","extensions":["vtf"]},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana","extensions":["pcx"]},"image/webp":{"source":"apache","extensions":["webp"]},"image/wmf":{"source":"iana","extensions":["wmf"]},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana","extensions":["disposition-notification"]},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana","extensions":["u8msg"]},"message/global-delivery-status":{"source":"iana","extensions":["u8dsn"]},"message/global-disposition-notification":{"source":"iana","extensions":["u8mdn"]},"message/global-headers":{"source":"iana","extensions":["u8hdr"]},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/news":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime"]},"message/s-http":{"source":"iana"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"iana"},"message/vnd.wfa.wsc":{"source":"iana","extensions":["wsc"]},"model/3mf":{"source":"iana","extensions":["3mf"]},"model/e57":{"source":"iana"},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"source":"iana","compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/mtl":{"source":"iana","extensions":["mtl"]},"model/obj":{"source":"iana","extensions":["obj"]},"model/step":{"source":"iana"},"model/step+xml":{"source":"iana","compressible":true,"extensions":["stpx"]},"model/step+zip":{"source":"iana","compressible":false,"extensions":["stpz"]},"model/step-xml+zip":{"source":"iana","compressible":false,"extensions":["stpxz"]},"model/stl":{"source":"iana","extensions":["stl"]},"model/vnd.collada+xml":{"source":"iana","compressible":true,"extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana","compressible":true},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana","extensions":["ogex"]},"model/vnd.parasolid.transmit.binary":{"source":"iana","extensions":["x_b"]},"model/vnd.parasolid.transmit.text":{"source":"iana","extensions":["x_t"]},"model/vnd.pytha.pyox":{"source":"iana"},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.sap.vds":{"source":"iana","extensions":["vds"]},"model/vnd.usdz+zip":{"source":"iana","compressible":false,"extensions":["usdz"]},"model/vnd.valve.source.compiled-map":{"source":"iana","extensions":["bsp"]},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana","extensions":["x3db"]},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana","extensions":["x3dv"]},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana"},"multipart/multilingual":{"source":"iana"},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/cql":{"source":"iana"},"text/cql-expression":{"source":"iana"},"text/cql-identifier":{"source":"iana"},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"iana"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/fhirpath":{"source":"iana"},"text/flexfec":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/gff3":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","compressible":true},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"compressible":true,"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["markdown","md"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mdx":{"compressible":true,"extensions":["mdx"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana","charset":"UTF-8"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana","charset":"UTF-8"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/shaclc":{"source":"iana"},"text/shex":{"source":"iana","extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/spdx":{"source":"iana","extensions":["spdx"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","charset":"UTF-8","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana","charset":"UTF-8"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana","charset":"UTF-8"},"text/vnd.familysearch.gedcom":{"source":"iana","extensions":["ged"]},"text/vnd.ficlab.flt":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.gml":{"source":"iana"},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.hans":{"source":"iana"},"text/vnd.hgl":{"source":"iana"},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.senx.warpscript":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"iana"},"text/vnd.sosi":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","charset":"UTF-8","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana","charset":"UTF-8"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vtt":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"compressible":true,"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/av1":{"source":"iana"},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/ffv1":{"source":"iana"},"video/flexfec":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/iso.segment":{"source":"iana","extensions":["m4s"]},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/jxsv":{"source":"iana"},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/scip":{"source":"iana"},"video/smpte291":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vc2":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.mp4vr":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"iana"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vnd.youtube.yt":{"source":"iana"},"video/vp8":{"source":"iana"},"video/vp9":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}}')}};var __webpack_module_cache__={};function __nccwpck_require__(e){var t=__webpack_module_cache__[e];if(t!==undefined){return t.exports}var n=__webpack_module_cache__[e]={exports:{}};var s=true;try{__webpack_modules__[e].call(n.exports,n,n.exports,__nccwpck_require__);s=false}finally{if(s)delete __webpack_module_cache__[e]}return n.exports}if(typeof __nccwpck_require__!=="undefined")__nccwpck_require__.ab=__dirname+"/";var __webpack_exports__=__nccwpck_require__(4822);module.exports=__webpack_exports__})(); \ No newline at end of file diff --git a/.github/actions/invite-user/package-lock.json b/.github/actions/invite-user/package-lock.json deleted file mode 100644 index 3818ce69..00000000 --- a/.github/actions/invite-user/package-lock.json +++ /dev/null @@ -1,217 +0,0 @@ -{ - "name": "invite-user", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "invite-user", - "version": "1.0.0", - "dependencies": { - "@actions/core": "^1.10.0", - "@vercel/ncc": "^0.34.0", - "auth0": "^4.1.0", - "axios": "^1.6.0" - }, - "devDependencies": { - "typescript": "^5.2.2" - } - }, - "node_modules/@actions/core": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz", - "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==", - "dependencies": { - "@actions/http-client": "^2.0.1", - "uuid": "^8.3.2" - } - }, - "node_modules/@actions/http-client": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.0.tgz", - "integrity": "sha512-q+epW0trjVUUHboliPb4UF9g2msf+w61b32tAkFEwL/IwP0DQWgbCMM0Hbe3e3WXSKz5VcUXbzJQgy8Hkra/Lg==", - "dependencies": { - "tunnel": "^0.0.6", - "undici": "^5.25.4" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz", - "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==", - "engines": { - "node": ">=14" - } - }, - "node_modules/@vercel/ncc": { - "version": "0.34.0", - "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.34.0.tgz", - "integrity": "sha512-G9h5ZLBJ/V57Ou9vz5hI8pda/YQX5HQszCs3AmIus3XzsmRn/0Ptic5otD3xVST8QLKk7AMk7AqpsyQGN7MZ9A==", - "bin": { - "ncc": "dist/ncc/cli.js" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/auth0": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/auth0/-/auth0-4.1.0.tgz", - "integrity": "sha512-1CpjWPOuWPAhQZy46/T/jOViy1WXhytmdlZji693ZpBfugYw181+JXfKLzjea59oKmo4HFctD05cec7xGdysfQ==", - "dependencies": { - "jose": "^4.13.2", - "uuid": "^9.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/auth0/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/axios": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", - "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", - "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/jose": { - "version": "4.15.4", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.4.tgz", - "integrity": "sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ==", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici": { - "version": "5.27.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.27.0.tgz", - "integrity": "sha512-l3ydWhlhOJzMVOYkymLykcRRXqbUaQriERtR70B9LzNkZ4bX52Fc8wbTDneMiwo8T+AemZXvXaTx+9o5ROxrXg==", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - } - } -} diff --git a/.github/actions/invite-user/package.json b/.github/actions/invite-user/package.json deleted file mode 100644 index 6e9525e6..00000000 --- a/.github/actions/invite-user/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "invite-user", - "version": "1.0.0", - "description": "Invite a user to Shape Docs", - "main": "lib/index.js", - "author": "Shape", - "scripts": { - "build": "tsc && ncc build --minify", - "test": "jest" - }, - "dependencies": { - "@actions/core": "^1.10.0", - "@vercel/ncc": "^0.34.0", - "auth0": "^4.1.0", - "axios": "^1.6.0" - }, - "devDependencies": { - "typescript": "^5.2.2" - } -} diff --git a/.github/actions/invite-user/src/Action.ts b/.github/actions/invite-user/src/Action.ts deleted file mode 100644 index 8ff1604c..00000000 --- a/.github/actions/invite-user/src/Action.ts +++ /dev/null @@ -1,87 +0,0 @@ -import IStateStore from "./StateStore/IStateStore" -import ILogger from "./Logger/ILogger" -import IUserClient from "./UserClient/IUserClient" -import IPasswordGenerator from "./PasswordGenerator/IPasswordGenerator" -import IRoleNameParser from "./RoleNameParser/IRoleNameParser" - -export interface ActionOptions { - readonly name: string - readonly email: string - readonly roles: string -} - -export interface ActionConfig { - readonly stateStore: IStateStore - readonly logger: ILogger - readonly userClient: IUserClient - readonly passwordGenerator: IPasswordGenerator - readonly roleNameParser: IRoleNameParser -} - -export default class Action { - private readonly stateStore: IStateStore - private readonly logger: ILogger - private readonly userClient: IUserClient - private readonly passwordGenerator: IPasswordGenerator - private readonly roleNameParser: IRoleNameParser - - constructor(config: ActionConfig) { - this.stateStore = config.stateStore - this.logger = config.logger - this.userClient = config.userClient - this.passwordGenerator = config.passwordGenerator - this.roleNameParser = config.roleNameParser - } - - async run(options: ActionOptions) { - if (!this.stateStore.isPost) { - await this.runMain(options) - this.stateStore.isPost = true - } - } - - private async runMain(options: ActionOptions) { - if (!options.name || options.name.length == 0) { - throw new Error("No name supplied.") - } - if (!options.email || options.email.length == 0) { - throw new Error("No e-mail supplied.") - } - if (!options.roles || options.roles.length == 0) { - throw new Error("No roles supplied.") - } - const roleNames = this.roleNameParser.parse(options.roles) - if (roleNames.length == 0) { - throw new Error("No roles supplied.") - } - const existingUser = await this.userClient.getUser({ email: options.email }) - let user = existingUser - if (!existingUser) { - const password = this.passwordGenerator.generatePassword() - const newUser = await this.userClient.createUser({ - name: options.name, - email: options.email, - password: password - }) - user = newUser - } - if (!user) { - throw new Error("Could not get an existing user or create a new user.") - } - const roles = await this.userClient.createRoles({ roleNames }) - if (roles.length == 0) { - throw new Error("Received an empty set of roles.") - } - const roleIDs = roles.map(e => e.id) - await this.userClient.assignRolesToUser({ - userID: user.id, - roleIDs: roleIDs - }) - if (!existingUser) { - await this.userClient.sendChangePasswordEmail({ email: user.email }) - this.logger.log(`${options.name} (${user.email}) has been invited.`) - } else { - this.logger.log(`${options.name} (${user.email}) has been updated.`) - } - } -} diff --git a/.github/actions/invite-user/src/Logger/ILogger.ts b/.github/actions/invite-user/src/Logger/ILogger.ts deleted file mode 100644 index 5093d452..00000000 --- a/.github/actions/invite-user/src/Logger/ILogger.ts +++ /dev/null @@ -1,4 +0,0 @@ -export default interface ILogger { - log(message: string): void - error(message: string): void -} diff --git a/.github/actions/invite-user/src/Logger/Logger.ts b/.github/actions/invite-user/src/Logger/Logger.ts deleted file mode 100644 index e4ea571c..00000000 --- a/.github/actions/invite-user/src/Logger/Logger.ts +++ /dev/null @@ -1,12 +0,0 @@ -import * as core from "@actions/core" -import ILogger from "./ILogger" - -export default class Logger implements ILogger { - log(message: string) { - console.log(message) - } - - error(message: string) { - core.setFailed(message) - } -} diff --git a/.github/actions/invite-user/src/PasswordGenerator/IPasswordGenerator.ts b/.github/actions/invite-user/src/PasswordGenerator/IPasswordGenerator.ts deleted file mode 100644 index 5aa88129..00000000 --- a/.github/actions/invite-user/src/PasswordGenerator/IPasswordGenerator.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default interface IPasswordGenerator { - generatePassword(): string -} diff --git a/.github/actions/invite-user/src/PasswordGenerator/PasswordGenerator.ts b/.github/actions/invite-user/src/PasswordGenerator/PasswordGenerator.ts deleted file mode 100644 index 69ec2793..00000000 --- a/.github/actions/invite-user/src/PasswordGenerator/PasswordGenerator.ts +++ /dev/null @@ -1,14 +0,0 @@ -import IPasswordGenerator from "./IPasswordGenerator" - -export default class PasswordGenerator implements IPasswordGenerator { - generatePassword(): string { - let pass = "" - const str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@#$" - const length = 18 - for (let i = 1; i <= length; i++) { - const char = Math.floor(Math.random() * str.length + 1) - pass += str.charAt(char) - } - return pass - } -} diff --git a/.github/actions/invite-user/src/RoleNameParser/IRoleNameParser.ts b/.github/actions/invite-user/src/RoleNameParser/IRoleNameParser.ts deleted file mode 100644 index c235ecef..00000000 --- a/.github/actions/invite-user/src/RoleNameParser/IRoleNameParser.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default interface IRoleNameParser { - parse(roleNames: string): string[] -} diff --git a/.github/actions/invite-user/src/RoleNameParser/RoleNameParser.ts b/.github/actions/invite-user/src/RoleNameParser/RoleNameParser.ts deleted file mode 100644 index 94621838..00000000 --- a/.github/actions/invite-user/src/RoleNameParser/RoleNameParser.ts +++ /dev/null @@ -1,9 +0,0 @@ -import IRoleNameParser from "./IRoleNameParser" - -export default class RoleNameParser implements IRoleNameParser { - parse(roleNames: string): string[] { - return roleNames.split(",") - .map(e => e.trim().toLowerCase()) - .filter(e => e.length > 0) - } -} diff --git a/.github/actions/invite-user/src/StateStore/IStateStore.ts b/.github/actions/invite-user/src/StateStore/IStateStore.ts deleted file mode 100644 index 8dad4e68..00000000 --- a/.github/actions/invite-user/src/StateStore/IStateStore.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default interface IStateStore { - isPost: boolean -} diff --git a/.github/actions/invite-user/src/StateStore/KeyValueStateStore.ts b/.github/actions/invite-user/src/StateStore/KeyValueStateStore.ts deleted file mode 100644 index 1d883334..00000000 --- a/.github/actions/invite-user/src/StateStore/KeyValueStateStore.ts +++ /dev/null @@ -1,27 +0,0 @@ -import IStateStore from "./IStateStore" - -export interface KeyValueStateWriterReader { - getState(name: string): string | null - saveState(name: string, value: any | null): void -} - -const KEY = { - IS_POST: "isPost" -} - -export default class KeyValueStateStore implements IStateStore { - private writerReader: KeyValueStateWriterReader - - constructor(writerReader: KeyValueStateWriterReader) { - this.writerReader = writerReader - this.isPost = false - } - - get isPost(): boolean { - return !!this.writerReader.getState(KEY.IS_POST) - } - - set isPost(isPost: boolean) { - this.writerReader.saveState(KEY.IS_POST, isPost) - } -} diff --git a/.github/actions/invite-user/src/UserClient/Auth0UserClient.ts b/.github/actions/invite-user/src/UserClient/Auth0UserClient.ts deleted file mode 100644 index a81e01ce..00000000 --- a/.github/actions/invite-user/src/UserClient/Auth0UserClient.ts +++ /dev/null @@ -1,119 +0,0 @@ -import axios from "axios" -import { ManagementClient } from "auth0" -import IUserClient, { User, Role } from "./IUserClient" - -export interface Auth0UserClientConfig { - domain: string - clientId: string - clientSecret: string -} - -export default class Auth0UserClient implements IUserClient { - private readonly config: Auth0UserClientConfig - private readonly managementClient: ManagementClient - - constructor(config: Auth0UserClientConfig) { - this.config = config - this.managementClient = new ManagementClient({ - domain: config.domain, - clientId: config.clientId, - clientSecret: config.clientSecret - }) - } - - async getUser(request: { email: string }): Promise { - const response = await this.managementClient.usersByEmail.getByEmail({ - email: request.email - }) - if (response.data.length == 0) { - return null - } - const user = response.data[0] - return { - id: user.user_id, - email: user.email - } - } - - async createUser(request: { name: string, email: string, password: string }): Promise { - const response = await this.managementClient.users.create({ - connection: "Username-Password-Authentication", - name: request.name, - email: request.email, - email_verified: true, - password: request.password, - app_metadata: { - has_pending_invitation: true - } - }) - return { - id: response.data.user_id, - email: response.data.email - } - } - - async createRoles(request: { roleNames: string[] }): Promise { - const allRolesResponse = await this.managementClient.roles.getAll() - const allRoles = allRolesResponse.data - const existingRoles = allRoles.filter((role: Role) => { - return request.roleNames.includes(role.name) - }).map(role => { - return { id: role.id, name: role.name } - }) - const roleNamesToAdd = request.roleNames.filter(roleName => { - const existingRole = existingRoles.find(role => { - return role.name == roleName - }) - return existingRole == null - }) - const responses = await Promise.all(roleNamesToAdd.map(roleName => { - return this.managementClient.roles.create({ name: roleName }) - })) - const addedRoles = responses.map(response => { - return { - id: response.data.id, - name: response.data.name - } - }) - return existingRoles.concat(addedRoles) - } - - async assignRolesToUser(request: { userID: string, roleIDs: string[] }): Promise { - await this.managementClient.users.assignRoles({ - id: request.userID - }, { - roles: request.roleIDs - }) - } - - async sendChangePasswordEmail(request: { email: string }): Promise { - const token = await this.getToken() - await axios.post(this.getURL("/dbconnections/change_password"), { - email: request.email, - connection: "Username-Password-Authentication" - }, { - headers: { - "Authorization": `Bearer ${token}`, - "Content-Type": "application/json" - } - }) - } - - private async getToken(): Promise { - const response = await axios.post(this.getURL("/oauth/token"), { - "grant_type": "client_credentials", - "client_id": this.config.clientId, - "client_secret": this.config.clientSecret, - "audience": `https://${this.config.domain}/api/v2/` - }, { - headers: { - "Content-Type": "application/x-www-form-urlencoded" - } - }) - return response.data.access_token - } - - private getURL(path: string): string { - return `https://${this.config.domain}${path}` - } -} diff --git a/.github/actions/invite-user/src/UserClient/IUserClient.ts b/.github/actions/invite-user/src/UserClient/IUserClient.ts deleted file mode 100644 index 7e0b6613..00000000 --- a/.github/actions/invite-user/src/UserClient/IUserClient.ts +++ /dev/null @@ -1,17 +0,0 @@ -export type User = { - readonly id: string - readonly email: string -} - -export type Role = { - readonly id: string - readonly name: string -} - -export default interface IUserClient { - getUser(request: { email: string }): Promise - createUser(request: { name: string, email: string, password: string }): Promise - createRoles(request: { roleNames: string[] }): Promise - assignRolesToUser(request: { userID: string, roleIDs: string[] }): Promise - sendChangePasswordEmail(request: { email: string }): Promise -} diff --git a/.github/actions/invite-user/src/getOptions.ts b/.github/actions/invite-user/src/getOptions.ts deleted file mode 100644 index ae6dcd20..00000000 --- a/.github/actions/invite-user/src/getOptions.ts +++ /dev/null @@ -1,10 +0,0 @@ -import * as core from "@actions/core" -import { ActionOptions } from "./Action" - -export default function getOptions(): ActionOptions { - return { - name: core.getInput("name"), - email: core.getInput("email"), - roles: core.getInput("roles") - } -} diff --git a/.github/actions/invite-user/src/index.ts b/.github/actions/invite-user/src/index.ts deleted file mode 100644 index 71bd61b3..00000000 --- a/.github/actions/invite-user/src/index.ts +++ /dev/null @@ -1,42 +0,0 @@ -import * as core from "@actions/core" -import Action from "./Action" -import Auth0UserClient from "./UserClient/Auth0UserClient" -import getOptions from "./getOptions" -import Logger from "./Logger/Logger" -import KeyValueStateStore from "./StateStore/KeyValueStateStore" -import PasswordGenerator from "./PasswordGenerator/PasswordGenerator" -import RoleNameParser from "./RoleNameParser/RoleNameParser" - -const { - AUTH0_MANAGEMENT_CLIENT_ID, - AUTH0_MANAGEMENT_CLIENT_SECRET, - AUTH0_MANAGEMENT_CLIENT_DOMAIN -} = process.env - -if (!AUTH0_MANAGEMENT_CLIENT_ID || AUTH0_MANAGEMENT_CLIENT_ID.length == 0) { - throw new Error("AUTH0_MANAGEMENT_CLIENT_ID environment variable not set.") -} else if (!AUTH0_MANAGEMENT_CLIENT_SECRET || AUTH0_MANAGEMENT_CLIENT_SECRET.length == 0) { - throw new Error("AUTH0_MANAGEMENT_CLIENT_ID environment variable not set.") -} else if (!AUTH0_MANAGEMENT_CLIENT_DOMAIN || AUTH0_MANAGEMENT_CLIENT_DOMAIN.length == 0) { - throw new Error("AUTH0_MANAGEMENT_CLIENT_ID environment variable not set.") -} - -const stateStore = new KeyValueStateStore(core) -const logger = new Logger() -const userClient = new Auth0UserClient({ - clientId: AUTH0_MANAGEMENT_CLIENT_ID, - clientSecret: AUTH0_MANAGEMENT_CLIENT_SECRET, - domain: AUTH0_MANAGEMENT_CLIENT_DOMAIN -}) -const passwordGenerator = new PasswordGenerator() -const roleNameParser = new RoleNameParser() -const action = new Action({ - stateStore, - logger, - userClient, - passwordGenerator, - roleNameParser -}) -action.run(getOptions()).catch((err: Error) => { - logger.error(err.toString()) -}) diff --git a/.github/actions/invite-user/tsconfig.json b/.github/actions/invite-user/tsconfig.json deleted file mode 100644 index 816d6560..00000000 --- a/.github/actions/invite-user/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "target": "es6", - "module": "commonjs", - "lib": ["es6"], - "outDir": "./lib", - "rootDir": "./src", - "declaration": true, - "strict": true, - "noImplicitAny": false, - "esModuleInterop": true, - "skipLibCheck": true - }, - "exclude": ["__test__", "lib", "node_modules"] -} \ No newline at end of file diff --git a/.github/workflows/build-and-deploy-staging.yml b/.github/workflows/build-and-deploy-staging.yml index 0eea287c..6248cd3f 100644 --- a/.github/workflows/build-and-deploy-staging.yml +++ b/.github/workflows/build-and-deploy-staging.yml @@ -11,6 +11,16 @@ env: ECS_TASK_DEFINITION_NAME: StagingAppAppServiceTaskDef1613562E CONTAINER_NAME: web OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN_SHAPE_DOCS }} + # /start: needed for build to succeed + NEXT_TELEMETRY_DISABLED: 1 + NEXTAUTH_URL: http://dev.local:3000 + NEXTAUTH_SECRET: 336f7a926310cff425cea29556dce2a98859b8d234aa27968696c2e6f1cb7d34 + GITHUB_CLIENT_ID: this-is-our-github-client-id + GITHUB_CLIENT_SECRET: this-is-our-github-client-secret + GITHUB_APP_ID: 12345 + GITHUB_PRIVATE_KEY_BASE_64: LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KYjNCbGJuTnphQzFyWlhrdGRqRUFBQUFBQkc1dmJtVUFBQUFFYm05dVpRQUFBQUFBQUFBQkFBQUFNd0FBQUF0emMyZ3RaVwpReU5UVXhPUUFBQUNCS2NaL3UyL3dubDA4R1BjeXdiSVc2QVdKdnhVL2o0V0g2UnkxODVPSHZDd0FBQUpBYW01MzdHcHVkCit3QUFBQXR6YzJndFpXUXlOVFV4T1FBQUFDQktjWi91Mi93bmwwOEdQY3l3YklXNkFXSnZ4VS9qNFdINlJ5MTg1T0h2Q3cKQUFBRUJ6T2htRGpuY3R0QSt3ai9USHRnWnN6MklRWjdLM2ovb0Z1OEZBNTMxTDhrcHhuKzdiL0NlWFR3WTl6TEJzaGJvQgpZbS9GVCtQaFlmcEhMWHprNGU4TEFBQUFDMlp2YjBCb1lYQmxMbVJyQVFJPQotLS0tLUVORCBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0K + GITHUB_WEBHOOK_SECRET: super-duper-secret + # /end: needed for the build to succeed jobs: build: @@ -47,10 +57,6 @@ jobs: aws ecs describe-task-definition --task-definition ${{ env.ECS_TASK_DEFINITION_NAME }} --region ${{ env.AWS_REGION }} | jq .taskDefinition > task-definition.json jq . task-definition.json - - name: Create .env.local - run: | - cp .env.example .env.local - - name: Build, tag, and push image to Amazon ECR id: build-image env: diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 216f787f..6b0ef7c6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,19 +7,24 @@ concurrency: cancel-in-progress: true env: NEXT_TELEMETRY_DISABLED: 1 - AUTH0_SECRET: 336f7a926310cff425cea29556dce2a98859b8d234aa27968696c2e6f1cb7d34 - AUTH0_BASE_URL: http://dev.local:3000 - AUTH0_ISSUER_BASE_URL: https://shape-docs-dev.eu.auth0.com - AUTH0_CLIENT_ID: this-is-our-client-id - AUTH0_CLIENT_SECRET: this-is-our-client-secret - AUTH0_MANAGEMENT_DOMAIN: shape-docs-dev.eu.auth0.com - AUTH0_MANAGEMENT_CLIENT_ID: this-is-our-management-client-id - AUTH0_MANAGEMENT_CLIENT_SECRET: this-is-our-management-client-secret + SHAPE_DOCS_BASE_URL: http://localhost:3000 + SHAPE_DOCS_PROJECT_CONFIGURATION_FILENAME: .shape-docs.yml + NEXT_PUBLIC_SHAPE_DOCS_TITLE: Shape Docs + NEXT_PUBLIC_SHAPE_DOCS_DESCRIPTION: Documentation for Shape's APIs + NEXTAUTH_URL_INTERNAL: http://localhost:3000 + NEXTAUTH_SECRET: 336f7a926310cff425cea29556dce2a98859b8d234aa27968696c2e6f1cb7d34 + REDIS_URL: localhost + POSTGRESQL_HOST: localhost + POSTGRESQL_USER: dbuser + POSTGRESQL_DB: db + REPOSITORY_NAME_SUFFIX: -openapi + GITHUB_WEBHOOK_SECRET: this-is-our-webhook-secret + GITHUB_WEBHOK_REPOSITORY_ALLOWLIST: + GITHUB_WEBHOK_REPOSITORY_DISALLOWLIST: GITHUB_CLIENT_ID: this-is-our-github-client-id GITHUB_CLIENT_SECRET: this-is-our-github-client-secret - GITHUB_APP_ID: 12345 + GITHUB_APP_ID: 123456 GITHUB_PRIVATE_KEY_BASE_64: LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KYjNCbGJuTnphQzFyWlhrdGRqRUFBQUFBQkc1dmJtVUFBQUFFYm05dVpRQUFBQUFBQUFBQkFBQUFNd0FBQUF0emMyZ3RaVwpReU5UVXhPUUFBQUNCS2NaL3UyL3dubDA4R1BjeXdiSVc2QVdKdnhVL2o0V0g2UnkxODVPSHZDd0FBQUpBYW01MzdHcHVkCit3QUFBQXR6YzJndFpXUXlOVFV4T1FBQUFDQktjWi91Mi93bmwwOEdQY3l3YklXNkFXSnZ4VS9qNFdINlJ5MTg1T0h2Q3cKQUFBRUJ6T2htRGpuY3R0QSt3ai9USHRnWnN6MklRWjdLM2ovb0Z1OEZBNTMxTDhrcHhuKzdiL0NlWFR3WTl6TEJzaGJvQgpZbS9GVCtQaFlmcEhMWHprNGU4TEFBQUFDMlp2YjBCb1lYQmxMbVJyQVFJPQotLS0tLUVORCBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0K - GITHUB_WEBHOOK_SECRET: super-duper-secret jobs: build: name: Build diff --git a/.github/workflows/invite-guest.yml b/.github/workflows/invite-guest.yml deleted file mode 100644 index b1e4904b..00000000 --- a/.github/workflows/invite-guest.yml +++ /dev/null @@ -1,57 +0,0 @@ -name: Invite Guest -on: - workflow_dispatch: - inputs: - environment: - type: choice - description: Environment - options: - - production - - staging - required: true - name: - description: Name of user - required: true - email: - description: E-mail address to send invitation to - required: true - roles: - description: Comma-separated list of repositories user needs access to - required: true -env: - OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN_SHAPE_DOCS }} -jobs: - build: - name: Invite Guest - runs-on: ubuntu-latest - steps: - - name: Checkout Repository - uses: actions/checkout@v4 - - name: Install 1Password CLI - uses: 1password/install-cli-action@v1 - - name: Configure for Production - if: "${{ github.event.inputs.environment == 'production' }}" - run: | - echo "AUTH0_MANAGEMENT_CLIENT_ID_OP_KEY=op://Shape Docs GitHub Actions/Auth0 Management API Client ID/password" >> $GITHUB_ENV - echo "AUTH0_MANAGEMENT_CLIENT_SECRET_OP_KEY=op://Shape Docs GitHub Actions/Auth0 Management API Client Secret/password" >> $GITHUB_ENV - echo "AUTH0_MANAGEMENT_CLIENT_DOMAIN=shape-docs.eu.auth0.com" >> $GITHUB_ENV - - name: Configure for Staging - if: "${{ github.event.inputs.environment == 'staging' }}" - run: | - echo "AUTH0_MANAGEMENT_CLIENT_ID_OP_KEY=op://Shape Docs GitHub Actions/Auth0 Management API Client ID Staging/password" >> $GITHUB_ENV - echo "AUTH0_MANAGEMENT_CLIENT_SECRET_OP_KEY=op://Shape Docs GitHub Actions/Auth0 Management API Client Secret Staging/password" >> $GITHUB_ENV - echo "AUTH0_MANAGEMENT_CLIENT_DOMAIN=shape-docs-dev.eu.auth0.com" >> $GITHUB_ENV - - name: Install Secrets - run: | - AUTH0_MANAGEMENT_CLIENT_ID=$(op read "${AUTH0_MANAGEMENT_CLIENT_ID_OP_KEY}") - AUTH0_MANAGEMENT_CLIENT_SECRET=$(op read "${AUTH0_MANAGEMENT_CLIENT_SECRET_OP_KEY}") - echo "AUTH0_MANAGEMENT_CLIENT_ID=${AUTH0_MANAGEMENT_CLIENT_ID}" >> $GITHUB_ENV - echo "AUTH0_MANAGEMENT_CLIENT_SECRET=${AUTH0_MANAGEMENT_CLIENT_SECRET}" >> $GITHUB_ENV - echo "::add-mask::${AUTH0_MANAGEMENT_CLIENT_ID}" - echo "::add-mask::${AUTH0_MANAGEMENT_CLIENT_SECRET}" - - name: Send Invitation - uses: ./.github/actions/invite-user - with: - name: ${{ github.event.inputs.name }} - email: ${{ github.event.inputs.email }} - roles: ${{ github.event.inputs.roles }} diff --git a/Dockerfile b/Dockerfile index 3b14c7ea..f05ffa4b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,12 +25,15 @@ COPY . . # Next.js collects completely anonymous telemetry data about general usage. # Learn more here: https://nextjs.org/telemetry # Uncomment the following line in case you want to disable telemetry during the build. -# ENV NEXT_TELEMETRY_DISABLED 1 +ENV NEXT_TELEMETRY_DISABLED 1 + +# RUN yarn build -RUN yarn build +# Copy example env vars (needed for build process - picked up by Next) +COPY .env.example .env # If using npm comment out above and use below instead -# RUN npm run build +RUN npm run build # Production image, copy all the files and run next FROM base AS runner diff --git a/README.md b/README.md index be3c1c4f..694b6dc8 100644 --- a/README.md +++ b/README.md @@ -1,98 +1,70 @@ -

- -

+
+Shape Docs logo +
-# shape-docs +
+

👋 Welcome to Shape Docs

+

Self-hosted web portal that collects OpenAPI documentation and facilitates spec-driven development, built with GitHub-based authorization.

+
-Portal displaying our projects that are documented with OpenAPI. Hosted on [docs.shapetools.io](https://docs.shapetools.io) and [staging.docs.shapetools.io](https://staging.docs.shapetools.io). +
+ + + +
-[![Build](https://github.com/shapehq/shape-docs/actions/workflows/build.yml/badge.svg)](https://github.com/shapehq/shape-docs/actions/workflows/build.yml) -[![Test](https://github.com/shapehq/shape-docs/actions/workflows/test.yml/badge.svg)](https://github.com/shapehq/shape-docs/actions/workflows/test.yml) -[![Lint](https://github.com/shapehq/shape-docs/actions/workflows/lint.yml/badge.svg)](https://github.com/shapehq/shape-docs/actions/workflows/lint.yml) +--- -## 💻 Running the App Locally + -Create a file named `.env.local` in the root of the project with the following contents. Make sure to replace any placeholders and generate a random secret using OpenSSL. +
-``` -NEXT_PUBLIC_SHAPE_DOCS_TITLE='Shape Docs' -SHAPE_DOCS_BASE_URL='https://docs.shapetools.io' -AUTH0_SECRET='use [openssl rand -hex 32] to generate a 32 bytes value' -AUTH0_BASE_URL='http://dev.local:3000' -AUTH0_ISSUER_BASE_URL='https://shape-docs-dev.eu.auth0.com' -AUTH0_CLIENT_ID='Your client ID' -AUTH0_CLIENT_SECRET='Your client secret' -AUTH0_MANAGEMENT_DOMAIN='shape-docs-dev.eu.auth0.com' -AUTH0_MANAGEMENT_CLIENT_ID='Your client ID' -AUTH0_MANAGEMENT_CLIENT_SECRET='Your client secret' -GITHUB_CLIENT_ID='GitHub App client ID' -GITHUB_CLIENT_SECRET='GitHub App client secret' -GITHUB_APP_ID='the GitHub App id' -GITHUB_PRIVATE_KEY_BASE_64='base 64 encoded version of the private key' -GITHUB_WEBHOOK_SECRET='preshared secret also put in app conf in GitHub' -GITHUB_WEBHOK_REPOSITORY_ALLOWLIST='' -GITHUB_WEBHOK_REPOSITORY_DISALLOWLIST='' -GITHUB_ORGANIZATION_NAME='shapehq' -REDIS_URL='' -``` +Shape Docs makes managing and previewing OpenAPI documentation a breeze, streamlining spec-driven development. With GitHub-based authorization, you can easily control who accesses your docs. Shape Docs comments on pull requests that tweak your OpenAPI specs, giving you preview URLs to ensure every update is well-reviewed -Each environment variable is described in the table below. - -|Environment Variable|Description| -|-|-| -|NEXT_PUBLIC_SHAPE_DOCS_TITLE|Title of the portal. Displayed to the user in the browser.| -|SHAPE_DOCS_BASE_URL|The URL where Shape Docs is hosted.| -|AUTH0_SECRET|A long secret value used to encrypt the session cookie. Generate it using `openssl rand -hex 32`.|AUTH0_BASE_URL|The base URL of your Auth0 application. `http://dev.local:3000` during development.| -|AUTH0_ISSUER_BASE_URL|The URL of your Auth0 tenant domain.| -|AUTH0_CLIENT_ID|The client ID of your default Auth0 application.| -|AUTH0_CLIENT_SECRET|The client secret of your default Auth0 application.| -|AUTH0_MANAGEMENT_DOMAIN|The URL of your Auth0 tenant domain. It is key that this does not contain "http" or "https".| -|AUTH0_MANAGEMENT_CLIENT_ID|The client ID of your Auth0 Machine to Machine application.| -|AUTH0_MANAGEMENT_CLIENT_SECRET|The client secret of your Machine to Machine Auth0 application.| -|GITHUB_CLIENT_ID|The client ID of your GitHub app.| -|GITHUB_CLIENT_SECRET|The client secret of your GitHub app.| -|GITHUB_APP_ID|The ID of your GitHub app.| -|GITHUB_PRIVATE_KEY_BASE_64|Your GitHub app's private key encoded to base 64. Can be created using `cat my-key.pem | base64 | pbcopy`.| -|GITHUB_WEBHOOK_SECRET|Secret shared with the GitHub app to validate a webhook call.| -|GITHUB_WEBHOK_REPOSITORY_ALLOWLIST|Comma-separated list of repositories from which webhook calls should be accepted. Leave empty to accept calls from all repositories.| -|GITHUB_WEBHOK_REPOSITORY_DISALLOWLIST|Comma-separated list of repositories from which webhook calls should be ignored. The list of disallowed repositories takes precedence over the list of allowed repositories.| -|GITHUB_ORGANIZATION_NAME|Name of the organization to show repositories for.| -|REDIS_URL|The URL to the Redis store.| - -You need the following two Auth0 apps. - -| |Type|Description| -|-|-|-| -|Default|Generic|Used to authenticate the user when they log in.| -|Management|Machine to Machine|Used for making requests to [Auth0's Management API](https://auth0.com/docs/api/management/v2) to retrieve the access token for the identity provider that the user authorized with.| - -Modify your `/etc/hosts` file to add the following entry: +
+Screenshot of Shape Docs +
-``` -127.0.0.1 dev.local -``` +## 🚀 Getting Started -We visit our local website by opening https://dev.local:3000 instead of https://localhost:3000 as this ensures that Auth0's flow will work correctly. Auth0 does some extra checks when localhost is included in the URL and we are generally not interested in those as they give a false impression of the flow the user will see. +Please refer to the following articles in [the wiki](https://github.com/shapehq/shape-docs/wiki) to get started with Shape Docs. -Run the app using the following command: +- [Adding Documentation to Shape Docs](https://github.com/shapehq/shape-docs/wiki/Adding-Documentation-to-Shape-Docs) +- [Browsing Documentation](https://github.com/shapehq/shape-docs/wiki/Browsing-Documentation) +- [Updating Documentation](https://github.com/shapehq/shape-docs/wiki/Updating-Documentation) +- [Deploying Shape Docs](https://github.com/shapehq/shape-docs/wiki/Deploying-Shape-Docs) -``` -npm run dev -``` +## 👨‍🔧 How does it work? + +Shape Docs uses [OpenAPI specifications](https://swagger.io) from GitHub repositories. Users log in with their GitHub account to access documentation for projects they have access to. A repository only needs an OpenAPI spec to be recognized by Shape Docs, but customization is possible with a .shape-docs.yml file. Here's an example: -Finally, open the application on https://dev.local:3000. + -## 🚀 Deploying the App +Shape Docs supports spec-driven development by requiring OpenAPI specs in GitHub repos, ensuring version control and peer review. When a pull request is opened, Shape Docs comments with links to preview the documentation: -The app is hosted on Heroku in two different environments. + + +Learn more from the [Adding Documentation](https://github.com/shapehq/shape-docs/wiki/Adding-Documentation-to-Shape-Docs), [Browsing Documentation](https://github.com/shapehq/shape-docs/wiki/Browsing-Documentation), and [Updating Documentation](https://github.com/shapehq/shape-docs/wiki/Updating-Documentation) articles in the wiki. + +## 👩‍💻 How can I contribute? + +Pull requests with bugfixes and new features are much appreciated. We are happy to review PRs and merge them once they are ready, as long as they contain changes that fit within the vision of Shape Docs. + +Clone the repository and consult [the article on contributing](https://github.com/shapehq/shape-docs/wiki/Contributing) to get started working on the project. + +```bash +git clone git@github.com:shapehq/shape-docs.git +``` -|Environment|URL|Branch| -|-|-|-| -|Staging|[staging.docs.shapetools.io](https://staging.docs.shapetools.io)|develop| -|Production|[docs.shapetools.io](https://docs.shapetools.io)|main| +## ❤️ The Product of a Shape Weekend -Each environment is deployed by merging changes into their respective branch. Heroku is responsible for observing changes to the repository and schedule a deployment when changes are observed. +Every year we go on Shape Weekend, three days where all employees in Shape get together for a hackathon to build amazing products. In 2023, a team of Shape developers with a passion for documentation and spec-driven development built Shape Docs and we've used it daily ever since! -## 📖 Getting Started with Shape Docs +--- -Details on getting started showing documentation on Shape Docs can be [found on our Conflouence](https://shapedk.atlassian.net/wiki/spaces/DEVELOPERS/pages/3795615745/Shape+Docs). +Shape Docks is built with ❤️ by [Shape](https://shape.dk) in Denmark. Oh, and [we are hiring](https://careers.shape.dk) 🤗 diff --git a/__test__/auth/AccessTokenService.test.ts b/__test__/auth/AccessTokenService.test.ts deleted file mode 100644 index 9c0024c5..00000000 --- a/__test__/auth/AccessTokenService.test.ts +++ /dev/null @@ -1,121 +0,0 @@ -import { AccessTokenService } from "../../src/features/auth/domain" - -test("It reads the access token for a guest user", async () => { - let didReadAccessToken = false - const sut = new AccessTokenService({ - isGuestReader: { - async getIsGuest() { - return true - } - }, - guestAccessTokenService: { - async getAccessToken() { - didReadAccessToken = true - return "oldAccessToken" - }, - async refreshAccessToken() { - return "newAccessToken" - } - }, - hostAccessTokenService: { - async getAccessToken() { - return "oldAccessToken" - }, - async refreshAccessToken() { - return "newAccessToken" - } - } - }) - await sut.getAccessToken() - expect(didReadAccessToken).toBeTruthy() -}) - -test("It refreshes the access token for a guest user", async () => { - let didRefreshAccessToken = false - const sut = new AccessTokenService({ - isGuestReader: { - async getIsGuest() { - return true - } - }, - guestAccessTokenService: { - async getAccessToken() { - return "oldAccessToken" - }, - async refreshAccessToken() { - didRefreshAccessToken = true - return "newAccessToken" - } - }, - hostAccessTokenService: { - async getAccessToken() { - return "oldAccessToken" - }, - async refreshAccessToken() { - return "newAccessToken" - } - } - }) - await sut.refreshAccessToken("oldAccessToken") - expect(didRefreshAccessToken).toBeTruthy() -}) - -test("It reads the access token for a host user", async () => { - let didReadAccessToken = false - const sut = new AccessTokenService({ - isGuestReader: { - async getIsGuest() { - return false - } - }, - guestAccessTokenService: { - async getAccessToken() { - return "oldAccessToken" - }, - async refreshAccessToken() { - return "newAccessToken" - } - }, - hostAccessTokenService: { - async getAccessToken() { - didReadAccessToken = true - return "oldAccessToken" - }, - async refreshAccessToken() { - return "newAccessToken" - } - } - }) - await sut.getAccessToken() - expect(didReadAccessToken).toBeTruthy() -}) - -test("It refreshes the access token for a host user", async () => { - let didRefreshAccessToken = false - const sut = new AccessTokenService({ - isGuestReader: { - async getIsGuest() { - return false - } - }, - guestAccessTokenService: { - async getAccessToken() { - return "oldAccessToken" - }, - async refreshAccessToken() { - return "newAccessToken" - } - }, - hostAccessTokenService: { - async getAccessToken() { - return "oldAccessToken" - }, - async refreshAccessToken() { - didRefreshAccessToken = true - return "newAccessToken" - } - } - }) - await sut.refreshAccessToken("oldAccessToken") - expect(didRefreshAccessToken).toBeTruthy() -}) diff --git a/__test__/auth/AuthjsAccountsOAuthTokenRepository.test.ts b/__test__/auth/AuthjsAccountsOAuthTokenRepository.test.ts new file mode 100644 index 00000000..685c2c02 --- /dev/null +++ b/__test__/auth/AuthjsAccountsOAuthTokenRepository.test.ts @@ -0,0 +1,78 @@ +import { AuthjsAccountsOAuthTokenRepository } from "../../src/features/auth/domain" + +test("It gets token for user ID and provider", async () => { + let queryUserId: string | undefined + let queryProvider: string | undefined + const sut = new AuthjsAccountsOAuthTokenRepository({ + provider: "github", + db: { + async connect() { + return { + async query() { + return { rows: [] } + }, + async disconnect() {}, + } + }, + async query(_query, values: any[] = []) { + queryProvider = values[0] + queryUserId = values[1] + return { + rows: [{ + access_token: "foo", + refresh_token: "bar" + }] + } + } + } + }) + await sut.get("1234") + expect(queryUserId).toEqual("1234") + expect(queryProvider).toEqual("github") +}) + +test("It does not set token", async () => { + let didSetToken = false + const sut = new AuthjsAccountsOAuthTokenRepository({ + provider: "github", + db: { + async connect() { + return { + async query() { + return { rows: [] } + }, + async disconnect() {}, + } + }, + async query(_query, _values: any[] = []) { + didSetToken = true + return { rows: [] } + } + } + }) + await sut.set("1234", { accessToken: "foo", refreshToken: "bar" }) + expect(didSetToken).toBeFalsy() +}) + +test("It does not delete token", async () => { + let didDeleteToken = false + const sut = new AuthjsAccountsOAuthTokenRepository({ + provider: "github", + db: { + async connect() { + return { + async query() { + return { rows: [] } + }, + async disconnect() {}, + } + }, + async query(_query, _values: any[] = []) { + didDeleteToken = true + return { rows: [] } + } + } + }) + await sut.delete("1234") + expect(didDeleteToken).toBeFalsy() +}) diff --git a/__test__/auth/CachingRepositoryAccessReaderConfig.test.ts b/__test__/auth/CachingRepositoryAccessReaderConfig.test.ts deleted file mode 100644 index f4b4f2a1..00000000 --- a/__test__/auth/CachingRepositoryAccessReaderConfig.test.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { CachingRepositoryAccessReader } from "../../src/features/auth/domain" - -test("It fetches repository names for user if they are not cached", async () => { - let didFetchRepositoryNames = false - let requestedUserId: string | undefined - const sut = new CachingRepositoryAccessReader({ - repository: { - async get() { - return null - }, - async set() {}, - async setExpiring() {}, - async delete() {} - }, - repositoryAccessReader: { - async getRepositoryNames(userId: string) { - didFetchRepositoryNames = true - requestedUserId = userId - return [] - } - } - }) - await sut.getRepositoryNames("1234") - expect(didFetchRepositoryNames).toBeTruthy() - expect(requestedUserId).toEqual("1234") -}) - -test("It does not fetch repository names if they are cached", async () => { - let didFetchRepositoryNames = false - const sut = new CachingRepositoryAccessReader({ - repository: { - async get() { - return "[\"foo\"]" - }, - async set() {}, - async setExpiring() {}, - async delete() {} - }, - repositoryAccessReader: { - async getRepositoryNames() { - didFetchRepositoryNames = true - return [] - } - } - }) - await sut.getRepositoryNames("1234") - expect(didFetchRepositoryNames).toBeFalsy() -}) - -test("It caches fetched repository names for user", async () => { - let cachedUserId: string | undefined - let cachedRepositoryNames: string | undefined - const sut = new CachingRepositoryAccessReader({ - repository: { - async get() { - return null - }, - async set() {}, - async setExpiring(userId: string, value: string) { - cachedUserId = userId - cachedRepositoryNames = value - }, - async delete() {} - }, - repositoryAccessReader: { - async getRepositoryNames() { - return ["foo"] - } - } - }) - await sut.getRepositoryNames("1234") - expect(cachedUserId).toEqual("1234") - expect(cachedRepositoryNames).toEqual("[\"foo\"]") -}) - -test("It decodes cached repository names", async () => { - const sut = new CachingRepositoryAccessReader({ - repository: { - async get() { - return "[\"foo\",\"bar\"]" - }, - async set() {}, - async setExpiring() {}, - async delete() {} - }, - repositoryAccessReader: { - async getRepositoryNames() { - return [] - } - } - }) - const repositoryNames = await sut.getRepositoryNames("1234") - expect(repositoryNames).toEqual(["foo", "bar"]) -}) diff --git a/__test__/auth/CachingUserIdentityProviderReader.test.ts b/__test__/auth/CachingUserIdentityProviderReader.test.ts deleted file mode 100644 index 0075f9a3..00000000 --- a/__test__/auth/CachingUserIdentityProviderReader.test.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { CachingUserIdentityProviderReader } from "../../src/features/auth/domain" -import { UserIdentityProvider } from "../../src/features/auth/domain" - -test("It fetches user identity provider if it is not cached", async () => { - let didFetchUserIdentityProvider = false - const sut = new CachingUserIdentityProviderReader({ - async get() { - return null - }, - async set() {}, - async setExpiring() {}, - async delete() {} - }, { - async getUserIdentityProvider() { - didFetchUserIdentityProvider = true - return UserIdentityProvider.GITHUB - }, - }) - await sut.getUserIdentityProvider("foo") - expect(didFetchUserIdentityProvider).toBeTruthy() -}) - -test("It does not fetch user identity provider if it is cached", async () => { - let didFetchUserIdentityProvider = false - const sut = new CachingUserIdentityProviderReader({ - async get() { - return UserIdentityProvider.GITHUB - }, - async set() {}, - async setExpiring() {}, - async delete() {} - }, { - async getUserIdentityProvider() { - didFetchUserIdentityProvider = true - return UserIdentityProvider.GITHUB - }, - }) - await sut.getUserIdentityProvider("foo") - expect(didFetchUserIdentityProvider).toBeFalsy() -}) - -test("It caches fetched user identity provider for user", async () => { - let cachedUserId: string | undefined - let cachedUserIdentityProvider: string | undefined - const sut = new CachingUserIdentityProviderReader({ - async get() { - return null - }, - async set() {}, - async setExpiring(userId, userIdentityProvider) { - cachedUserId = userId - cachedUserIdentityProvider = userIdentityProvider - }, - async delete() {} - }, { - async getUserIdentityProvider() { - return UserIdentityProvider.USERNAME_PASSWORD - }, - }) - await sut.getUserIdentityProvider("1234") - expect(cachedUserId).toBe("1234") - expect(cachedUserIdentityProvider).toBe(UserIdentityProvider.USERNAME_PASSWORD.toString()) -}) diff --git a/__test__/auth/CompositeLogInHandler.test.ts b/__test__/auth/CompositeLogInHandler.test.ts deleted file mode 100644 index c342ffbb..00000000 --- a/__test__/auth/CompositeLogInHandler.test.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { CompositeLogInHandler } from "../../src/features/auth/domain" - -test("It invokes all log in handlers for user", async () => { - let userId1: string | undefined - let userId2: string | undefined - let userId3: string | undefined - const sut = new CompositeLogInHandler([{ - async handleLogIn(userId) { - userId1 = userId - } - }, { - async handleLogIn(userId) { - userId2 = userId - } - }, { - async handleLogIn(userId) { - userId3 = userId - } - }]) - await sut.handleLogIn("1234") - expect(userId1).toEqual("1234") - expect(userId2).toEqual("1234") - expect(userId3).toEqual("1234") -}) diff --git a/__test__/auth/CredentialsTransferringLogInHandler.test.ts b/__test__/auth/CredentialsTransferringLogInHandler.test.ts deleted file mode 100644 index f1061b40..00000000 --- a/__test__/auth/CredentialsTransferringLogInHandler.test.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { CredentialsTransferringLogInHandler } from "../../src/features/auth/domain" - -test("It transfers credentials for guest", async () => { - let didTransferGuestCredentials = false - const sut = new CredentialsTransferringLogInHandler({ - isUserGuestReader: { - async getIsUserGuest() { - return true - } - }, - guestCredentialsTransferrer: { - async transferCredentials() { - didTransferGuestCredentials = true - } - }, - hostCredentialsTransferrer: { - async transferCredentials() {} - } - }) - await sut.handleLogIn("1234") - expect(didTransferGuestCredentials).toBeTruthy() -}) - -test("It transfers credentials for host", async () => { - let didTransferHostCredentials = false - const sut = new CredentialsTransferringLogInHandler({ - isUserGuestReader: { - async getIsUserGuest() { - return false - } - }, - guestCredentialsTransferrer: { - async transferCredentials() {} - }, - hostCredentialsTransferrer: { - async transferCredentials() { - didTransferHostCredentials = true - } - } - }) - await sut.handleLogIn("1234") - expect(didTransferHostCredentials).toBeTruthy() -}) diff --git a/__test__/auth/FallbackOAuthTokenRepository.test.ts b/__test__/auth/FallbackOAuthTokenRepository.test.ts new file mode 100644 index 00000000..7784172b --- /dev/null +++ b/__test__/auth/FallbackOAuthTokenRepository.test.ts @@ -0,0 +1,153 @@ +import { FallbackOAuthTokenRepository } from "@/features/auth/domain" + +test("It reads from secondary repository if primary repository throws error", async () => { + let didReadFromPrimaryRepository = false + let didReadFromSecondaryRepository = false + const sut = new FallbackOAuthTokenRepository({ + primaryRepository: { + async get(_userId) { + didReadFromPrimaryRepository = true + throw new Error("Not found") + }, + async set(_userId, _token) {}, + async delete(_userId) {} + }, + secondaryRepository: { + async get(_userId) { + didReadFromSecondaryRepository = true + return { accessToken: "foo", refreshToken: "bar" } + }, + async set(_userId, _token) {}, + async delete(_userId) {} + } + }) + await sut.get("1234") + expect(didReadFromPrimaryRepository).toBeTruthy() + expect(didReadFromSecondaryRepository).toBeTruthy() +}) + +test("It skips reading from secondary repository if OAuth token was found in primary repository", async () => { + let didReadFromPrimaryRepository = false + let didReadFromSecondaryRepository = false + const sut = new FallbackOAuthTokenRepository({ + primaryRepository: { + async get(_userId) { + didReadFromPrimaryRepository = true + return { accessToken: "foo", refreshToken: "bar" } + }, + async set(_userId, _token) {}, + async delete(_userId) {} + }, + secondaryRepository: { + async get(_userId) { + didReadFromSecondaryRepository = true + throw new Error("Not found") + }, + async set(_userId, _token) {}, + async delete(_userId) {} + } + }) + await sut.get("1234") + expect(didReadFromPrimaryRepository).toBeTruthy() + expect(didReadFromSecondaryRepository).toBeFalsy() +}) + +test("It throws error if OAuth token was not found in any of the repositories", async () => { + const sut = new FallbackOAuthTokenRepository({ + primaryRepository: { + async get(_userId) { + throw new Error("Not found") + }, + async set(_userId, _token) {}, + async delete(_userId) {} + }, + secondaryRepository: { + async get(_userId) { + throw new Error("Not found") + }, + async set(_userId, _token) {}, + async delete(_userId) {} + } + }) + await expect(sut.get("1234")).rejects.toThrow() +}) + +test("It sets value from secondary repository in primary repository", async () => { + let didSetInPrimaryRepository = false + const sut = new FallbackOAuthTokenRepository({ + primaryRepository: { + async get(_userId) { + throw new Error("Not found") + }, + async set(_userId, _token) { + didSetInPrimaryRepository = true + }, + async delete(_userId) {} + }, + secondaryRepository: { + async get(_userId) { + return { accessToken: "foo", refreshToken: "bar" } + }, + async set(_userId, _token) {}, + async delete(_userId) {} + } + }) + await sut.get("1234") + expect(didSetInPrimaryRepository).toBeTruthy() +}) + +test("It sets value in primary repository only", async () => { + let didSetInPrimaryRepository = false + let didSetInSecondaryRepository = false + const sut = new FallbackOAuthTokenRepository({ + primaryRepository: { + async get(_userId) { + throw new Error("Not found") + }, + async set(_userId, _token) { + didSetInPrimaryRepository = true + }, + async delete(_userId) {} + }, + secondaryRepository: { + async get(_userId) { + return { accessToken: "foo", refreshToken: "bar" } + }, + async set(_userId, _token) { + didSetInSecondaryRepository = true + }, + async delete(_userId) {} + } + }) + await sut.set("1234", { accessToken: "foo", refreshToken: "bar" }) + expect(didSetInPrimaryRepository).toBeTruthy() + expect(didSetInSecondaryRepository).toBeFalsy() +}) + +test("It deletes value from primary repository only", async () => { + let didDeleteFromPrimaryRepository = false + let didDeleteFromSecondaryRepository = false + const sut = new FallbackOAuthTokenRepository({ + primaryRepository: { + async get(_userId) { + throw new Error("Not found") + }, + async set(_userId, _token) {}, + async delete(_userId) { + didDeleteFromPrimaryRepository = true + } + }, + secondaryRepository: { + async get(_userId) { + return { accessToken: "foo", refreshToken: "bar" } + }, + async set(_userId, _token) {}, + async delete(_userId) { + didDeleteFromSecondaryRepository = true + } + } + }) + await sut.delete("1234") + expect(didDeleteFromPrimaryRepository).toBeTruthy() + expect(didDeleteFromSecondaryRepository).toBeFalsy() +}) diff --git a/__test__/auth/GitHubOrganizationSessionValidator.test.ts b/__test__/auth/GitHubOrganizationSessionValidator.test.ts deleted file mode 100644 index 9287ae6c..00000000 --- a/__test__/auth/GitHubOrganizationSessionValidator.test.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { - GitHubOrganizationSessionValidator, - SessionValidity - } from "../../src/features/auth/domain" - -test("It requests organization membership status for the specified organization", async () => { - let queriedOrganizationName: string | undefined - const sut = new GitHubOrganizationSessionValidator({ - acceptedOrganization: "foo", - organizationMembershipStatusReader: { - async getOrganizationMembershipStatus(request) { - queriedOrganizationName = request.organizationName - return { state: "active" } - } - } - }) - await sut.validateSession() - expect(queriedOrganizationName).toBe("foo") -}) - -test("It considers session valid when membership state is \"active\"", async () => { - const sut = new GitHubOrganizationSessionValidator({ - acceptedOrganization: "foo", - organizationMembershipStatusReader: { - async getOrganizationMembershipStatus() { - return { state: "active" } - } - } - }) - const sessionValidity = await sut.validateSession() - expect(sessionValidity).toEqual(SessionValidity.VALID) -}) - -test("It considers user not to be part of the organization when membership state is \"pending\"", async () => { - const sut = new GitHubOrganizationSessionValidator({ - acceptedOrganization: "foo", - organizationMembershipStatusReader: { - async getOrganizationMembershipStatus() { - return { state: "pending" } - } - } - }) - const sessionValidity = await sut.validateSession() - expect(sessionValidity).toEqual(SessionValidity.OUTSIDE_GITHUB_ORGANIZATION) -}) - -test("It considers user not to be part of the organization when receiving HTTP 404", async () => { - const sut = new GitHubOrganizationSessionValidator({ - acceptedOrganization: "foo", - organizationMembershipStatusReader: { - async getOrganizationMembershipStatus() { - throw { status: 404, message: "User is not member of organization"} - } - } - }) - const sessionValidity = await sut.validateSession() - expect(sessionValidity).toEqual(SessionValidity.OUTSIDE_GITHUB_ORGANIZATION) -}) - -test("It considers organization to have blocked the GitHub app when receiving HTTP 403", async () => { - const sut = new GitHubOrganizationSessionValidator({ - acceptedOrganization: "foo", - organizationMembershipStatusReader: { - async getOrganizationMembershipStatus() { - throw { status: 403, message: "Organization has blocked GitHub app"} - } - } - }) - const sessionValidity = await sut.validateSession() - expect(sessionValidity).toEqual(SessionValidity.GITHUB_APP_BLOCKED) -}) - -test("It forwards error when getting membership status throws unknown error", async () => { - const sut = new GitHubOrganizationSessionValidator({ - acceptedOrganization: "foo", - organizationMembershipStatusReader: { - async getOrganizationMembershipStatus() { - throw { status: 500 } - } - } - }) - await expect(sut.validateSession()).rejects.toEqual({ status: 500 }) -}) diff --git a/__test__/auth/GuestAccessTokenRepository.test.ts b/__test__/auth/GuestAccessTokenRepository.test.ts deleted file mode 100644 index 5c089cd3..00000000 --- a/__test__/auth/GuestAccessTokenRepository.test.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { GuestAccessTokenRepository } from "../../src/features/auth/domain" - -test("It reads access token for user", async () => { - let readUserId: string | undefined - const sut = new GuestAccessTokenRepository({ - async get(userId) { - readUserId = userId - return "foo" - }, - async setExpiring() {}, - async delete() {} - }) - const accessToken = await sut.get("1234") - expect(readUserId).toBe("1234") - expect(accessToken).toBe("foo") -}) - -test("It stores access token for user", async () => { - let storedUserId: string | undefined - let storedToken: string | undefined - let storedTimeToLive: number | undefined - const sut = new GuestAccessTokenRepository({ - async get() { - return "foo" - }, - async setExpiring(userId, token, timeToLive) { - storedUserId = userId - storedToken = token - storedTimeToLive = timeToLive - }, - async delete(userId) {} - }) - await sut.set("1234", "bar") - expect(storedUserId).toBe("1234") - expect(storedToken).toBe("bar") - expect(storedTimeToLive).toBeGreaterThan(0) -}) - -test("It deletes access token for user", async () => { - let deletedUserId: string | undefined - const sut = new GuestAccessTokenRepository({ - async get() { - return "foo" - }, - async setExpiring() {}, - async delete(userId) { - deletedUserId = userId - } - }) - await sut.delete("1234") - expect(deletedUserId).toBe("1234") -}) diff --git a/__test__/auth/GuestAccessTokenService.test.ts b/__test__/auth/GuestAccessTokenService.test.ts deleted file mode 100644 index 407ac26e..00000000 --- a/__test__/auth/GuestAccessTokenService.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { GuestAccessTokenService } from "../../src/features/auth/domain" - -test("It gets the access token for the user", async () => { - let readUserId: string | undefined - const sut = new GuestAccessTokenService({ - userIdReader: { - async getUserId() { - return "1234" - } - }, - repository: { - async get(userId) { - readUserId = userId - return "foo" - }, - async set() {} - }, - dataSource: { - async getAccessToken() { - return "foo" - } - } - }) - const accessToken = await sut.getAccessToken() - expect(readUserId).toBe("1234") - expect(accessToken).toBe("foo") -}) diff --git a/__test__/auth/HostAccessTokenService.test.ts b/__test__/auth/HostAccessTokenService.test.ts deleted file mode 100644 index 79fcaf72..00000000 --- a/__test__/auth/HostAccessTokenService.test.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { HostAccessTokenService } from "../../src/features/auth/domain" -import { OAuthToken } from "../../src/features/auth/domain" - -test("It gets the access token for the user", async () => { - let readUserID: string | undefined - const sut = new HostAccessTokenService({ - userIdReader: { - async getUserId() { - return "1234" - } - }, - repository: { - async get(userId) { - readUserID = userId - return { accessToken: "foo", refreshToken: "bar" } - }, - async set() {}, - async delete() {}, - }, - refresher: { - async refreshOAuthToken() { - return { accessToken: "foo", refreshToken: "bar" } - } - } - }) - const accessToken = await sut.getAccessToken() - expect(readUserID).toBe("1234") - expect(accessToken).toBe("foo") -}) - -test("It refreshes OAuth using stored refresh token", async () => { - let usedRefreshToken: string | undefined - const sut = new HostAccessTokenService({ - userIdReader: { - async getUserId() { - return "1234" - } - }, - repository: { - async get() { - return { accessToken: "oldAccessToken", refreshToken: "oldRefreshToken" } - }, - async set() {}, - async delete() {}, - }, - refresher: { - async refreshOAuthToken(refreshToken) { - usedRefreshToken = refreshToken - return { accessToken: "newAccessToken", refreshToken: "newRefreshToken" } - } - } - }) - await sut.refreshAccessToken("oldAccessToken") - expect(usedRefreshToken).toBe("oldRefreshToken") -}) - -test("It stores the new OAuth token for the user", async () => { - let storedUserId: string | undefined - let storedOAuthToken: OAuthToken | undefined - const sut = new HostAccessTokenService({ - userIdReader: { - async getUserId() { - return "1234" - } - }, - repository: { - async get() { - return { accessToken: "oldAccessToken", refreshToken: "oldRefreshToken" } - }, - async set(userId, oAuthToken) { - storedUserId = userId - storedOAuthToken = oAuthToken - }, - async delete() {}, - }, - refresher: { - async refreshOAuthToken() { - return { accessToken: "newAccessToken", refreshToken: "newRefreshToken" } - } - } - }) - await sut.refreshAccessToken("foo") - expect(storedUserId).toBe("1234") - expect(storedOAuthToken?.accessToken).toBe("newAccessToken") - expect(storedOAuthToken?.refreshToken).toBe("newRefreshToken") -}) diff --git a/__test__/auth/HostCredentialsTransferrer.test.ts b/__test__/auth/HostCredentialsTransferrer.test.ts deleted file mode 100644 index a5988aa8..00000000 --- a/__test__/auth/HostCredentialsTransferrer.test.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { HostCredentialsTransferrer } from "../../src/features/auth/domain" -import { OAuthToken } from "../../src/features/auth/domain" - -test("It fetches refresh token for specified user", async () => { - let fetchedUserId: string | undefined - const sut = new HostCredentialsTransferrer({ - refreshTokenReader: { - async getRefreshToken(userId) { - fetchedUserId = userId - return "" - } - }, - oAuthTokenRefresher: { - async refreshOAuthToken() { - return { accessToken: "foo", refreshToken: "bar" } - } - }, - oAuthTokenRepository: { - async get() { - return { accessToken: "foo", refreshToken: "bar" } - }, - async set() {}, - async delete() {} - } - }) - await sut.transferCredentials("123") - expect(fetchedUserId).toBe("123") -}) - -test("It refreshes the fetched refresh token", async () => { - let refreshedRefreshToken: string | undefined - const sut = new HostCredentialsTransferrer({ - refreshTokenReader: { - async getRefreshToken() { - return "helloworld" - } - }, - oAuthTokenRefresher: { - async refreshOAuthToken(refreshToken) { - refreshedRefreshToken = refreshToken - return { accessToken: "foo", refreshToken: "bar" } - } - }, - oAuthTokenRepository: { - async get() { - return { accessToken: "foo", refreshToken: "bar" } - }, - async set() {}, - async delete() {} - } - }) - await sut.transferCredentials("123") - expect(refreshedRefreshToken).toBe("helloworld") -}) - -test("It stores the refreshed auth token for the user", async () => { - let storedAuthToken: OAuthToken | undefined - let storedUserId: string | undefined - const sut = new HostCredentialsTransferrer({ - refreshTokenReader: { - async getRefreshToken() { - return "helloworld" - } - }, - oAuthTokenRefresher: { - async refreshOAuthToken() { - return { accessToken: "foo", refreshToken: "bar" } - } - }, - oAuthTokenRepository: { - async get() { - return { accessToken: "foo", refreshToken: "bar" } - }, - async set(userId, token) { - storedAuthToken = token - storedUserId = userId - }, - async delete() {} - } - }) - await sut.transferCredentials("123") - expect(storedAuthToken?.accessToken).toBe("foo") - expect(storedAuthToken?.refreshToken).toBe("bar") - expect(storedUserId).toBe("123") -}) \ No newline at end of file diff --git a/__test__/auth/HostOnlySessionValidator.test.ts b/__test__/auth/HostOnlySessionValidator.test.ts deleted file mode 100644 index daf60611..00000000 --- a/__test__/auth/HostOnlySessionValidator.test.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { - HostOnlySessionValidator, - SessionValidity -} from "../../src/features/auth/domain" - -test("It validates session when user is host", async () => { - let didValidateSession = false - const sut = new HostOnlySessionValidator({ - isGuestReader: { - async getIsGuest() { - return false - } - }, - sessionValidator: { - async validateSession() { - didValidateSession = true - return SessionValidity.VALID - }, - } - }) - await sut.validateSession() - expect(didValidateSession).toBeTruthy() -}) - - -test("It does not validate session when user is guest", async () => { - let didValidateSession = false - const sut = new HostOnlySessionValidator({ - isGuestReader: { - async getIsGuest() { - return true - } - }, - sessionValidator: { - async validateSession() { - didValidateSession = true - return SessionValidity.VALID - }, - } - }) - await sut.validateSession() - expect(didValidateSession).toBeFalsy() -}) diff --git a/__test__/auth/IsUserGuestReader.test.ts b/__test__/auth/IsUserGuestReader.test.ts deleted file mode 100644 index 2d604818..00000000 --- a/__test__/auth/IsUserGuestReader.test.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { IsUserGuestReader } from "../../src/features/auth/domain" -import { UserIdentityProvider } from "../../src/features/auth/domain" - -test("It does not consider a user to be a guest if they are logged in with GitHub", async () => { - const sut = new IsUserGuestReader({ - async getUserIdentityProvider() { - return UserIdentityProvider.GITHUB - } - }) - const isGuest = await sut.getIsUserGuest("foo") - expect(isGuest).toBeFalsy() -}) - -test("It considers user a to be a guest if they are logged in with username and password", async () => { - const sut = new IsUserGuestReader({ - async getUserIdentityProvider() { - return UserIdentityProvider.USERNAME_PASSWORD - } - }) - const isGuest = await sut.getIsUserGuest("foo") - expect(isGuest).toBeTruthy() -}) diff --git a/__test__/auth/LockingAccessTokenRefresher.test.ts b/__test__/auth/LockingAccessTokenRefresher.test.ts new file mode 100644 index 00000000..00ee777f --- /dev/null +++ b/__test__/auth/LockingAccessTokenRefresher.test.ts @@ -0,0 +1,78 @@ +import { LockingOAuthTokenRefresher } from "../../src/features/auth/domain" + +test("It acquires a lock", async () => { + let didAcquireLock = false + const sut = new LockingOAuthTokenRefresher({ + mutexFactory: { + async makeMutex() { + return { + async acquire() { + didAcquireLock = true + }, + async release() {} + } + } + }, + oauthTokenRefresher: { + async refreshOAuthToken(_refreshToken) { + return { + accessToken: "newAccessToken", + refreshToken: "newRefreshToken" + } + } + } + }) + await sut.refreshOAuthToken({ accessToken: "foo", refreshToken: "bar" }) + expect(didAcquireLock).toBeTruthy() +}) + +test("It releases the acquired lock", async () => { + let didReleaseLock = false + const sut = new LockingOAuthTokenRefresher({ + mutexFactory: { + async makeMutex() { + return { + async acquire() {}, + async release() { + didReleaseLock = true + } + } + } + }, + oauthTokenRefresher: { + async refreshOAuthToken(_refreshToken) { + return { + accessToken: "newAccessToken", + refreshToken: "newRefreshToken" + } + } + } + }) + await sut.refreshOAuthToken({ accessToken: "foo", refreshToken: "bar" }) + expect(didReleaseLock).toBeTruthy() +}) + +test("It refreshes access token", async () => { + let didRefreshAccessToken = false + const sut = new LockingOAuthTokenRefresher({ + mutexFactory: { + async makeMutex() { + return { + async acquire() {}, + async release() {} + } + } + }, + oauthTokenRefresher: { + async refreshOAuthToken(_refreshToken) { + didRefreshAccessToken = true + return { + accessToken: "newAccessToken", + refreshToken: "newRefreshToken" + } + } + } + }) + await sut.refreshOAuthToken({ accessToken: "foo", refreshToken: "bar" }) + expect(didRefreshAccessToken).toBeTruthy() +}) diff --git a/__test__/auth/LockingAccessTokenService.test.ts b/__test__/auth/LockingAccessTokenService.test.ts deleted file mode 100644 index 30996afb..00000000 --- a/__test__/auth/LockingAccessTokenService.test.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { LockingAccessTokenService } from "../../src/features/auth/domain" - -test("It reads access token", async () => { - let didReadAccessToken = false - const sut = new LockingAccessTokenService({ - async makeMutex() { - return { - async acquire() {}, - async release() {} - } - } - }, { - async getAccessToken() { - didReadAccessToken = true - return "foo" - }, - async refreshAccessToken() { - return "foo" - } - }) - await sut.getAccessToken() - expect(didReadAccessToken).toBeTruthy() -}) - -test("It acquires a lock", async () => { - let didAcquireLock = false - const sut = new LockingAccessTokenService({ - async makeMutex() { - return { - async acquire() { - didAcquireLock = true - }, - async release() {} - } - } - }, { - async getAccessToken() { - return "foo" - }, - async refreshAccessToken() { - return "foo" - } - }) - await sut.refreshAccessToken("bar") - expect(didAcquireLock).toBeTruthy() -}) - -test("It releases the acquired lock", async () => { - let didReleaseLock = false - const sut = new LockingAccessTokenService({ - async makeMutex() { - return { - async acquire() {}, - async release() { - didReleaseLock = true - } - } - } - }, { - async getAccessToken() { - return "foo" - }, - async refreshAccessToken() { - return "foo" - } - }) - await sut.refreshAccessToken("bar") - expect(didReleaseLock).toBeTruthy() -}) - -test("It refreshes access token", async () => { - let didRefreshAccessToken = false - const sut = new LockingAccessTokenService({ - async makeMutex() { - return { - async acquire() {}, - async release() {} - } - } - }, { - async getAccessToken() { - return "foo" - }, - async refreshAccessToken() { - didRefreshAccessToken = true - return "foo" - } - }) - await sut.refreshAccessToken("foo") - expect(didRefreshAccessToken).toBeTruthy() -}) diff --git a/__test__/auth/LogInHandler.test.ts b/__test__/auth/LogInHandler.test.ts new file mode 100644 index 00000000..d1dd0c0f --- /dev/null +++ b/__test__/auth/LogInHandler.test.ts @@ -0,0 +1,180 @@ +import { LogInHandler } from "../../src/features/auth/domain" + +test("It disallows logging in when account is undefined", async () => { + const sut = new LogInHandler({ + oauthTokenRepository: { + async get(_userId) { + throw new Error("Not implemented") + }, + async set(_userId, _token) {}, + async delete(_userId) {}, + } + }) + const didLogin = await sut.handleLogIn({ + user: { id: "1234" }, + account: null + }) + expect(didLogin).toBeFalsy() +}) + +test("It disallows logging in using a GitHub Account without an access token", async () => { + const sut = new LogInHandler({ + oauthTokenRepository: { + async get(_userId) { + throw new Error("Not implemented") + }, + async set(_userId, _token) {}, + async delete(_userId) {}, + } + }) + const didLogin = await sut.handleLogIn({ + user: { + id: "1234" + }, + account: { + provider: "github", + providerAccountId: "foo@example.com", + refresh_token: "bar" + } + }) + expect(didLogin).toBeFalsy() +}) + +test("It disallows logging in using a GitHub Account without a refresh token", async () => { + const sut = new LogInHandler({ + oauthTokenRepository: { + async get(_userId) { + throw new Error("Not implemented") + }, + async set(_userId, _token) {}, + async delete(_userId) {}, + } + }) + const didLogin = await sut.handleLogIn({ + user: { + id: "1234" + }, + account: { + provider: "github", + providerAccountId: "foo@example.com", + access_token: "foo" + } + }) + expect(didLogin).toBeFalsy() +}) + +test("It allows logging in when using a GitHub account that has an access token and a refresh token", async () => { + const sut = new LogInHandler({ + oauthTokenRepository: { + async get(_userId) { + throw new Error("Not implemented") + }, + async set(_userId, _token) {}, + async delete(_userId) {}, + } + }) + const didLogin = await sut.handleLogIn({ + user: { + id: "1234" + }, + account: { + provider: "github", + providerAccountId: "foo@example.com", + access_token: "foo", + refresh_token: "bar" + } + }) + expect(didLogin).toBeTruthy() +}) + +test("It persists access token and refresh token when logging in with a GitHub account with a valid user ID", async () => { + let persistedUserId: string | undefined + let persistedAccessToken: string | undefined + let persistedRefreshToken: string | undefined + const sut = new LogInHandler({ + oauthTokenRepository: { + async get(_userId) { + throw new Error("Not implemented") + }, + async set(userId, token) { + persistedUserId = userId + persistedAccessToken = token.accessToken + persistedRefreshToken = token.refreshToken + }, + async delete(_userId) {}, + } + }) + const didLogin = await sut.handleLogIn({ + user: { + id: "1234" + }, + account: { + provider: "github", + providerAccountId: "foo@example.com", + access_token: "foo", + refresh_token: "bar" + } + }) + expect(didLogin).toBeTruthy() + expect(persistedUserId).toBe("1234") + expect(persistedAccessToken).toBe("foo") + expect(persistedRefreshToken).toBe("bar") +}) + +test("It skips persisting access token and refresh token when logging in with a GitHub account with a temporary user ID", async () => { + let didPersistTokens = false + const sut = new LogInHandler({ + oauthTokenRepository: { + async get(_userId) { + throw new Error("Not implemented") + }, + async set(_userId, _token) { + didPersistTokens = true + }, + async delete(_userId) {}, + } + }) + const didLogin = await sut.handleLogIn({ + user: { + // A temporary user ID is any string that is not an integer. + id: "3d3e2ac4-6b06-41b3-8340-d210c733c62d" + }, + account: { + provider: "github", + providerAccountId: "foo@example.com", + access_token: "foo", + refresh_token: "bar" + } + }) + expect(didLogin).toBeTruthy() + expect(didPersistTokens).toBeFalsy() +}) + +test("It disallows logging in when failing to persist access token and refresh token for GitHub account", async () => { + let didAttemptToPersistTokens = false + const sut = new LogInHandler({ + oauthTokenRepository: { + async get(_userId) { + throw new Error("Not implemented") + }, + async set(_userId, _token) { + didAttemptToPersistTokens = true + throw new Error("Mock error") + }, + async delete(_userId) {}, + } + }) + const didLogin = await sut.handleLogIn({ + user: { + id: "1234" + }, + account: { + provider: "github", + providerAccountId: "foo@example.com", + access_token: "foo", + refresh_token: "bar" + } + }) + expect(didLogin).toBeFalsy() + expect(didAttemptToPersistTokens).toBeTruthy() +}) diff --git a/__test__/auth/OAuthTokenDataSource.test.ts b/__test__/auth/OAuthTokenDataSource.test.ts new file mode 100644 index 00000000..28390b61 --- /dev/null +++ b/__test__/auth/OAuthTokenDataSource.test.ts @@ -0,0 +1,75 @@ +import { OAuthTokenDataSource } from "../../src/features/auth/domain" + +test("It reads OAuth token for user's ID", async () => { + let readUserId: string | undefined + const sut = new OAuthTokenDataSource({ + session: { + async getIsAuthenticated() { + return true + }, + async getUserId() { + return "1234" + } + }, + repository: { + async get(userId) { + readUserId = userId + return { + accessToken: "foo", + refreshToken: "bar" + } + }, + async set(_userId, _token) {}, + async delete(_userId) {} + } + }) + await sut.getOAuthToken() + expect(readUserId).toBe("1234") +}) + +test("It reads OAuth token", async () => { + const sut = new OAuthTokenDataSource({ + session: { + async getIsAuthenticated() { + return true + }, + async getUserId() { + return "1234" + } + }, + repository: { + async get(_userId) { + return { + accessToken: "foo", + refreshToken: "bar" + } + }, + async set(_userId, _token) {}, + async delete(_userId) {} + } + }) + const oauthToken = await sut.getOAuthToken() + expect(oauthToken.accessToken).toBe("foo") + expect(oauthToken.refreshToken).toBe("bar") +}) + +test("It forwards errors from repository", async () => { + const sut = new OAuthTokenDataSource({ + session: { + async getIsAuthenticated() { + return true + }, + async getUserId() { + return "1234" + } + }, + repository: { + async get(_userId) { + throw new Error("OAuth token was not found") + }, + async set(_userId, _token) {}, + async delete(_userId) {} + } + }) + expect(sut.getOAuthToken()).rejects.toThrow() +}) diff --git a/__test__/auth/OAuthTokenRepository.test.ts b/__test__/auth/OAuthTokenRepository.test.ts index 2bcac8a0..e7f1a124 100644 --- a/__test__/auth/OAuthTokenRepository.test.ts +++ b/__test__/auth/OAuthTokenRepository.test.ts @@ -1,58 +1,91 @@ import { OAuthTokenRepository } from "../../src/features/auth/domain" test("It reads the auth token for the specified user", async () => { + let readProvider: string | undefined let readUserId: string | undefined const sut = new OAuthTokenRepository({ - async get(userId) { - readUserId = userId - return JSON.stringify({ - accessToken: "foo", - refreshToken: "bar" - }) - }, - async set() {}, - async setExpiring() {}, - async delete() {} + provider: "github", + db: { + async connect() { + return { + async query(_query: string, _values: any[] = []) { + return { rows: [] } + }, + async disconnect() {}, + } + }, + async query(_query: string, values: any[] = []) { + readProvider = values[0] + readUserId = values[1] + return { + rows: [{ + access_token: "foo", + refresh_token: "bar" + }] + } + } + } }) - await sut.get("1234") + const token = await sut.get("1234") + expect(readProvider).toBe("github") expect(readUserId).toBe("1234") + expect(token.accessToken).toBe("foo") + expect(token.refreshToken).toBe("bar") }) test("It stores the auth token for the specified user", async () => { + let storedProvider: string | undefined let storedUserId: string | undefined - let storedJSON: any | undefined + let storedAccessToken: any | undefined + let storedRefreshToken: any | undefined const sut = new OAuthTokenRepository({ - async get() { - return "" - }, - async set() {}, - async setExpiring(userId, data) { - storedUserId = userId - storedJSON = data - }, - async delete() {} + provider: "github", + db: { + async connect() { + return { + async query(_query: string, _values: any[] = []) { + return { rows: [] } + }, + async disconnect() {}, + } + }, + async query(_query: string, values: any[] = []) { + storedProvider = values[0] + storedUserId = values[1] + storedAccessToken = values[2] + storedRefreshToken = values[3] + return { rows: [] } + } + } }) const authToken = { accessToken: "foo", refreshToken: "bar" } await sut.set("1234", authToken) - const storedObj = JSON.parse(storedJSON) + expect(storedProvider).toBe("github") expect(storedUserId).toBe("1234") - expect(storedObj.accessToken).toBe(authToken.accessToken) - expect(storedObj.refreshToken).toBe(authToken.refreshToken) + expect(storedAccessToken).toBe(authToken.accessToken) + expect(storedRefreshToken).toBe(authToken.refreshToken) }) test("It deletes the auth token for the specified user", async () => { let deletedUserId: string | undefined const sut = new OAuthTokenRepository({ - async get() { - return "" - }, - async set() {}, - async setExpiring() {}, - async delete(userId) { - deletedUserId = userId + provider: "github", + db: { + async connect() { + return { + async query(_query: string, _values: any[] = []) { + return { rows: [] } + }, + async disconnect() {}, + } + }, + async query(_query: string, values: any[] = []) { + deletedUserId = values[1] + return { rows: [] } + } } }) await sut.delete("1234") diff --git a/__test__/auth/OAuthTokenSessionValidator.test.ts b/__test__/auth/OAuthTokenSessionValidator.test.ts new file mode 100644 index 00000000..2abadbbd --- /dev/null +++ b/__test__/auth/OAuthTokenSessionValidator.test.ts @@ -0,0 +1,45 @@ +import { OAuthTokenSessionValidator, SessionValidity } from "../../src/features/auth/domain" + +test("It reads the access token", async () => { + let didReadOAuthToken = false + const sut = new OAuthTokenSessionValidator({ + oauthTokenDataSource: { + async getOAuthToken() { + didReadOAuthToken = true + return { + accessToken: "foo", + refreshToken: "bar" + } + } + } + }) + await sut.validateSession() + expect(didReadOAuthToken).toBeTruthy() +}) + +test("It considers session valid when it can read an access token", async () => { + const sut = new OAuthTokenSessionValidator({ + oauthTokenDataSource: { + async getOAuthToken() { + return { + accessToken: "foo", + refreshToken: "bar" + } + } + } + }) + const validity = await sut.validateSession() + expect(validity).toBe(SessionValidity.VALID) +}) + +test("It considers access token to be invalid when failing to get access token", async () => { + const sut = new OAuthTokenSessionValidator({ + oauthTokenDataSource: { + async getOAuthToken() { + throw new Error("Mock error") + } + } + }) + const validity = await sut.validateSession() + expect(validity).toBe(SessionValidity.INVALID_ACCESS_TOKEN) +}) diff --git a/__test__/auth/OnlyStaleRefreshingAccessTokenService.test.ts b/__test__/auth/OnlyStaleRefreshingAccessTokenService.test.ts deleted file mode 100644 index f6dedfda..00000000 --- a/__test__/auth/OnlyStaleRefreshingAccessTokenService.test.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { OnlyStaleRefreshingAccessTokenService } from "../../src/features/auth/domain" - -test("It refreshes the access token when the input access token is equal to the stored access token", async () => { - let didRefreshAccessToken = false - const sut = new OnlyStaleRefreshingAccessTokenService({ - async getAccessToken() { - return "foo" - }, - async refreshAccessToken() { - didRefreshAccessToken = true - return "foo" - } - }) - await sut.refreshAccessToken("foo") - expect(didRefreshAccessToken).toBeTruthy() -}) - -test("It skips refreshing the access token when the input access token is not equal to the stored access token", async () => { - let didRefreshAccessToken = false - const sut = new OnlyStaleRefreshingAccessTokenService({ - async getAccessToken() { - return "foo" - }, - async refreshAccessToken() { - didRefreshAccessToken = true - return "foo" - } - }) - await sut.refreshAccessToken("outdated") - expect(didRefreshAccessToken).toBeFalsy() -}) - -test("It reads access token", async () => { - let didReadAccessToken = false - const sut = new OnlyStaleRefreshingAccessTokenService({ - async getAccessToken() { - didReadAccessToken = true - return "foo" - }, - async refreshAccessToken() { - return "foo" - } - }) - await sut.getAccessToken() - expect(didReadAccessToken).toBeTruthy() -}) \ No newline at end of file diff --git a/__test__/auth/PersistingOAuthTokenRefresher.test.ts b/__test__/auth/PersistingOAuthTokenRefresher.test.ts new file mode 100644 index 00000000..a2537939 --- /dev/null +++ b/__test__/auth/PersistingOAuthTokenRefresher.test.ts @@ -0,0 +1,175 @@ +import { PersistingOAuthTokenRefresher, OAuthToken } from "../../src/features/auth/domain" + +test("It refreshes OAuth token using provided refresh token", async () => { + let usedRefreshToken: string | undefined + const sut = new PersistingOAuthTokenRefresher({ + userIdReader: { + async getUserId() { + return "1234" + } + }, + oauthTokenRefresher: { + async refreshOAuthToken(oauthToken) { + usedRefreshToken = oauthToken.refreshToken + return { + accessToken: "newAccessToken", + refreshToken: "newRefreshToken" + } + } + }, + oauthTokenRepository: { + async get() { + return { + accessToken: "persistedAccessToken", + refreshToken: "persistedRefreshToken" + } + }, + async set() {}, + async delete() {} + } + }) + await sut.refreshOAuthToken({ + accessToken: "persistedAccessToken", + refreshToken: "persistedRefreshToken" + }) + expect(usedRefreshToken).toBe("persistedRefreshToken") +}) + +test("It stores the new OAuth token for the user", async () => { + let storedUserId: string | undefined + let storedOAuthToken: OAuthToken | undefined + const sut = new PersistingOAuthTokenRefresher({ + userIdReader: { + async getUserId() { + return "1234" + } + }, + oauthTokenRefresher: { + async refreshOAuthToken() { + return { + accessToken: "newAccessToken", + refreshToken: "newRefreshToken" + } + } + }, + oauthTokenRepository: { + async get() { + return { + accessToken: "persistedAccessToken", + refreshToken: "persistedRefreshToken" + } + }, + async set(userId, oAuthToken) { + storedUserId = userId + storedOAuthToken = oAuthToken + }, + async delete() {} + } + }) + await sut.refreshOAuthToken({ + accessToken: "persistedAccessToken", + refreshToken: "persistedRefreshToken" + }) + expect(storedUserId).toBe("1234") + expect(storedOAuthToken?.accessToken).toBe("newAccessToken") + expect(storedOAuthToken?.refreshToken).toBe("newRefreshToken") +}) + +test("It refreshes the OAuth token when the input refresh token is equal to the stored refresh token", async () => { + let didRefreshOAuthToken = false + const sut = new PersistingOAuthTokenRefresher({ + userIdReader: { + async getUserId() { + return "1234" + } + }, + oauthTokenRefresher: { + async refreshOAuthToken() { + didRefreshOAuthToken = true + return { + accessToken: "newAccessToken", + refreshToken: "newRefreshToken" + } + } + }, + oauthTokenRepository: { + async get() { + return { + accessToken: "persistedAccessToken", + refreshToken: "persistedRefreshToken" + } + }, + async set() {}, + async delete() {} + } + }) + await sut.refreshOAuthToken({ + accessToken: "persistedAccessToken", + refreshToken: "persistedRefreshToken" + }) + expect(didRefreshOAuthToken).toBeTruthy() +}) + +test("It skips refreshing the OAuth token when the input refresh token is not equal to the stored refresh token", async () => { + let didRefreshAccessToken = false + const sut = new PersistingOAuthTokenRefresher({ + userIdReader: { + async getUserId() { + return "1234" + } + }, + oauthTokenRefresher: { + async refreshOAuthToken() { + didRefreshAccessToken = true + return { + accessToken: "newAccessToken", + refreshToken: "newRefreshToken" + } + } + }, + oauthTokenRepository: { + async get() { + return { + accessToken: "persistedAccessToken", + refreshToken: "persistedRefreshToken" + } + }, + async set() {}, + async delete() {} + } + }) + await sut.refreshOAuthToken({ accessToken: "foo", refreshToken: "bar" }) + expect(didRefreshAccessToken).toBeFalsy() +}) + +test("It reads the user ID", async () => { + let didReadUserId = false + const sut = new PersistingOAuthTokenRefresher({ + userIdReader: { + async getUserId() { + didReadUserId = true + return "1234" + } + }, + oauthTokenRefresher: { + async refreshOAuthToken() { + return { + accessToken: "foo", + refreshToken: "bar" + } + } + }, + oauthTokenRepository: { + async get() { + return { + accessToken: "foo", + refreshToken: "bar" + } + }, + async set() {}, + async delete() {} + } + }) + await sut.refreshOAuthToken({ accessToken: "foo", refreshToken: "bar" }) + expect(didReadUserId).toBeTruthy() +}) diff --git a/__test__/auth/RemoveInvitedFlagLogInHandler.test.ts b/__test__/auth/RemoveInvitedFlagLogInHandler.test.ts deleted file mode 100644 index e4a276cd..00000000 --- a/__test__/auth/RemoveInvitedFlagLogInHandler.test.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { RemoveInvitedFlagLogInHandler } from "../../src/features/auth/domain" - -test("It removes invited flag from specified user", async () => { - let updatedUserId: string | undefined - /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ - let updatedMetadata: {[key: string]: any} | undefined - const sut = new RemoveInvitedFlagLogInHandler({ - async updateMetadata(userId, metadata) { - updatedUserId = userId - updatedMetadata = metadata - } - }) - await sut.handleLogIn("1234") - expect(updatedUserId).toEqual("1234") - expect(updatedMetadata).toEqual({ - has_pending_invitation: false - }) -}) diff --git a/__test__/auth/RepositoryRestrictingAccessTokenDataSource.test.ts b/__test__/auth/RepositoryRestrictingAccessTokenDataSource.test.ts deleted file mode 100644 index c4a26be7..00000000 --- a/__test__/auth/RepositoryRestrictingAccessTokenDataSource.test.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { RepositoryRestrictingAccessTokenDataSource } from "../../src/features/auth/domain" - -test("It limits access to the fetched repositories", async () => { - let restrictingRepositoryNames: string[] | undefined - const sut = new RepositoryRestrictingAccessTokenDataSource({ - repositoryAccessReader: { - async getRepositoryNames() { - return ["foo", "bar"] - } - }, - dataSource: { - async getAccessToken(repositoryNames) { - restrictingRepositoryNames = repositoryNames - return "secret" - }, - } - }) - await sut.getAccessToken("1234") - expect(restrictingRepositoryNames).toEqual(["foo", "bar"]) -}) diff --git a/__test__/auth/SessionValidity.test.ts b/__test__/auth/SessionValidity.test.ts deleted file mode 100644 index c411f973..00000000 --- a/__test__/auth/SessionValidity.test.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { - mergeSessionValidity, - SessionValidity -} from "../../src/features/auth/domain" - -test("It returns invalid validity when left-hand side validity indicates that the session is invalid", async () => { - const sut = mergeSessionValidity( - SessionValidity.INVALID_ACCESS_TOKEN, - SessionValidity.VALID - ) - expect(sut).toEqual(SessionValidity.INVALID_ACCESS_TOKEN) -}) - -test("It returns invalid validity when right-hand side validity indicates that the session is invalid", async () => { - const sut = mergeSessionValidity( - SessionValidity.VALID, - SessionValidity.INVALID_ACCESS_TOKEN - ) - expect(sut).toEqual(SessionValidity.INVALID_ACCESS_TOKEN) -}) - -test("It returns valid validity when both validities indicate that the session is valid", async () => { - const sut = mergeSessionValidity( - SessionValidity.VALID, - SessionValidity.VALID - ) - expect(sut).toEqual(SessionValidity.VALID) -}) diff --git a/__test__/common/github/AccessTokenRefreshingGitHubClient.test.ts b/__test__/common/github/AccessTokenRefreshingGitHubClient.test.ts deleted file mode 100644 index 0345ea9c..00000000 --- a/__test__/common/github/AccessTokenRefreshingGitHubClient.test.ts +++ /dev/null @@ -1,254 +0,0 @@ -import { AccessTokenRefreshingGitHubClient } from "../../../src/common" -import { - GraphQLQueryRequest, - GetRepositoryContentRequest, - GetPullRequestCommentsRequest, - AddCommentToPullRequestRequest -} from "../../../src/common/github/IGitHubClient" - -test("It forwards a GraphQL request", async () => { - let forwardedRequest: GraphQLQueryRequest | undefined - const sut = new AccessTokenRefreshingGitHubClient({ - async getAccessToken() { - return "foo" - }, - async refreshAccessToken() { - return "foo" - } - }, { - async graphql(request: GraphQLQueryRequest) { - forwardedRequest = request - return {} - }, - async getRepositoryContent() { - return { downloadURL: "https://example.com" } - }, - async getPullRequestComments() { - return [] - }, - async addCommentToPullRequest() {}, - async getOrganizationMembershipStatus() { - return { state: "active" } - } - }) - const request: GraphQLQueryRequest = { - query: "foo", - variables: { hello: "world" } - } - await sut.graphql(request) - expect(forwardedRequest).toEqual(request) -}) - -test("It forwards a request to get the repository content", async () => { - let forwardedRequest: GetRepositoryContentRequest | undefined - const sut = new AccessTokenRefreshingGitHubClient({ - async getAccessToken() { - return "foo" - }, - async refreshAccessToken() { - return "foo" - } - }, { - async graphql() { - return {} - }, - async getRepositoryContent(request: GetRepositoryContentRequest) { - forwardedRequest = request - return { downloadURL: "https://example.com" } - }, - async getPullRequestComments() { - return [] - }, - async addCommentToPullRequest() {}, - async getOrganizationMembershipStatus() { - return { state: "active" } - } - }) - const request: GetRepositoryContentRequest = { - repositoryOwner: "foo", - repositoryName: "bar", - path: "hello", - ref: "world" - } - await sut.getRepositoryContent(request) - expect(forwardedRequest).toEqual(request) -}) - -test("It forwards a request to get comments to a pull request", async () => { - let forwardedRequest: GetPullRequestCommentsRequest | undefined - const sut = new AccessTokenRefreshingGitHubClient({ - async getAccessToken() { - return "foo" - }, - async refreshAccessToken() { - return "foo" - } - }, { - async graphql() { - return {} - }, - async getRepositoryContent() { - return { downloadURL: "https://example.com" } - }, - async getPullRequestComments(request: GetPullRequestCommentsRequest) { - forwardedRequest = request - return [] - }, - async addCommentToPullRequest() {}, - async getOrganizationMembershipStatus() { - return { state: "active" } - } - }) - const request: GetPullRequestCommentsRequest = { - appInstallationId: 1234, - repositoryOwner: "foo", - repositoryName: "bar", - pullRequestNumber: 42 - } - await sut.getPullRequestComments(request) - expect(forwardedRequest).toEqual(request) -}) - -test("It forwards a request to add a comment to a pull request", async () => { - let forwardedRequest: AddCommentToPullRequestRequest | undefined - const sut = new AccessTokenRefreshingGitHubClient({ - async getAccessToken() { - return "foo" - }, - async refreshAccessToken() { - return "foo" - } - }, { - async graphql() { - return {} - }, - async getRepositoryContent() { - return { downloadURL: "https://example.com" } - }, - async getPullRequestComments() { - return [] - }, - async addCommentToPullRequest(request: AddCommentToPullRequestRequest) { - forwardedRequest = request - }, - async getOrganizationMembershipStatus() { - return { state: "active" } - } - }) - const request: AddCommentToPullRequestRequest = { - appInstallationId: 1234, - repositoryOwner: "foo", - repositoryName: "bar", - pullRequestNumber: 42, - body: "Hello world!" - } - await sut.addCommentToPullRequest(request) - expect(forwardedRequest).toEqual(request) -}) - -test("It retries with a refreshed access token when receiving HTTP 401", async () => { - let didRefreshAccessToken = false - let didRespondWithAuthorizationError = false - const sut = new AccessTokenRefreshingGitHubClient({ - async getAccessToken() { - return "foo" - }, - async refreshAccessToken() { - didRefreshAccessToken = true - return "foo" - } - }, { - async graphql() { - if (!didRespondWithAuthorizationError) { - didRespondWithAuthorizationError = true - throw { status: 401 } - } - return [] - }, - async getRepositoryContent() { - return { downloadURL: "https://example.com" } - }, - async getPullRequestComments() { - return [] - }, - async addCommentToPullRequest() {}, - async getOrganizationMembershipStatus() { - return { state: "active" } - } - }) - const request: GraphQLQueryRequest = { - query: "foo", - variables: { hello: "world" } - } - await sut.graphql(request) - expect(didRefreshAccessToken).toBeTruthy() -}) - -test("It only retries a request once when receiving HTTP 401", async () => { - let requestCount = 0 - const sut = new AccessTokenRefreshingGitHubClient({ - async getAccessToken() { - return "foo" - }, - async refreshAccessToken() { - return "foo" - } - }, { - async graphql() { - requestCount += 1 - throw { status: 401 } - }, - async getRepositoryContent() { - return { downloadURL: "https://example.com" } - }, - async getPullRequestComments() { - return [] - }, - async addCommentToPullRequest() {}, - async getOrganizationMembershipStatus() { - return { state: "active" } - } - }) - const request: GraphQLQueryRequest = { - query: "foo", - variables: { hello: "world" } - } - // When receiving the second HTTP 401 the call should fail. - await expect(sut.graphql(request)).rejects.toEqual({ status: 401 }) - // We expect two requests: - // 1. The initial request that failed after which we refreshed the access token. - // 2. The second request that failed after which we gave up. - expect(requestCount).toEqual(2) -}) - -test("It does not refresh an access token when the initial request was successful", async () => { - let didRefreshAccesstoken = false - const sut = new AccessTokenRefreshingGitHubClient({ - async getAccessToken() { - return "foo" - }, - async refreshAccessToken() { - return "foo" - } - }, { - async graphql() { - return [] - }, - async getRepositoryContent() { - return { downloadURL: "https://example.com" } - }, - async getPullRequestComments() { - return [] - }, - async addCommentToPullRequest() {}, - async getOrganizationMembershipStatus() { - return { state: "active" } - } - }) - const request: GraphQLQueryRequest = { - query: "foo", - variables: { hello: "world" } - } - await sut.graphql(request) - expect(didRefreshAccesstoken).toBeFalsy() -}) diff --git a/__test__/common/github/OAuthTokenRefreshingGitHubClient.test.ts b/__test__/common/github/OAuthTokenRefreshingGitHubClient.test.ts new file mode 100644 index 00000000..7e353354 --- /dev/null +++ b/__test__/common/github/OAuthTokenRefreshingGitHubClient.test.ts @@ -0,0 +1,317 @@ +import { OAuthTokenRefreshingGitHubClient } from "@/common" +import { + GraphQLQueryRequest, + GetRepositoryContentRequest, + GetPullRequestCommentsRequest, + AddCommentToPullRequestRequest +} from "@/common/github/IGitHubClient" + +test("It forwards a GraphQL request", async () => { + let forwardedRequest: GraphQLQueryRequest | undefined + const sut = new OAuthTokenRefreshingGitHubClient({ + oauthTokenDataSource: { + async getOAuthToken() { + return { accessToken: "foo", refreshToken: "bar" } + } + }, + oauthTokenRefresher: { + async refreshOAuthToken(_refreshToken) { + return { + accessToken: "newAccessToken", + refreshToken: "newRefreshToken" + } + } + }, + gitHubClient: { + async graphql(request: GraphQLQueryRequest) { + forwardedRequest = request + return {} + }, + async getRepositoryContent() { + return { downloadURL: "https://example.com" } + }, + async getPullRequestFiles() { + return [] + }, + async getPullRequestComments() { + return [] + }, + async updatePullRequestComment() {}, + async addCommentToPullRequest() {} + } + }) + const request: GraphQLQueryRequest = { + query: "foo", + variables: { hello: "world" } + } + await sut.graphql(request) + expect(forwardedRequest).toEqual(request) +}) + +test("It forwards a request to get the repository content", async () => { + let forwardedRequest: GetRepositoryContentRequest | undefined + const sut = new OAuthTokenRefreshingGitHubClient({ + oauthTokenDataSource: { + async getOAuthToken() { + return { accessToken: "foo", refreshToken: "bar" } + } + }, + oauthTokenRefresher: { + async refreshOAuthToken(_refreshToken) { + return { + accessToken: "newAccessToken", + refreshToken: "newRefreshToken" + } + } + }, + gitHubClient: { + async graphql() { + return {} + }, + async getRepositoryContent(request: GetRepositoryContentRequest) { + forwardedRequest = request + return { downloadURL: "https://example.com" } + }, + async getPullRequestFiles() { + return [] + }, + async getPullRequestComments() { + return [] + }, + async addCommentToPullRequest() {}, + async updatePullRequestComment() {} + } + }) + const request: GetRepositoryContentRequest = { + repositoryOwner: "foo", + repositoryName: "bar", + path: "hello", + ref: "world" + } + await sut.getRepositoryContent(request) + expect(forwardedRequest).toEqual(request) +}) + +test("It forwards a request to get comments to a pull request", async () => { + let forwardedRequest: GetPullRequestCommentsRequest | undefined + const sut = new OAuthTokenRefreshingGitHubClient({ + oauthTokenDataSource: { + async getOAuthToken() { + return { accessToken: "foo", refreshToken: "bar" } + } + }, + oauthTokenRefresher: { + async refreshOAuthToken(_refreshToken) { + return { + accessToken: "newAccessToken", + refreshToken: "newRefreshToken" + } + } + }, + gitHubClient: { + async graphql() { + return {} + }, + async getRepositoryContent() { + return { downloadURL: "https://example.com" } + }, + async getPullRequestFiles() { + return [] + }, + async getPullRequestComments(request: GetPullRequestCommentsRequest) { + forwardedRequest = request + return [] + }, + async addCommentToPullRequest() {}, + async updatePullRequestComment() {} + } + }) + const request: GetPullRequestCommentsRequest = { + appInstallationId: 1234, + repositoryOwner: "foo", + repositoryName: "bar", + pullRequestNumber: 42 + } + await sut.getPullRequestComments(request) + expect(forwardedRequest).toEqual(request) +}) + +test("It forwards a request to add a comment to a pull request", async () => { + let forwardedRequest: AddCommentToPullRequestRequest | undefined + const sut = new OAuthTokenRefreshingGitHubClient({ + oauthTokenDataSource: { + async getOAuthToken() { + return { accessToken: "foo", refreshToken: "bar" } + } + }, + oauthTokenRefresher: { + async refreshOAuthToken(_refreshToken) { + return { + accessToken: "newAccessToken", + refreshToken: "newRefreshToken" + } + } + }, + gitHubClient: { + async graphql() { + return {} + }, + async getRepositoryContent() { + return { downloadURL: "https://example.com" } + }, + async getPullRequestFiles() { + return [] + }, + async getPullRequestComments() { + return [] + }, + async addCommentToPullRequest(request: AddCommentToPullRequestRequest) { + forwardedRequest = request + }, + async updatePullRequestComment() {} + } + }) + const request: AddCommentToPullRequestRequest = { + appInstallationId: 1234, + repositoryOwner: "foo", + repositoryName: "bar", + pullRequestNumber: 42, + body: "Hello world!" + } + await sut.addCommentToPullRequest(request) + expect(forwardedRequest).toEqual(request) +}) + +test("It retries with a refreshed OAuth token when receiving HTTP 401", async () => { + let didRefreshOAuthToken = false + let didRespondWithAuthorizationError = false + const sut = new OAuthTokenRefreshingGitHubClient({ + oauthTokenDataSource: { + async getOAuthToken() { + return { accessToken: "foo", refreshToken: "bar" } + } + }, + oauthTokenRefresher: { + async refreshOAuthToken(_refreshToken) { + didRefreshOAuthToken = true + return { + accessToken: "newAccessToken", + refreshToken: "newRefreshToken" + } + } + }, + gitHubClient: { + async graphql() { + if (!didRespondWithAuthorizationError) { + didRespondWithAuthorizationError = true + throw { status: 401 } + } + return [] + }, + async getRepositoryContent() { + return { downloadURL: "https://example.com" } + }, + async getPullRequestFiles() { + return [] + }, + async getPullRequestComments() { + return [] + }, + async updatePullRequestComment() {}, + async addCommentToPullRequest() {} + } + }) + const request: GraphQLQueryRequest = { + query: "foo", + variables: { hello: "world" } + } + await sut.graphql(request) + expect(didRefreshOAuthToken).toBeTruthy() +}) + +test("It only retries a request once when receiving HTTP 401", async () => { + let requestCount = 0 + const sut = new OAuthTokenRefreshingGitHubClient({ + oauthTokenDataSource: { + async getOAuthToken() { + return { accessToken: "foo", refreshToken: "bar" } + } + }, + oauthTokenRefresher: { + async refreshOAuthToken(_refreshToken) { + return { + accessToken: "newAccessToken", + refreshToken: "newRefreshToken" + } + } + }, + gitHubClient: { + async graphql() { + requestCount += 1 + throw { status: 401 } + }, + async getRepositoryContent() { + return { downloadURL: "https://example.com" } + }, + async getPullRequestFiles() { + return [] + }, + async getPullRequestComments() { + return [] + }, + async updatePullRequestComment() {}, + async addCommentToPullRequest() {} + } + }) + const request: GraphQLQueryRequest = { + query: "foo", + variables: { hello: "world" } + } + // When receiving the second HTTP 401 the call should fail. + await expect(sut.graphql(request)).rejects.toEqual({ status: 401 }) + // We expect two requests: + // 1. The initial request that failed after which we refreshed the OAuth token. + // 2. The second request that failed after which we gave up. + expect(requestCount).toEqual(2) +}) + +test("It does not refresh an OAuth token when the initial request was successful", async () => { + let didRefreshOAuthToken = false + const sut = new OAuthTokenRefreshingGitHubClient({ + oauthTokenDataSource: { + async getOAuthToken() { + return { accessToken: "foo", refreshToken: "bar" } + } + }, + oauthTokenRefresher: { + async refreshOAuthToken(_refreshToken) { + return { + accessToken: "newAccessToken", + refreshToken: "newRefreshToken" + } + } + }, + gitHubClient: { + async graphql() { + return [] + }, + async getRepositoryContent() { + return { downloadURL: "https://example.com" } + }, + async getPullRequestFiles() { + return [] + }, + async getPullRequestComments() { + return [] + }, + async addCommentToPullRequest() {}, + async updatePullRequestComment() {} + } + }) + const request: GraphQLQueryRequest = { + query: "foo", + variables: { hello: "world" } + } + await sut.graphql(request) + expect(didRefreshOAuthToken).toBeFalsy() +}) diff --git a/__test__/common/userData/KeyValueUserDataRepository.test.ts b/__test__/common/userData/KeyValueUserDataRepository.test.ts index 3dc7cb04..9e73391f 100644 --- a/__test__/common/userData/KeyValueUserDataRepository.test.ts +++ b/__test__/common/userData/KeyValueUserDataRepository.test.ts @@ -1,16 +1,19 @@ -import { KeyValueUserDataRepository } from "../../../src/common" +import { KeyValueUserDataRepository } from "@/common" test("It reads the expected key", async () => { let readKey: string | undefined const sut = new KeyValueUserDataRepository({ - async get(key) { - readKey = key - return "" + store: { + async get(key) { + readKey = key + return "" + }, + async set() {}, + async setExpiring() {}, + async delete() {} }, - async set() {}, - async setExpiring() {}, - async delete() {} - }, "foo") + baseKey: "foo" + }) await sut.get("123") expect(readKey).toBe("foo[123]") }) @@ -18,15 +21,18 @@ test("It reads the expected key", async () => { test("It stores values under the expected key", async () => { let storedKey: string | undefined const sut = new KeyValueUserDataRepository({ - async get() { - return "" - }, - async set(key) { - storedKey = key - }, - async setExpiring() {}, - async delete() {} - }, "foo") + store: { + async get() { + return "" + }, + async set(key) { + storedKey = key + }, + async setExpiring() {}, + async delete() {} + }, + baseKey: "foo" + }) await sut.set("123", "bar") expect(storedKey).toBe("foo[123]") }) @@ -35,16 +41,19 @@ test("It stores values under the expected key with expected time to live", async let storedKey: string | undefined let storedTimeToLive: number | undefined const sut = new KeyValueUserDataRepository({ - async get() { - return "" - }, - async set() {}, - async setExpiring(key, _value, timeToLive) { - storedKey = key - storedTimeToLive = timeToLive + store: { + async get() { + return "" + }, + async set() {}, + async setExpiring(key, _value, timeToLive) { + storedKey = key + storedTimeToLive = timeToLive + }, + async delete() {} }, - async delete() {} - }, "foo") + baseKey: "foo" + }) await sut.setExpiring("123", "bar", 24 * 3600) expect(storedKey).toBe("foo[123]") expect(storedTimeToLive).toBe(24 * 3600) @@ -53,15 +62,18 @@ test("It stores values under the expected key with expected time to live", async test("It deletes the expected key", async () => { let deletedKey: string | undefined const sut = new KeyValueUserDataRepository({ - async get() { - return "" + store: { + async get() { + return "" + }, + async set() {}, + async setExpiring() {}, + async delete(key) { + deletedKey = key + } }, - async set() {}, - async setExpiring() {}, - async delete(key) { - deletedKey = key - } - }, "foo") + baseKey: "foo" + }) await sut.delete("123") expect(deletedKey).toBe("foo[123]") }) diff --git a/__test__/common/utils/ZodJSONCoder.test.ts b/__test__/common/utils/ZodJSONCoder.test.ts index 6335bbd9..21364cca 100644 --- a/__test__/common/utils/ZodJSONCoder.test.ts +++ b/__test__/common/utils/ZodJSONCoder.test.ts @@ -1,5 +1,5 @@ import { z } from "zod" -import { ZodJSONCoder } from "../../../src/common" +import { ZodJSONCoder } from "@/common" const SampleAuthTokenSchema = z.object({ accessToken: z.string(), diff --git a/__test__/common/utils/saneParseInt.test.ts b/__test__/common/utils/saneParseInt.test.ts new file mode 100644 index 00000000..ebd217d4 --- /dev/null +++ b/__test__/common/utils/saneParseInt.test.ts @@ -0,0 +1,27 @@ +import saneParseInt from "@/common/utils/saneParseInt" + +test("It parses an integer", async () => { + // @ts-ignore + const val = saneParseInt(42 as string) + expect(val).toBe(42) +}) + +test("It parses a string representing an integer", async () => { + const val = saneParseInt("42") + expect(val).toBe(42) +}) + +test("It fails parsing a string representing a float", async () => { + const val = saneParseInt("4.2") + expect(val).toBeUndefined() +}) + +test("It fails parsing a string", async () => { + const val = saneParseInt("foo") + expect(val).toBeUndefined() +}) + +test("It fails parsing a UUID", async () => { + const val = saneParseInt("30729470-25e4-4a50-8a0a-106fc67948f1") + expect(val).toBeUndefined() +}) diff --git a/__test__/hooks/ExistingCommentCheckingPullRequestEventHandler.test.ts b/__test__/hooks/ExistingCommentCheckingPullRequestEventHandler.test.ts deleted file mode 100644 index ff56d18f..00000000 --- a/__test__/hooks/ExistingCommentCheckingPullRequestEventHandler.test.ts +++ /dev/null @@ -1,119 +0,0 @@ -import { ExistingCommentCheckingPullRequestEventHandler } from "../../src/features/hooks/domain" - -test("It fetches comments from the repository", async () => { - let didFetchComments = false - const sut = new ExistingCommentCheckingPullRequestEventHandler({ - async pullRequestOpened() {} - }, { - async getComments() { - didFetchComments = true - return [] - }, - async addComment() {} - }, "https://docs.shapetools.io") - await sut.pullRequestOpened({ - appInstallationId: 42, - repositoryOwner: "shapehq", - repositoryName: "foo", - ref: "bar", - pullRequestNumber: 1337 - }) - expect(didFetchComments).toBeTruthy() -}) - -test("It does calls decorated event handler if a comment does not exist in the repository", async () => { - let didCallEventHandler = false - const sut = new ExistingCommentCheckingPullRequestEventHandler({ - async pullRequestOpened() { - didCallEventHandler = true - } - }, { - async getComments() { - return [] - }, - async addComment() {} - }, "https://docs.shapetools.io") - await sut.pullRequestOpened({ - appInstallationId: 42, - repositoryOwner: "shapehq", - repositoryName: "foo", - ref: "bar", - pullRequestNumber: 1337 - }) - expect(didCallEventHandler).toBeTruthy() -}) - -test("It does not call the event handler if a comment already exists in the repository", async () => { - let didCallEventHandler = false - const sut = new ExistingCommentCheckingPullRequestEventHandler({ - async pullRequestOpened() { - didCallEventHandler = true - } - }, { - async getComments() { - return [{ - body: "The documentation is available on https://docs.shapetools.io", - isFromBot: true - }] - }, - async addComment() {} - }, "https://docs.shapetools.io") - await sut.pullRequestOpened({ - appInstallationId: 42, - repositoryOwner: "shapehq", - repositoryName: "foo", - ref: "bar", - pullRequestNumber: 1337 - }) - expect(didCallEventHandler).toBeFalsy() -}) - -test("It calls the event handler if a comment exists matching the needle domain but that comment is not from a bot", async () => { - let didCallEventHandler = false - const sut = new ExistingCommentCheckingPullRequestEventHandler({ - async pullRequestOpened() { - didCallEventHandler = true - } - }, { - async getComments() { - return [{ - body: "The documentation is available on https://docs.shapetools.io", - isFromBot: false - }] - }, - async addComment() {} - }, "https://docs.shapetools.io") - await sut.pullRequestOpened({ - appInstallationId: 42, - repositoryOwner: "shapehq", - repositoryName: "foo", - ref: "bar", - pullRequestNumber: 1337 - }) - expect(didCallEventHandler).toBeTruthy() -}) - -test("It calls the event handler if the repository contains a comment from a bot but that comment does not contain the needle domain", async () => { - let didCallEventHandler = false - const sut = new ExistingCommentCheckingPullRequestEventHandler({ - async pullRequestOpened() { - didCallEventHandler = true - } - }, { - async getComments() { - return [{ - body: "Hello world!", - isFromBot: true - }] - }, - async addComment() {} - }, "https://docs.shapetools.io") - await sut.pullRequestOpened({ - appInstallationId: 42, - repositoryOwner: "shapehq", - repositoryName: "foo", - ref: "bar", - pullRequestNumber: 1337 - }) - expect(didCallEventHandler).toBeTruthy() -}) diff --git a/__test__/hooks/FilteringPullRequestEventHandler.test.ts b/__test__/hooks/FilteringPullRequestEventHandler.test.ts new file mode 100644 index 00000000..2c1e8045 --- /dev/null +++ b/__test__/hooks/FilteringPullRequestEventHandler.test.ts @@ -0,0 +1,157 @@ +import { FilteringPullRequestEventHandler } from "../../src/features/hooks/domain" + +test("It calls pullRequestOpened(_:) when event is included", async () => { + let didCall = false + const sut = new FilteringPullRequestEventHandler({ + filter: { + includeEvent(_event) { + return true + } + }, + eventHandler: { + async pullRequestOpened(_event) { + didCall = true + }, + async pullRequestReopened(_event) {}, + async pullRequestSynchronized(_event) {} + } + }) + await sut.pullRequestOpened({ + appInstallationId: 1234, + pullRequestNumber: 42, + repositoryName: "demo-openapi", + repositoryOwner: "acme", + ref: "main" + }) + expect(didCall).toBeTruthy() +}) + +test("It calls pullRequestReopened(_:) when event is included", async () => { + let didCall = false + const sut = new FilteringPullRequestEventHandler({ + filter: { + includeEvent(_event) { + return true + } + }, + eventHandler: { + async pullRequestOpened(_event) {}, + async pullRequestReopened(_event) { + didCall = true + }, + async pullRequestSynchronized(_event) {} + } + }) + await sut.pullRequestReopened({ + appInstallationId: 1234, + pullRequestNumber: 42, + repositoryName: "demo-openapi", + repositoryOwner: "acme", + ref: "main" + }) + expect(didCall).toBeTruthy() +}) + +test("It calls pullRequestSynchronized(_:) when event is included", async () => { + let didCall = false + const sut = new FilteringPullRequestEventHandler({ + filter: { + includeEvent(_event) { + return true + } + }, + eventHandler: { + async pullRequestOpened(_event) {}, + async pullRequestReopened(_event) {}, + async pullRequestSynchronized(_event) { + didCall = true + } + } + }) + await sut.pullRequestSynchronized({ + appInstallationId: 1234, + pullRequestNumber: 42, + repositoryName: "demo-openapi", + repositoryOwner: "acme", + ref: "main" + }) + expect(didCall).toBeTruthy() +}) + +test("It skips calling pullRequestOpened(_:) when event is not included", async () => { + let didCall = false + const sut = new FilteringPullRequestEventHandler({ + filter: { + includeEvent(_event) { + return false + } + }, + eventHandler: { + async pullRequestOpened(_event) { + didCall = true + }, + async pullRequestReopened(_event) {}, + async pullRequestSynchronized(_event) {} + } + }) + await sut.pullRequestOpened({ + appInstallationId: 1234, + pullRequestNumber: 42, + repositoryName: "demo-openapi", + repositoryOwner: "acme", + ref: "main" + }) + expect(didCall).toBeFalsy() +}) + +test("It skips calling pullRequestReopened(_:) when event is not included", async () => { + let didCall = false + const sut = new FilteringPullRequestEventHandler({ + filter: { + includeEvent(_event) { + return false + } + }, + eventHandler: { + async pullRequestOpened(_event) {}, + async pullRequestReopened(_event) { + didCall = true + }, + async pullRequestSynchronized(_event) {} + } + }) + await sut.pullRequestReopened({ + appInstallationId: 1234, + pullRequestNumber: 42, + repositoryName: "demo-openapi", + repositoryOwner: "acme", + ref: "main" + }) + expect(didCall).toBeFalsy() +}) + +test("It skips calling pullRequestSynchronized(_:) when event is not included", async () => { + let didCall = false + const sut = new FilteringPullRequestEventHandler({ + filter: { + includeEvent(_event) { + return false + } + }, + eventHandler: { + async pullRequestOpened(_event) {}, + async pullRequestReopened(_event) {}, + async pullRequestSynchronized(_event) { + didCall = true + } + } + }) + await sut.pullRequestSynchronized({ + appInstallationId: 1234, + pullRequestNumber: 42, + repositoryName: "demo-openapi", + repositoryOwner: "acme", + ref: "main" + }) + expect(didCall).toBeFalsy() +}) \ No newline at end of file diff --git a/__test__/hooks/GitHubCommentFactory.test.ts b/__test__/hooks/GitHubCommentFactory.test.ts deleted file mode 100644 index 4857c717..00000000 --- a/__test__/hooks/GitHubCommentFactory.test.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { GitHubCommentFactory } from "../../src/features/hooks/domain" - -test("It includes a link to the documentation", async () => { - const text = GitHubCommentFactory.makeDocumentationPreviewReadyComment( - "https://docs.shapetools.io/foo/bar" - ) - expect(text).toContain("https://docs.shapetools.io/foo/bar") -}) \ No newline at end of file diff --git a/__test__/hooks/PostCommentPullRequestEventHandler.test.ts b/__test__/hooks/PostCommentPullRequestEventHandler.test.ts index 82fb91f4..46f7ee55 100644 --- a/__test__/hooks/PostCommentPullRequestEventHandler.test.ts +++ b/__test__/hooks/PostCommentPullRequestEventHandler.test.ts @@ -1,61 +1,58 @@ import { PostCommentPullRequestEventHandler } from "../../src/features/hooks/domain" -test("It adds a comment to the repository", async () => { - let didAddComment = false +test("It comments when opening a pull request", async () => { + let didComment = false const sut = new PostCommentPullRequestEventHandler({ - async getComments() { - return [] - }, - async addComment() { - didAddComment = true + pullRequestCommenter: { + async commentPullRequest(_request) { + didComment = true + } } - }, "https://docs.shapetools.io") + }) await sut.pullRequestOpened({ - appInstallationId: 42, - repositoryOwner: "shapehq", - repositoryName: "foo", - ref: "bar", - pullRequestNumber: 1337 + appInstallationId: 1234, + pullRequestNumber: 42, + repositoryOwner: "acme", + repositoryName: "demo-openapi", + ref: "main" }) - expect(didAddComment).toBeTruthy() + expect(didComment).toBeTruthy() }) -test("It adds a comment containing a link to the documentation", async () => { - let commentBody: string | undefined +test("It comments when reopening a pull request", async () => { + let didComment = false const sut = new PostCommentPullRequestEventHandler({ - async getComments() { - return [] - }, - async addComment(operation) { - commentBody = operation.body + pullRequestCommenter: { + async commentPullRequest(_request) { + didComment = true + } } - }, "https://docs.shapetools.io") - await sut.pullRequestOpened({ - appInstallationId: 42, - repositoryOwner: "shapehq", - repositoryName: "foo", - ref: "bar", - pullRequestNumber: 1337 }) - expect(commentBody).toContain("https://docs.shapetools.io/foo/bar") + await sut.pullRequestReopened({ + appInstallationId: 1234, + pullRequestNumber: 42, + repositoryOwner: "acme", + repositoryName: "demo-openapi", + ref: "main" + }) + expect(didComment).toBeTruthy() }) -test("It removes the \"openapi\" suffix of the repository name", async () => { - let commentBody: string | undefined +test("It comments when synchronizing a pull request", async () => { + let didComment = false const sut = new PostCommentPullRequestEventHandler({ - async getComments() { - return [] - }, - async addComment(operation) { - commentBody = operation.body + pullRequestCommenter: { + async commentPullRequest(_request) { + didComment = true + } } - }, "https://docs.shapetools.io") - await sut.pullRequestOpened({ - appInstallationId: 42, - repositoryOwner: "shapehq", - repositoryName: "foo-openapi", - ref: "bar", - pullRequestNumber: 1337 }) - expect(commentBody).toContain("https://docs.shapetools.io/foo/bar") + await sut.pullRequestSynchronized({ + appInstallationId: 1234, + pullRequestNumber: 42, + repositoryOwner: "acme", + repositoryName: "demo-openapi", + ref: "main" + }) + expect(didComment).toBeTruthy() }) diff --git a/__test__/hooks/PullRequestCommenter.test.ts b/__test__/hooks/PullRequestCommenter.test.ts new file mode 100644 index 00000000..0091b8d4 --- /dev/null +++ b/__test__/hooks/PullRequestCommenter.test.ts @@ -0,0 +1,369 @@ +import { PullRequestCommenter } from "../../src/features/hooks/domain" + +test("It adds comment when none exist", async () => { + let didAddComment = false + const sut = new PullRequestCommenter({ + domain: "https://example.com", + siteName: "Demo Docs", + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + gitHubAppId: "appid1234", + gitHubClient: { + async graphql() { + return {} + }, + async getRepositoryContent() { + return { downloadURL: "https://example.com" } + }, + async getPullRequestFiles() { + return [{ + filename: "openapi.yml", + status: "changed" + }] + }, + async getPullRequestComments() { + return [] + }, + async addCommentToPullRequest() { + didAddComment = true + }, + async updatePullRequestComment() {} + } + }) + await sut.commentPullRequest({ + appInstallationId: 1234, + pullRequestNumber: 42, + repositoryOwner: "acme", + repositoryName: "demo-openapi", + ref: "main" + }) + expect(didAddComment).toBeTruthy() +}) + +test("It adds comment containing list of changed files", async () => { + let didAddComment = false + let commentBody: string | undefined + const sut = new PullRequestCommenter({ + domain: "https://example.com", + siteName: "Demo Docs", + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + gitHubAppId: "appid1234", + gitHubClient: { + async graphql() { + return {} + }, + async getRepositoryContent() { + return { downloadURL: "https://example.com" } + }, + async getPullRequestFiles() { + return [{ + filename: "foo.yml", + status: "changed" + }, { + filename: "bar.yml", + status: "changed" + }] + }, + async getPullRequestComments() { + return [] + }, + async addCommentToPullRequest(request) { + didAddComment = true + commentBody = request.body + }, + async updatePullRequestComment() {} + } + }) + await sut.commentPullRequest({ + appInstallationId: 1234, + pullRequestNumber: 42, + repositoryOwner: "acme", + repositoryName: "demo-openapi", + ref: "main" + }) + expect(didAddComment).toBeTruthy() + expect(commentBody).toContain("") + expect(commentBody).toContain("foo.yml") + expect(commentBody).toContain("bar.yml") +}) + +test("It skips adding comment when no YAML files were found in the PR", async () => { + let didAddComment = false + const sut = new PullRequestCommenter({ + domain: "https://example.com", + siteName: "Demo Docs", + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + gitHubAppId: "appid1234", + gitHubClient: { + async graphql() { + return {} + }, + async getRepositoryContent() { + return { downloadURL: "https://example.com" } + }, + async getPullRequestFiles() { + return [{ + filename: "dummy.swift", + status: "changed" + }] + }, + async getPullRequestComments() { + return [] + }, + async addCommentToPullRequest() { + didAddComment = true + }, + async updatePullRequestComment() {} + } + }) + await sut.commentPullRequest({ + appInstallationId: 1234, + pullRequestNumber: 42, + repositoryOwner: "acme", + repositoryName: "demo-openapi", + ref: "main" + }) + expect(didAddComment).toBeFalsy() +}) + +test("It updates comment when one already exists", async () => { + let didUpdateComment = false + const sut = new PullRequestCommenter({ + domain: "https://example.com", + siteName: "Demo Docs", + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + gitHubAppId: "appid1234", + gitHubClient: { + async graphql() { + return {} + }, + async getRepositoryContent() { + return { downloadURL: "https://example.com" } + }, + async getPullRequestFiles() { + return [{ + filename: "openapi.yml", + status: "changed" + }] + }, + async getPullRequestComments() { + return [{ + id: 1, + body: "Hello world!", + isFromBot: true, + gitHubApp: { + id: "appid1234" + } + }] + }, + async addCommentToPullRequest() {}, + async updatePullRequestComment() { + didUpdateComment = true + } + } + }) + await sut.commentPullRequest({ + appInstallationId: 1234, + pullRequestNumber: 42, + repositoryOwner: "acme", + repositoryName: "demo-openapi", + ref: "main" + }) + expect(didUpdateComment).toBeTruthy() +}) + +test("It skips updating comment when the body has not changed", async () => { + let addedCommentBody: string | undefined + let didUpdateComment = false + const sut = new PullRequestCommenter({ + domain: "https://example.com", + siteName: "Demo Docs", + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + gitHubAppId: "appid1234", + gitHubClient: { + async graphql() { + return {} + }, + async getRepositoryContent() { + return { downloadURL: "https://example.com" } + }, + async getPullRequestFiles() { + return [{ + filename: "openapi.yml", + status: "changed" + }] + }, + async getPullRequestComments() { + if (!addedCommentBody) { + return [] + } + return [{ + id: 1, + body: addedCommentBody, + isFromBot: true, + gitHubApp: { + id: "appid1234" + } + }] + }, + async addCommentToPullRequest(request) { + addedCommentBody = request.body + }, + async updatePullRequestComment() { + didUpdateComment = true + } + } + }) + // Add a comment. + await sut.commentPullRequest({ + appInstallationId: 1234, + pullRequestNumber: 42, + repositoryOwner: "acme", + repositoryName: "demo-openapi", + ref: "main" + }) + // Attempt to update a comment. This is skipped because the body has not changed. + await sut.commentPullRequest({ + appInstallationId: 1234, + pullRequestNumber: 42, + repositoryOwner: "acme", + repositoryName: "demo-openapi", + ref: "main" + }) + expect(addedCommentBody).not.toBeUndefined() + expect(didUpdateComment).toBeFalsy() +}) + +test("It updates comment to remove file list when all relevant file changes were removed from the PR", async () => { + let didAddComment = false + let didUpdateComment = false + let addedCommentBody: string | undefined + let updatedCommentBody: string | undefined + const sut = new PullRequestCommenter({ + domain: "https://example.com", + siteName: "Demo Docs", + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + gitHubAppId: "appid1234", + gitHubClient: { + async graphql() { + return {} + }, + async getRepositoryContent() { + return { downloadURL: "https://example.com" } + }, + async getPullRequestFiles() { + if (didAddComment) { + // Simulate relevant files removed. + return [] + } else { + return [{ + filename: "openapi.yml", + status: "changed" + }] + } + }, + async getPullRequestComments() { + if (!didAddComment) { + return [] + } + return [{ + id: 1, + body: "Hello world", + isFromBot: true, + gitHubApp: { + id: "appid1234" + } + }] + }, + async addCommentToPullRequest(request) { + didAddComment = true + addedCommentBody = request.body + }, + async updatePullRequestComment(request) { + didUpdateComment = true + updatedCommentBody = request.body + } + } + }) + // Add a comment. + await sut.commentPullRequest({ + appInstallationId: 1234, + pullRequestNumber: 42, + repositoryOwner: "acme", + repositoryName: "demo-openapi", + ref: "main" + }) + // Attempt to update a comment. This is skipped because the body has not changed. + await sut.commentPullRequest({ + appInstallationId: 1234, + pullRequestNumber: 42, + repositoryOwner: "acme", + repositoryName: "demo-openapi", + ref: "main" + }) + expect(didAddComment).toBeTruthy() + expect(didUpdateComment).toBeTruthy() + expect(addedCommentBody).toContain("
") + expect(addedCommentBody).toContain("openapi.yml") + expect(updatedCommentBody).not.toContain("
") + expect(updatedCommentBody).not.toContain("openapi.yml") +}) + +test("It adds comment without file table if only project configuration was edited", async () => { + let didAddComment = false + let commentBody: string | undefined + const sut = new PullRequestCommenter({ + domain: "https://example.com", + siteName: "Demo Docs", + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + gitHubAppId: "appid1234", + gitHubClient: { + async graphql() { + return {} + }, + async getRepositoryContent() { + return { downloadURL: "https://example.com" } + }, + async getPullRequestFiles() { + return [{ + filename: ".demo-docs.yml", + status: "changed" + }] + }, + async getPullRequestComments() { + if (!didAddComment) { + return [] + } + return [{ + id: 1, + body: "Hello world", + isFromBot: true, + gitHubApp: { + id: "appid1234" + } + }] + }, + async addCommentToPullRequest(request) { + didAddComment = true + commentBody = request.body + }, + async updatePullRequestComment() {} + } + }) + await sut.commentPullRequest({ + appInstallationId: 1234, + pullRequestNumber: 42, + repositoryOwner: "acme", + repositoryName: "demo-openapi", + ref: "main" + }) + expect(didAddComment).toBeTruthy() + expect(commentBody).not.toContain("
") + expect(commentBody).not.toContain(".demo-docs.yml") +}) diff --git a/__test__/hooks/RepositoryNameCheckingPullRequestEventHandler.test.ts b/__test__/hooks/RepositoryNameCheckingPullRequestEventHandler.test.ts deleted file mode 100644 index bfb42db3..00000000 --- a/__test__/hooks/RepositoryNameCheckingPullRequestEventHandler.test.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { RepositoryNameCheckingPullRequestEventHandler } from "../../src/features/hooks/domain" - -test("It does not call event handler when repository name does not have \"-openapi\" suffix", async () => { - let didCallEventHandler = false - const sut = new RepositoryNameCheckingPullRequestEventHandler({ - async pullRequestOpened() { - didCallEventHandler = true - } - }, [], []) - await sut.pullRequestOpened({ - appInstallationId: 42, - repositoryOwner: "shapehq", - repositoryName: "foo", - ref: "bar", - pullRequestNumber: 1337 - }) - expect(didCallEventHandler).toBeFalsy() -}) - -test("It does not call event handler when repository name contains \"-openapi\" but it is not the last part of the repository name", async () => { - let didCallEventHandler = false - const sut = new RepositoryNameCheckingPullRequestEventHandler({ - async pullRequestOpened() { - didCallEventHandler = true - } - }, [], []) - await sut.pullRequestOpened({ - appInstallationId: 42, - repositoryOwner: "shapehq", - repositoryName: "foo-openapi-bar", - ref: "bar", - pullRequestNumber: 1337 - }) - expect(didCallEventHandler).toBeFalsy() -}) - -test("It calls event handler when no repositories have been allowed or disallowed", async () => { - let didCallEventHandler = false - const sut = new RepositoryNameCheckingPullRequestEventHandler({ - async pullRequestOpened() { - didCallEventHandler = true - } - }, [], []) - await sut.pullRequestOpened({ - appInstallationId: 42, - repositoryOwner: "shapehq", - repositoryName: "foo-openapi", - ref: "bar", - pullRequestNumber: 1337 - }) - expect(didCallEventHandler).toBeTruthy() -}) - -test("It does not call event handler for repository that is not on the allowlist", async () => { - let didCallEventHandler = false - const sut = new RepositoryNameCheckingPullRequestEventHandler({ - async pullRequestOpened() { - didCallEventHandler = true - } - }, ["example-openapi"], []) - await sut.pullRequestOpened({ - appInstallationId: 42, - repositoryOwner: "shapehq", - repositoryName: "foo", - ref: "bar", - pullRequestNumber: 1337 - }) - expect(didCallEventHandler).toBeFalsy() -}) - -test("It does not call event handler for repository that is on the disallowlist", async () => { - let didCallEventHandler = false - const sut = new RepositoryNameCheckingPullRequestEventHandler({ - async pullRequestOpened() { - didCallEventHandler = true - } - }, [], ["example-openapi"]) - await sut.pullRequestOpened({ - appInstallationId: 42, - repositoryOwner: "shapehq", - repositoryName: "example-openapi", - ref: "bar", - pullRequestNumber: 1337 - }) - expect(didCallEventHandler).toBeFalsy() -}) - -test("It lets the disallowlist takes precedence over the allowlist", async () => { - let didCallEventHandler = false - const sut = new RepositoryNameCheckingPullRequestEventHandler({ - async pullRequestOpened() { - didCallEventHandler = true - } - }, ["example-openapi"], ["example-openapi"]) - await sut.pullRequestOpened({ - appInstallationId: 42, - repositoryOwner: "shapehq", - repositoryName: "example-openapi", - ref: "bar", - pullRequestNumber: 1337 - }) - expect(didCallEventHandler).toBeFalsy() -}) diff --git a/__test__/hooks/RepositoryNameEventFilter.test.ts b/__test__/hooks/RepositoryNameEventFilter.test.ts new file mode 100644 index 00000000..473ce34b --- /dev/null +++ b/__test__/hooks/RepositoryNameEventFilter.test.ts @@ -0,0 +1,94 @@ +import { RepositoryNameEventFilter } from "../../src/features/hooks/domain" + +test("It does not include repositories that do not have the \"-openapi\" suffix", async () => { + const sut = new RepositoryNameEventFilter({ + repositoryNameSuffix: "-openapi", + allowlist: [], + disallowlist: [] + }) + const result = sut.includeEvent({ + repositoryOwner: "acme", + repositoryName: "foo" + }) + expect(result).toBeFalsy() +}) + +test("It includes repository when both allowlist and disallowlist are empty", async () => { + const sut = new RepositoryNameEventFilter({ + repositoryNameSuffix: "-openapi", + allowlist: [], + disallowlist: [] + }) + const result = sut.includeEvent({ + repositoryOwner: "acme", + repositoryName: "foo-openapi" + }) + expect(result).toBeTruthy() +}) + +test("It does not include repository when it is not on the allowlist", async () => { + const sut = new RepositoryNameEventFilter({ + repositoryNameSuffix: "-openapi", + allowlist: ["acme/example-openapi"], + disallowlist: [] + }) + const result = sut.includeEvent({ + repositoryOwner: "acme", + repositoryName: "foo" + }) + expect(result).toBeFalsy() +}) + +test("It include repository when it is on the disallowlist", async () => { + const sut = new RepositoryNameEventFilter({ + repositoryNameSuffix: "-openapi", + allowlist: [], + disallowlist: ["acme/example-openapi"] + }) + const result = sut.includeEvent({ + repositoryOwner: "acme", + repositoryName: "example-openapi" + }) + expect(result).toBeFalsy() +}) + +test("It ensures that the disallowlist takes precedence over the allowlist", async () => { + const sut = new RepositoryNameEventFilter({ + repositoryNameSuffix: "-openapi", + allowlist: ["acme/example-openapi"], + disallowlist: ["acme/example-openapi"] + }) + const result = sut.includeEvent({ + repositoryOwner: "acme", + repositoryName: "example-openapi" + }) + expect(result).toBeFalsy() +}) + +test("It requires owner to be included when matching against the allowlist", async () => { + const sut = new RepositoryNameEventFilter({ + repositoryNameSuffix: "-openapi", + allowlist: ["example-openapi"], + disallowlist: [] + }) + const result = sut.includeEvent({ + repositoryOwner: "acme", + repositoryName: "example-openapi" + }) + // The repository is not allowed because the repository in the allowlist does not include the owner. + expect(result).toBeFalsy() +}) + +test("It requires owner to be included when matching against the disallowlist", async () => { + const sut = new RepositoryNameEventFilter({ + repositoryNameSuffix: "-openapi", + allowlist: [], + disallowlist: ["example-openapi"] + }) + const result = sut.includeEvent({ + repositoryOwner: "acme", + repositoryName: "example-openapi" + }) + // The repository is allowed because the repository in the disallowlist does not include the owner. + expect(result).toBeTruthy() +}) \ No newline at end of file diff --git a/__test__/projects/CachingProjectDataSource.test.ts b/__test__/projects/CachingProjectDataSource.test.ts index bf4c0cea..0a9fc418 100644 --- a/__test__/projects/CachingProjectDataSource.test.ts +++ b/__test__/projects/CachingProjectDataSource.test.ts @@ -23,7 +23,9 @@ test("It caches projects read from the data source", async () => { name: "world.yml", url: "https://example.com/world.yml" }] - }] + }], + owner: "acme", + ownerUrl: "https://example.com/acme" }] let cachedProjects: Project[] | undefined const sut = new CachingProjectDataSource({ diff --git a/__test__/projects/GitHubProjectDataSource.test.ts b/__test__/projects/GitHubProjectDataSource.test.ts index d0efbb3e..b4aeb857 100644 --- a/__test__/projects/GitHubProjectDataSource.test.ts +++ b/__test__/projects/GitHubProjectDataSource.test.ts @@ -5,10 +5,21 @@ import { test("It loads repositories from data source", async () => { let didLoadRepositories = false const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { didLoadRepositories = true - return [] + return { + search: { + results: [] + } + } } } }) @@ -18,69 +29,80 @@ test("It loads repositories from data source", async () => { test("It maps projects including branches and tags", async () => { const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "foo", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "main", - target: { - oid: "12345678" - } - }, - branches: { - edges: [{ - node: { + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "foo-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { name: "main", target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] - } + oid: "12345678" } - } - }] - }, - tags: { - edges: [{ - node: { - name: "1.0", - target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] + }, + branches: { + edges: [{ + node: { + name: "main", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } } - } + }] + }, + tags: { + edges: [{ + node: { + name: "1.0", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } + } + }] } }] } - }] + } } } }) const projects = await sut.getProjects() expect(projects).toEqual([{ - id: "foo", + id: "acme-foo", name: "foo", displayName: "foo", - url: "https://github.com/acme/foo", + url: "https://github.com/acme/foo-openapi", versions: [{ id: "main", name: "main", specifications: [{ id: "openapi.yml", name: "openapi.yml", - url: "/api/blob/acme/foo/openapi.yml?ref=12345678", - editURL: "https://github.com/acme/foo/edit/main/openapi.yml" + url: "/api/blob/acme/foo-openapi/openapi.yml?ref=12345678", + editURL: "https://github.com/acme/foo-openapi/edit/main/openapi.yml" }], - url: "https://github.com/acme/foo/tree/main", + url: "https://github.com/acme/foo-openapi/tree/main", isDefault: true }, { id: "1.0", @@ -88,149 +110,173 @@ test("It maps projects including branches and tags", async () => { specifications: [{ id: "openapi.yml", name: "openapi.yml", - url: "/api/blob/acme/foo/openapi.yml?ref=12345678", - editURL: "https://github.com/acme/foo/edit/1.0/openapi.yml" + url: "/api/blob/acme/foo-openapi/openapi.yml?ref=12345678", + editURL: "https://github.com/acme/foo-openapi/edit/1.0/openapi.yml" }], - url: "https://github.com/acme/foo/tree/1.0", + url: "https://github.com/acme/foo-openapi/tree/1.0", isDefault: false - }] + }], + owner: "acme", + ownerUrl: "https://github.com/acme" }]) }) test("It removes \"-openapi\" suffix from project name", async () => { const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "foo-openapi", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "main", - target: { - oid: "12345678" - } - }, - branches: { - edges: [{ - node: { + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "foo-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { name: "main", target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] - } + oid: "12345678" } - } - }] - }, - tags: { - edges: [{ - node: { - name: "1.0", - target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] + }, + branches: { + edges: [{ + node: { + name: "main", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } } - } + }] + }, + tags: { + edges: [{ + node: { + name: "1.0", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } + } + }] } }] } - }] + } } } }) const projects = await sut.getProjects() - expect(projects[0].id).toEqual("foo") + expect(projects[0].id).toEqual("acme-foo") expect(projects[0].name).toEqual("foo") expect(projects[0].displayName).toEqual("foo") }) test("It supports multiple OpenAPI specifications on a branch", async () => { const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "foo", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "main", - target: { - oid: "12345678" - } - }, - branches: { - edges: [{ - node: { + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "foo-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { name: "main", target: { - oid: "12345678", - tree: { - entries: [{ - name: "foo-service.yml" - }, { - name: "bar-service.yml" - }, { - name: "baz-service.yml" - }] - } + oid: "12345678" } - } - }] - }, - tags: { - edges: [{ - node: { - name: "1.0", - target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] + }, + branches: { + edges: [{ + node: { + name: "main", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "foo-service.yml" + }, { + name: "bar-service.yml" + }, { + name: "baz-service.yml" + }] + } + } } - } + }] + }, + tags: { + edges: [{ + node: { + name: "1.0", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } + } + }] } }] } - }] + } } } }) const projects = await sut.getProjects() expect(projects).toEqual([{ - id: "foo", + id: "acme-foo", name: "foo", displayName: "foo", - url: "https://github.com/acme/foo", + url: "https://github.com/acme/foo-openapi", versions: [{ id: "main", name: "main", specifications: [{ id: "foo-service.yml", name: "foo-service.yml", - url: "/api/blob/acme/foo/foo-service.yml?ref=12345678", - editURL: "https://github.com/acme/foo/edit/main/foo-service.yml" + url: "/api/blob/acme/foo-openapi/foo-service.yml?ref=12345678", + editURL: "https://github.com/acme/foo-openapi/edit/main/foo-service.yml" }, { id: "bar-service.yml", name: "bar-service.yml", - url: "/api/blob/acme/foo/bar-service.yml?ref=12345678", - editURL: "https://github.com/acme/foo/edit/main/bar-service.yml" + url: "/api/blob/acme/foo-openapi/bar-service.yml?ref=12345678", + editURL: "https://github.com/acme/foo-openapi/edit/main/bar-service.yml" }, { id: "baz-service.yml", name: "baz-service.yml", - url: "/api/blob/acme/foo/baz-service.yml?ref=12345678", - editURL: "https://github.com/acme/foo/edit/main/baz-service.yml" + url: "/api/blob/acme/foo-openapi/baz-service.yml?ref=12345678", + editURL: "https://github.com/acme/foo-openapi/edit/main/baz-service.yml" }], - url: "https://github.com/acme/foo/tree/main", + url: "https://github.com/acme/foo-openapi/tree/main", isDefault: true }, { id: "1.0", @@ -238,92 +284,116 @@ test("It supports multiple OpenAPI specifications on a branch", async () => { specifications: [{ id: "openapi.yml", name: "openapi.yml", - url: "/api/blob/acme/foo/openapi.yml?ref=12345678", - editURL: "https://github.com/acme/foo/edit/1.0/openapi.yml" + url: "/api/blob/acme/foo-openapi/openapi.yml?ref=12345678", + editURL: "https://github.com/acme/foo-openapi/edit/1.0/openapi.yml" }], - url: "https://github.com/acme/foo/tree/1.0", + url: "https://github.com/acme/foo-openapi/tree/1.0", isDefault: false - }] + }], + owner: "acme", + ownerUrl: "https://github.com/acme" }]) }) test("It removes \"-openapi\" suffix from project name", async () => { const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "foo-openapi", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "main", - target: { - oid: "12345678" - } - }, - branches: { - edges: [{ - node: { + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "foo-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { name: "main", target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] - } + oid: "12345678" } - } - }] - }, - tags: { - edges: [{ - node: { - name: "1.0", - target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] + }, + branches: { + edges: [{ + node: { + name: "main", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } } - } + }] + }, + tags: { + edges: [{ + node: { + name: "1.0", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } + } + }] } }] } - }] + } } } }) const projects = await sut.getProjects() - expect(projects[0].id).toEqual("foo") + expect(projects[0].id).toEqual("acme-foo") expect(projects[0].name).toEqual("foo") expect(projects[0].displayName).toEqual("foo") }) test("It filters away projects with no versions", async () => { const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "foo", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "main", - target: { - oid: "12345678" - } - }, - branches: { - edges: [] - }, - tags: { - edges: [] + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "foo", + owner: { + login: "acme" + }, + defaultBranchRef: { + name: "main", + target: { + oid: "12345678" + } + }, + branches: { + edges: [] + }, + tags: { + edges: [] + } + }] } - }] + } } } }) @@ -333,50 +403,61 @@ test("It filters away projects with no versions", async () => { test("It filters away branches with no specifications", async () => { const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "foo-openapi", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "main", - target: { - oid: "12345678" - } - }, - branches: { - edges: [{ - node: { + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "foo-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { name: "main", target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] - } + oid: "12345678" } - } - }, { - node: { - name: "bugfix", - target: { - oid: "12345678", - tree: { - entries: [{ - name: "foo.txt" - }] + }, + branches: { + edges: [{ + node: { + name: "main", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } } - } + }, { + node: { + name: "bugfix", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "foo.txt" + }] + } + } + } + }] + }, + tags: { + edges: [] } }] - }, - tags: { - edges: [] } - }] + } } } }) @@ -386,62 +467,73 @@ test("It filters away branches with no specifications", async () => { test("It filters away tags with no specifications", async () => { const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "foo-openapi", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "main", - target: { - oid: "12345678" - } - }, - branches: { - edges: [{ - node: { + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "foo-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { name: "main", target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] - } + oid: "12345678" } - } - }] - }, - tags: { - edges: [{ - node: { - name: "1.0", - target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] + }, + branches: { + edges: [{ + node: { + name: "main", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } } - } - } - }, { - node: { - name: "1.1", - target: { - oid: "12345678", - tree: { - entries: [{ - name: "foo.txt" - }] + }] + }, + tags: { + edges: [{ + node: { + name: "1.0", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } } - } + }, { + node: { + name: "1.1", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "foo.txt" + }] + } + } + } + }] } }] } - }] + } } } }) @@ -449,43 +541,54 @@ test("It filters away tags with no specifications", async () => { expect(projects[0].versions.length).toEqual(2) }) -test("It reads image from .shape-config.yml", async () => { +test("It reads image from configuration file with .yml extension", async () => { const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "foo-openapi", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "main", - target: { - oid: "12345678" - } - }, - configYml: { - text: "image: icon.png" - }, - branches: { - edges: [{ - node: { + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "foo-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { name: "main", target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] - } + oid: "12345678" } + }, + configYml: { + text: "image: icon.png" + }, + branches: { + edges: [{ + node: { + name: "main", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } + } + }] + }, + tags: { + edges: [] } }] - }, - tags: { - edges: [] } - }] + } } } }) @@ -495,62 +598,73 @@ test("It reads image from .shape-config.yml", async () => { test("It filters away tags with no specifications", async () => { const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "foo-openapi", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "main", - target: { - oid: "12345678" - } - }, - branches: { - edges: [{ - node: { + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "foo-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { name: "main", target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] - } + oid: "12345678" } - } - }] - }, - tags: { - edges: [{ - node: { - name: "1.0", - target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] + }, + branches: { + edges: [{ + node: { + name: "main", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } } - } - } - }, { - node: { - name: "1.1", - target: { - oid: "12345678", - tree: { - entries: [{ - name: "foo.txt" - }] + }] + }, + tags: { + edges: [{ + node: { + name: "1.0", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } } - } + }, { + node: { + name: "1.1", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "foo.txt" + }] + } + } + } + }] } }] } - }] + } } } }) @@ -558,89 +672,111 @@ test("It filters away tags with no specifications", async () => { expect(projects[0].versions.length).toEqual(2) }) -test("It reads display name from .shape-config.yml", async () => { +test("It reads display name from configuration file with .yml extension", async () => { const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "foo-openapi", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "main", - target: { - oid: "12345678" - } - }, - configYml: { - text: "name: Hello World" - }, - branches: { - edges: [{ - node: { + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "foo-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { name: "main", target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] - } + oid: "12345678" } + }, + configYml: { + text: "name: Hello World" + }, + branches: { + edges: [{ + node: { + name: "main", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } + } + }] + }, + tags: { + edges: [] } }] - }, - tags: { - edges: [] } - }] + } } } }) const projects = await sut.getProjects() - expect(projects[0].id).toEqual("foo") + expect(projects[0].id).toEqual("acme-foo") expect(projects[0].name).toEqual("foo") expect(projects[0].displayName).toEqual("Hello World") }) -test("It reads image from .shape-config.yml", async () => { +test("It reads image from configuration file with .yml extension", async () => { const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "foo-openapi", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "main", - target: { - oid: "12345678" - } - }, - configYml: { - text: "image: icon.png" - }, - branches: { - edges: [{ - node: { + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "foo-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { name: "main", target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] - } + oid: "12345678" } + }, + configYml: { + text: "image: icon.png" + }, + branches: { + edges: [{ + node: { + name: "main", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } + } + }] + }, + tags: { + edges: [] } }] - }, - tags: { - edges: [] } - }] + } } } }) @@ -648,89 +784,111 @@ test("It reads image from .shape-config.yml", async () => { expect(projects[0].imageURL).toEqual("/api/blob/acme/foo-openapi/icon.png?ref=12345678") }) -test("It reads display name from .shape-config.yaml", async () => { +test("It reads display name from configuration file with .yaml extension", async () => { const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "foo-openapi", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "main", - target: { - oid: "12345678" - } - }, - configYaml: { - text: "name: Hello World" - }, - branches: { - edges: [{ - node: { + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "foo-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { name: "main", target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] - } + oid: "12345678" } + }, + configYaml: { + text: "name: Hello World" + }, + branches: { + edges: [{ + node: { + name: "main", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } + } + }] + }, + tags: { + edges: [] } }] - }, - tags: { - edges: [] } - }] + } } } }) const projects = await sut.getProjects() - expect(projects[0].id).toEqual("foo") + expect(projects[0].id).toEqual("acme-foo") expect(projects[0].name).toEqual("foo") expect(projects[0].displayName).toEqual("Hello World") }) -test("It reads image from .shape-config.yaml", async () => { +test("It reads image from configuration file with .yaml extension", async () => { const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "foo-openapi", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "main", - target: { - oid: "12345678" - } - }, - configYaml: { - text: "image: icon.png" - }, - branches: { - edges: [{ - node: { + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "foo-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { name: "main", target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] - } + oid: "12345678" } + }, + configYaml: { + text: "image: icon.png" + }, + branches: { + edges: [{ + node: { + name: "main", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } + } + }] + }, + tags: { + edges: [] } }] - }, - tags: { - edges: [] } - }] + } } } }) @@ -740,96 +898,107 @@ test("It reads image from .shape-config.yaml", async () => { test("It sorts projects alphabetically", async () => { const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "cathrine", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "main", - target: { - oid: "12345678" - } - }, - branches: { - edges: [{ - node: { + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "cathrine-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { name: "main", target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] - } + oid: "12345678" } + }, + branches: { + edges: [{ + node: { + name: "main", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } + } + }] + }, + tags: { + edges: [] } - }] - }, - tags: { - edges: [] - } - }, { - name: "anne", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "main", - target: { - oid: "12345678" - } - }, - branches: { - edges: [{ - node: { + }, { + name: "anne-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { name: "main", target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] - } + oid: "12345678" } + }, + branches: { + edges: [{ + node: { + name: "main", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } + } + }] + }, + tags: { + edges: [] } - }] - }, - tags: { - edges: [] - } - }, { - name: "bobby", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "main", - target: { - oid: "12345678" - } - }, - branches: { - edges: [{ - node: { + }, { + name: "bobby-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { name: "main", target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] - } + oid: "12345678" } + }, + branches: { + edges: [{ + node: { + name: "main", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } + } + }] + }, + tags: { + edges: [] } }] - }, - tags: { - edges: [] } - }] + } } } }) @@ -841,74 +1010,85 @@ test("It sorts projects alphabetically", async () => { test("It sorts versions alphabetically", async () => { const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "foo", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "main", - target: { - oid: "12345678" - } - }, - branches: { - edges: [{ - node: { - name: "bobby", + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "foo-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { + name: "main", target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] - } + oid: "12345678" } - } - }, { - node: { - name: "anne", - target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] + }, + branches: { + edges: [{ + node: { + name: "bobby", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } } - } - } - }] - }, - tags: { - edges: [{ - node: { - name: "1.0", - target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] + }, { + node: { + name: "anne", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } } - } - } - }, { - node: { - name: "cathrine", - target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] + }] + }, + tags: { + edges: [{ + node: { + name: "1.0", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } } - } + }, { + node: { + name: "cathrine", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } + } + }] } }] } - }] + } } } }) @@ -921,98 +1101,109 @@ test("It sorts versions alphabetically", async () => { test("It prioritizes main, master, develop, and development branch names when sorting verisons", async () => { const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "foo", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "main", - target: { - oid: "12345678" - } - }, - branches: { - edges: [{ - node: { - name: "anne", + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "foo-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { + name: "main", target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] - } + oid: "12345678" } - } - }, { - node: { - name: "develop", - target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] + }, + branches: { + edges: [{ + node: { + name: "anne", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } } - } - } - }, { - node: { - name: "main", - target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] + }, { + node: { + name: "develop", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } } - } - } - }, { - node: { - name: "development", - target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] + }, { + node: { + name: "main", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } } - } - } - }, { - node: { - name: "master", - target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] + }, { + node: { + name: "development", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } } - } - } - }] - }, - tags: { - edges: [{ - node: { - name: "1.0", - target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] + }, { + node: { + name: "master", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } } - } + }] + }, + tags: { + edges: [{ + node: { + name: "1.0", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } + } + }] } }] } - }] + } } } }) @@ -1027,62 +1218,73 @@ test("It prioritizes main, master, develop, and development branch names when so test("It identifies the default branch in returned versions", async () => { const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "foo", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "development", - target: { - oid: "12345678" - } - }, - branches: { - edges: [{ - node: { - name: "anne", + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "foo-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { + name: "development", target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] - } + oid: "12345678" } - } - }, { - node: { - name: "main", - target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] + }, + branches: { + edges: [{ + node: { + name: "anne", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } } - } - } - }, { - node: { - name: "development", - target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] + }, { + node: { + name: "main", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } } - } + }, { + node: { + name: "development", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } + } + }] + }, + tags: { + edges: [] } }] - }, - tags: { - edges: [] } - }] + } } } }) @@ -1109,29 +1311,40 @@ test("It adds remote versions from the project configuration", async () => { url: https://example.com/louie.yml ` const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "foo", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "main", - target: { - oid: "12345678" - } - }, - configYml: { - text: rawProjectConfig - }, - branches: { - edges: [] - }, - tags: { - edges: [] + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "foo-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { + name: "main", + target: { + oid: "12345678" + } + }, + configYml: { + text: rawProjectConfig + }, + branches: { + edges: [] + }, + tags: { + edges: [] + } + }] } - }] + } } } }) @@ -1174,41 +1387,52 @@ test("It modifies ID of remote version if the ID already exists", async () => { url: https://example.com/hello.yml ` const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "foo", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "bar", - target: { - oid: "12345678" - } - }, - configYml: { - text: rawProjectConfig - }, - branches: { - edges: [{ - node: { + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "foo-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { name: "bar", target: { - oid: "12345678", - tree: { - entries: [{ - name: "openapi.yml" - }] - } + oid: "12345678" } + }, + configYml: { + text: rawProjectConfig + }, + branches: { + edges: [{ + node: { + name: "bar", + target: { + oid: "12345678", + tree: { + entries: [{ + name: "openapi.yml" + }] + } + } + } + }] + }, + tags: { + edges: [] } }] - }, - tags: { - edges: [] } - }] + } } } }) @@ -1216,13 +1440,13 @@ test("It modifies ID of remote version if the ID already exists", async () => { expect(projects[0].versions).toEqual([{ id: "bar", name: "bar", - url: "https://github.com/acme/foo/tree/bar", + url: "https://github.com/acme/foo-openapi/tree/bar", isDefault: true, specifications: [{ id: "openapi.yml", name: "openapi.yml", - url: "/api/blob/acme/foo/openapi.yml?ref=12345678", - editURL: "https://github.com/acme/foo/edit/bar/openapi.yml" + url: "/api/blob/acme/foo-openapi/openapi.yml?ref=12345678", + editURL: "https://github.com/acme/foo-openapi/edit/bar/openapi.yml" }] }, { id: "bar1", @@ -1255,29 +1479,40 @@ test("It lets users specify the ID of a remote version", async () => { url: https://example.com/baz.yml ` const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "foo", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "bar", - target: { - oid: "12345678" - } - }, - configYml: { - text: rawProjectConfig - }, - branches: { - edges: [] - }, - tags: { - edges: [] + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "foo-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { + name: "bar", + target: { + oid: "12345678" + } + }, + configYml: { + text: rawProjectConfig + }, + branches: { + edges: [] + }, + tags: { + edges: [] + } + }] } - }] + } } } }) @@ -1304,29 +1539,40 @@ test("It lets users specify the ID of a remote specification", async () => { url: https://example.com/baz.yml ` const sut = new GitHubProjectDataSource({ - dataSource: { - async getRepositories() { - return [{ - name: "foo", - owner: { - login: "acme" - }, - defaultBranchRef: { - name: "bar", - target: { - oid: "12345678" - } - }, - configYml: { - text: rawProjectConfig - }, - branches: { - edges: [] - }, - tags: { - edges: [] + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql() { + return { + search: { + results: [{ + name: "foo-openapi", + owner: { + login: "acme" + }, + defaultBranchRef: { + name: "bar", + target: { + oid: "12345678" + } + }, + configYml: { + text: rawProjectConfig + }, + branches: { + edges: [] + }, + tags: { + edges: [] + } + }] } - }] + } } } }) @@ -1342,3 +1588,112 @@ test("It lets users specify the ID of a remote specification", async () => { }] }]) }) + +test("It queries for both .yml and .yaml file extension with specifying .yml extension", async () => { + let query: string | undefined + const sut = new GitHubProjectDataSource({ + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql(request) { + query = request.query + return { + search: { + results: [] + } + } + } + } + }) + await sut.getProjects() + expect(query).toContain(".demo-docs.yml") + expect(query).toContain(".demo-docs.yaml") +}) + +test("It queries for both .yml and .yaml file extension with specifying .yaml extension", async () => { + let query: string | undefined + const sut = new GitHubProjectDataSource({ + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs.yml", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql(request) { + query = request.query + return { + search: { + results: [] + } + } + } + } + }) + await sut.getProjects() + expect(query).toContain(".demo-docs.yml") + expect(query).toContain(".demo-docs.yaml") +}) + +test("It queries for both .yml and .yaml file extension with no extension", async () => { + let query: string | undefined + const sut = new GitHubProjectDataSource({ + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs", + loginsDataSource: { + async getLogins() { + return ["acme"] + } + }, + graphQlClient: { + async graphql(request) { + query = request.query + return { + search: { + results: [] + } + } + } + } + }) + await sut.getProjects() + expect(query).toContain(".demo-docs.yml") + expect(query).toContain(".demo-docs.yaml") +}) + +test("It loads projects for all logins", async () => { + let searchQueries: string[] = [] + const sut = new GitHubProjectDataSource({ + repositoryNameSuffix: "-openapi", + projectConfigurationFilename: ".demo-docs", + loginsDataSource: { + async getLogins() { + return ["acme", "somecorp", "techsystems"] + } + }, + graphQlClient: { + async graphql(request) { + if (request.variables?.searchQuery) { + searchQueries.push(request.variables.searchQuery) + } + return { + search: { + results: [] + } + } + } + } + }) + await sut.getProjects() + expect(searchQueries.length).toEqual(4) + expect(searchQueries).toContain("\"-openapi\" in:name is:private") + expect(searchQueries).toContain("\"-openapi\" in:name user:acme is:public") + expect(searchQueries).toContain("\"-openapi\" in:name user:somecorp is:public") + expect(searchQueries).toContain("\"-openapi\" in:name user:techsystems is:public") +}) diff --git a/__test__/projects/GitHubProjectRepositoryDataSource.test.ts b/__test__/projects/GitHubProjectRepositoryDataSource.test.ts deleted file mode 100644 index 7d8d79fd..00000000 --- a/__test__/projects/GitHubProjectRepositoryDataSource.test.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { - GitHubProjectRepositoryDataSource, - GitHubGraphQLClientRequest - } from "../../src/features/projects/data" - -test("It requests data for the specified organization", async () => { - let sentRequest: GitHubGraphQLClientRequest | undefined - const sut = new GitHubProjectRepositoryDataSource({ - organizationName: "foo", - graphQlClient: { - async graphql(request) { - sentRequest = request - return { search: { results: [] } } - } - } - }) - await sut.getRepositories() - expect(sentRequest).not.toBeUndefined() - expect(sentRequest?.variables.searchQuery).toContain("org:foo") -}) diff --git a/__test__/projects/getSelection.test.ts b/__test__/projects/getSelection.test.ts index a3979b44..a5a544ca 100644 --- a/__test__/projects/getSelection.test.ts +++ b/__test__/projects/getSelection.test.ts @@ -16,22 +16,27 @@ test("It selects the first project when there is only one project and path is em name: "hello.yml", url: "https://example.com/hello.yml" }] - }] + }], + owner: "acme", + ownerUrl: "https://example.com/acme" }] }) - expect(sut.project!.id).toEqual("foo") + expect(sut.project!.owner).toEqual("acme") + expect(sut.project!.name).toEqual("foo") expect(sut.version!.id).toEqual("bar") expect(sut.specification!.id).toEqual("hello") }) test("It selects the first version and specification of the specified project", () => { const sut = getSelection({ - path: "/bar", + path: "/acme/bar", projects: [{ id: "foo", name: "foo", displayName: "foo", - versions: [] + versions: [], + owner: "acme", + ownerUrl: "https://example.com/acme" }, { id: "bar", name: "bar", @@ -54,22 +59,27 @@ test("It selects the first version and specification of the specified project", name: "baz2", isDefault: false, specifications: [] - }] + }], + owner: "acme", + ownerUrl: "https://example.com/acme" }] }) - expect(sut.project!.id).toEqual("bar") + expect(sut.project!.owner).toEqual("acme") + expect(sut.project!.name).toEqual("bar") expect(sut.version!.id).toEqual("baz1") expect(sut.specification!.id).toEqual("hello1") }) test("It selects the first specification of the specified project and version", () => { const sut = getSelection({ - path: "/bar/baz2", + path: "/acme/bar/baz2", projects: [{ id: "foo", name: "foo", displayName: "foo", - versions: [] + versions: [], + owner: "acme", + ownerUrl: "https://example.com/acme" }, { id: "bar", name: "bar", @@ -88,22 +98,27 @@ test("It selects the first specification of the specified project and version", name: "hello1.yml", url: "https://example.com/hello.yml" }] - }] + }], + owner: "acme", + ownerUrl: "https://example.com/acme" }] }) - expect(sut.project!.id).toEqual("bar") + expect(sut.project!.owner).toEqual("acme") + expect(sut.project!.name).toEqual("bar") expect(sut.version!.id).toEqual("baz2") expect(sut.specification!.id).toEqual("hello1") }) test("It selects the specification of the specified version", () => { const sut = getSelection({ - path: "/bar/baz2", + path: "/acme/bar/baz2", projects: [{ id: "foo", name: "foo", displayName: "foo", - versions: [] + versions: [], + owner: "acme", + ownerUrl: "https://example.com/acme" }, { id: "bar", name: "bar", @@ -126,22 +141,27 @@ test("It selects the specification of the specified version", () => { name: "hello2.yml", url: "https://example.com/hello.yml" }] - }] + }], + owner: "acme", + ownerUrl: "https://example.com/acme" }] }) - expect(sut.project!.id).toEqual("bar") + expect(sut.project!.owner).toEqual("acme") + expect(sut.project!.name).toEqual("bar") expect(sut.version!.id).toEqual("baz2") expect(sut.specification!.id).toEqual("hello1") }) test("It selects the specified project, version, and specification", () => { const sut = getSelection({ - path: "/bar/baz2/hello2", + path: "/acme/bar/baz2/hello2", projects: [{ id: "foo", name: "foo", displayName: "foo", - versions: [] + versions: [], + owner: "acme", + ownerUrl: "https://example.com/acme" }, { id: "bar", name: "bar", @@ -164,22 +184,27 @@ test("It selects the specified project, version, and specification", () => { name: "hello2.yml", url: "https://example.com/hello.yml" }] - }] + }], + owner: "acme", + ownerUrl: "https://example.com/acme" }] }) - expect(sut.project!.id).toEqual("bar") + expect(sut.project!.owner).toEqual("acme") + expect(sut.project!.name).toEqual("bar") expect(sut.version!.id).toEqual("baz2") expect(sut.specification!.id).toEqual("hello2") }) test("It returns a undefined project, version, and specification when the selected project cannot be found", () => { const sut = getSelection({ - path: "/foo", + path: "/acme/foo", projects: [{ id: "bar", name: "bar", displayName: "bar", - versions: [] + versions: [], + owner: "acme", + ownerUrl: "https://example.com/acme" }] }) expect(sut.project).toBeUndefined() @@ -189,7 +214,7 @@ test("It returns a undefined project, version, and specification when the select test("It returns a undefined version and specification when the selected version cannot be found", () => { const sut = getSelection({ - path: "/foo/bar", + path: "/acme/foo/bar", projects: [{ id: "foo", name: "foo", @@ -199,17 +224,20 @@ test("It returns a undefined version and specification when the selected version name: "baz", isDefault: false, specifications: [] - }] + }], + owner: "acme", + ownerUrl: "https://example.com/acme" }] }) - expect(sut.project!.id).toEqual("foo") + expect(sut.project!.owner).toEqual("acme") + expect(sut.project!.name).toEqual("foo") expect(sut.version).toBeUndefined() expect(sut.specification).toBeUndefined() }) test("It returns a undefined specification when the selected specification cannot be found", () => { const sut = getSelection({ - path: "/foo/bar/baz", + path: "/acme/foo/bar/baz", projects: [{ id: "foo", name: "foo", @@ -223,17 +251,20 @@ test("It returns a undefined specification when the selected specification canno name: "hello.yml", url: "https://example.com/hello.yml" }] - }] + }], + owner: "acme", + ownerUrl: "https://example.com/acme" }] }) - expect(sut.project!.id).toEqual("foo") + expect(sut.project!.owner).toEqual("acme") + expect(sut.project!.name).toEqual("foo") expect(sut.version!.id).toEqual("bar") expect(sut.specification).toBeUndefined() }) test("It moves specification ID to version ID if needed", () => { const sut = getSelection({ - path: "/foo/bar/baz", + path: "/acme/foo/bar/baz", projects: [{ id: "foo", name: "foo", @@ -247,10 +278,13 @@ test("It moves specification ID to version ID if needed", () => { name: "hello.yml", url: "https://example.com/hello.yml" }] - }] + }], + owner: "acme", + ownerUrl: "https://example.com/acme" }] }) - expect(sut.project!.id).toEqual("foo") + expect(sut.project!.owner).toEqual("acme") + expect(sut.project!.name).toEqual("foo") expect(sut.version!.id).toEqual("bar/baz") expect(sut.specification!.id).toEqual("hello") }) diff --git a/__test__/projects/projectNavigator.test.ts b/__test__/projects/projectNavigator.test.ts index e80d4d26..4cc0cb6a 100644 --- a/__test__/projects/projectNavigator.test.ts +++ b/__test__/projects/projectNavigator.test.ts @@ -15,8 +15,8 @@ test("It navigates to the correct path", async () => { replace: () => {} } }) - sut.navigate("foo", "bar", "hello.yml") - expect(pushedPath).toEqual("/foo/bar/hello.yml") + sut.navigate("acme", "foo", "bar", "hello.yml") + expect(pushedPath).toEqual("/acme/foo/bar/hello.yml") }) test("It navigates to first specification when changing version", async () => { @@ -42,7 +42,9 @@ test("It navigates to first specification when changing version", async () => { name: "world.yml", url: "https://example.com/world.yml" }] - }] + }], + owner: "acme", + ownerUrl: "https://example.com/acme" } let pushedPath: string | undefined const sut = new ProjectNavigator({ @@ -59,7 +61,7 @@ test("It navigates to first specification when changing version", async () => { } }) sut.navigateToVersion(project, "hello", "baz.yml") - expect(pushedPath).toEqual("/foo/hello/world.yml") + expect(pushedPath).toEqual("/acme/foo/hello/world.yml") }) test("It finds a specification with the same name when changing version", async () => { @@ -101,7 +103,9 @@ test("It finds a specification with the same name when changing version", async name: "jupiter.yml", url: "https://example.com/jupiter.yml" }] - }] + }], + owner: "acme", + ownerUrl: "https://example.com/acme" } let pushedPath: string | undefined const sut = new ProjectNavigator({ @@ -118,7 +122,7 @@ test("It finds a specification with the same name when changing version", async } }) sut.navigateToVersion(project, "baz", "earth.yml") - expect(pushedPath).toEqual("/foo/baz/earth.yml") + expect(pushedPath).toEqual("/acme/foo/baz/earth.yml") }) test("It skips navigating when URL matches selection", async () => { @@ -126,7 +130,7 @@ test("It skips navigating when URL matches selection", async () => { const sut = new ProjectNavigator({ pathnameReader: { get pathname() { - return "/foo/bar/baz" + return "/acme/foo/bar/baz" } }, router: { @@ -137,7 +141,8 @@ test("It skips navigating when URL matches selection", async () => { } }) sut.navigateIfNeeded({ - projectId: "foo", + projectOwner: "acme", + projectName: "foo", versionId: "bar", specificationId: "baz" }) @@ -160,7 +165,8 @@ test("It navigates when project ID in URL does not match ID of selected project" } }) sut.navigateIfNeeded({ - projectId: "foo", + projectOwner: "acme", + projectName: "foo", versionId: "bar", specificationId: "baz" }) @@ -183,7 +189,8 @@ test("It navigates when version ID in URL does not match ID of selected version" } }) sut.navigateIfNeeded({ - projectId: "foo", + projectOwner: "acme", + projectName: "foo", versionId: "bar", specificationId: "baz" }) @@ -206,7 +213,8 @@ test("It navigates when specification ID in URL does not match ID of selected sp } }) sut.navigateIfNeeded({ - projectId: "foo", + projectOwner: "acme", + projectName: "foo", versionId: "bar", specificationId: "baz" }) diff --git a/__test__/projects/updateWindowTitle.test.ts b/__test__/projects/updateWindowTitle.test.ts index 1f7692b2..5521f406 100644 --- a/__test__/projects/updateWindowTitle.test.ts +++ b/__test__/projects/updateWindowTitle.test.ts @@ -4,21 +4,23 @@ test("It uses default title when there is no selection", async () => { const store: { title: string } = { title: "" } updateWindowTitle({ storage: store, - defaultTitle: "Shape Docs" + defaultTitle: "Demo Docs" }) - expect(store.title).toEqual("Shape Docs") + expect(store.title).toEqual("Demo Docs") }) test("It leaves out specification when the specification has a generic name", async () => { const store: { title: string } = { title: "" } updateWindowTitle({ storage: store, - defaultTitle: "Shape Docs", + defaultTitle: "Demo Docs", project: { id: "foo", name: "foo", displayName: "foo", - versions: [] + versions: [], + owner: "acme", + ownerUrl: "https://example.com/acme" }, version: { id: "bar", @@ -47,12 +49,14 @@ test("It leaves out version when it is the defualt version", async () => { const store: { title: string } = { title: "" } updateWindowTitle({ storage: store, - defaultTitle: "Shape Docs", + defaultTitle: "Demo Docs", project: { id: "foo", name: "foo", displayName: "foo", - versions: [] + versions: [], + owner: "acme", + ownerUrl: "https://example.com/acme" }, version: { id: "bar", @@ -77,12 +81,14 @@ test("It adds version when it is not the defualt version", async () => { const store: { title: string } = { title: "" } updateWindowTitle({ storage: store, - defaultTitle: "Shape Docs", + defaultTitle: "Demo Docs", project: { id: "foo", name: "foo", displayName: "foo", - versions: [] + versions: [], + owner: "acme", + ownerUrl: "https://example.com/acme" }, version: { id: "bar", diff --git a/create-tables.sql b/create-tables.sql new file mode 100644 index 00000000..12dffb24 --- /dev/null +++ b/create-tables.sql @@ -0,0 +1,49 @@ +CREATE TABLE accounts +( + id SERIAL, + "userId" INTEGER NOT NULL, + type VARCHAR(255) NOT NULL, + provider VARCHAR(255) NOT NULL, + "providerAccountId" VARCHAR(255) NOT NULL, + refresh_token TEXT, + access_token TEXT, + expires_at BIGINT, + id_token TEXT, + scope TEXT, + session_state TEXT, + token_type TEXT, + + PRIMARY KEY (id) +); + +CREATE TABLE sessions +( + id SERIAL, + "userId" INTEGER NOT NULL, + expires TIMESTAMPTZ NOT NULL, + "sessionToken" VARCHAR(255) NOT NULL, + + PRIMARY KEY (id) +); + +CREATE TABLE users +( + id SERIAL, + name VARCHAR(255), + email VARCHAR(255), + "emailVerified" TIMESTAMPTZ, + image TEXT, + + PRIMARY KEY (id) +); + +CREATE TABLE oauth_tokens +( + user_id VARCHAR(255) NOT NULL, + provider VARCHAR(255) NOT NULL, + access_token VARCHAR(255) NOT NULL, + refresh_token VARCHAR(255) NOT NULL, + last_updated_at timestamptz NOT NULL DEFAULT now(), + + PRIMARY KEY (user_id, provider) +); diff --git a/drop-tables.sql b/drop-tables.sql new file mode 100644 index 00000000..fbc46117 --- /dev/null +++ b/drop-tables.sql @@ -0,0 +1,5 @@ +DROP TABLE oauth_tokens; +DROP TABLE verification_token; +DROP TABLE accounts; +DROP TABLE sessions; +DROP TABLE users; diff --git a/infrastructure/aws/.gitignore b/infrastructure/aws/.gitignore deleted file mode 100644 index f60797b6..00000000 --- a/infrastructure/aws/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -*.js -!jest.config.js -*.d.ts -node_modules - -# CDK asset staging directory -.cdk.staging -cdk.out diff --git a/infrastructure/aws/.npmignore b/infrastructure/aws/.npmignore deleted file mode 100644 index c1d6d45d..00000000 --- a/infrastructure/aws/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -*.ts -!*.d.ts - -# CDK asset staging directory -.cdk.staging -cdk.out diff --git a/infrastructure/aws/README.md b/infrastructure/aws/README.md deleted file mode 100644 index 317604aa..00000000 --- a/infrastructure/aws/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Shape Docs AWS Infrastructure - -Infrastructure as code for deploying Shape Docs to AWS. - -## Useful commands - -* `npm run build` compile typescript to js -* `npm run watch` watch for changes and compile -* `npm run test` perform the jest unit tests -* `npx cdk deploy` deploy this stack to your default AWS account/region -* `npx cdk diff` compare deployed stack with current state -* `npx cdk synth` emits the synthesized CloudFormation template diff --git a/infrastructure/aws/bin/infrastructure.ts b/infrastructure/aws/bin/infrastructure.ts deleted file mode 100644 index 34e2bdca..00000000 --- a/infrastructure/aws/bin/infrastructure.ts +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env node -import 'source-map-support/register'; -import * as cdk from 'aws-cdk-lib'; -import DocsDeployment from '../lib/docs-deployment'; - -const app = new cdk.App(); - -/** ACCOUNTS */ - -const nonProdAccount: cdk.Environment = { - account: "841481405304", - region: "eu-central-1", -}; - -const prodAccount: cdk.Environment = { - account: "721428964064", - region: "eu-central-1", -}; - -/** DEPLOYMENTS */ - -new DocsDeployment(app, 'Staging', { - env: nonProdAccount, - publicCertificateArn: 'arn:aws:acm:eu-central-1:841481405304:certificate/6d513b25-bbca-49ec-9de0-377e303c313f', -}) - -new DocsDeployment(app, 'Prod', { - env: prodAccount, - publicCertificateArn: 'arn:aws:acm:eu-central-1:841481405304:certificate/6d513b25-bbca-49ec-9de0-377e303c313f', // TODO: Replace with prod cert -}) diff --git a/infrastructure/aws/cdk.context.json b/infrastructure/aws/cdk.context.json deleted file mode 100644 index 2d7f926b..00000000 --- a/infrastructure/aws/cdk.context.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "availability-zones:account=841481405304:region=eu-central-1": [ - "eu-central-1a", - "eu-central-1b", - "eu-central-1c" - ] -} diff --git a/infrastructure/aws/cdk.json b/infrastructure/aws/cdk.json deleted file mode 100644 index d5298049..00000000 --- a/infrastructure/aws/cdk.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "app": "npx ts-node --prefer-ts-exts bin/infrastructure.ts", - "watch": { - "include": [ - "**" - ], - "exclude": [ - "README.md", - "cdk*.json", - "**/*.d.ts", - "**/*.js", - "tsconfig.json", - "package*.json", - "yarn.lock", - "node_modules", - "test" - ] - }, - "context": { - "@aws-cdk/aws-lambda:recognizeLayerVersion": true, - "@aws-cdk/core:checkSecretUsage": true, - "@aws-cdk/core:target-partitions": [ - "aws", - "aws-cn" - ], - "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true, - "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true, - "@aws-cdk/aws-ecs:arnFormatIncludesClusterName": true, - "@aws-cdk/aws-iam:minimizePolicies": true, - "@aws-cdk/core:validateSnapshotRemovalPolicy": true, - "@aws-cdk/aws-codepipeline:crossAccountKeyAliasStackSafeResourceName": true, - "@aws-cdk/aws-s3:createDefaultLoggingPolicy": true, - "@aws-cdk/aws-sns-subscriptions:restrictSqsDescryption": true, - "@aws-cdk/aws-apigateway:disableCloudWatchRole": true, - "@aws-cdk/core:enablePartitionLiterals": true, - "@aws-cdk/aws-events:eventsTargetQueueSameAccount": true, - "@aws-cdk/aws-iam:standardizedServicePrincipals": true, - "@aws-cdk/aws-ecs:disableExplicitDeploymentControllerForCircuitBreaker": true, - "@aws-cdk/aws-iam:importedRoleStackSafeDefaultPolicyName": true, - "@aws-cdk/aws-s3:serverAccessLogsUseBucketPolicy": true, - "@aws-cdk/aws-route53-patters:useCertificate": true, - "@aws-cdk/customresources:installLatestAwsSdkDefault": false, - "@aws-cdk/aws-rds:databaseProxyUniqueResourceName": true, - "@aws-cdk/aws-codedeploy:removeAlarmsFromDeploymentGroup": true, - "@aws-cdk/aws-apigateway:authorizerChangeDeploymentLogicalId": true, - "@aws-cdk/aws-ec2:launchTemplateDefaultUserData": true, - "@aws-cdk/aws-secretsmanager:useAttachedSecretResourcePolicyForSecretTargetAttachments": true, - "@aws-cdk/aws-redshift:columnId": true, - "@aws-cdk/aws-stepfunctions-tasks:enableEmrServicePolicyV2": true, - "@aws-cdk/aws-ec2:restrictDefaultSecurityGroup": true, - "@aws-cdk/aws-apigateway:requestValidatorUniqueId": true, - "@aws-cdk/aws-kms:aliasNameRef": true, - "@aws-cdk/aws-autoscaling:generateLaunchTemplateInsteadOfLaunchConfig": true, - "@aws-cdk/core:includePrefixInUniqueNameGeneration": true, - "@aws-cdk/aws-efs:denyAnonymousAccess": true, - "@aws-cdk/aws-opensearchservice:enableOpensearchMultiAzWithStandby": true, - "@aws-cdk/aws-lambda-nodejs:useLatestRuntimeVersion": true, - "@aws-cdk/aws-efs:mountTargetOrderInsensitiveLogicalId": true, - "@aws-cdk/aws-rds:auroraClusterChangeScopeOfInstanceParameterGroupWithEachParameters": true, - "@aws-cdk/aws-appsync:useArnForSourceApiAssociationIdentifier": true, - "@aws-cdk/aws-rds:preventRenderingDeprecatedCredentials": true, - "@aws-cdk/aws-codepipeline-actions:useNewDefaultBranchForCodeCommitSource": true - } -} diff --git a/infrastructure/aws/lib/app-stack.ts b/infrastructure/aws/lib/app-stack.ts deleted file mode 100644 index ae018ddc..00000000 --- a/infrastructure/aws/lib/app-stack.ts +++ /dev/null @@ -1,112 +0,0 @@ -import * as cdk from 'aws-cdk-lib'; -import * as sm from 'aws-cdk-lib/aws-secretsmanager'; -import { Vpc } from 'aws-cdk-lib/aws-ec2'; -import { EcrImage, FargateService, Secret } from 'aws-cdk-lib/aws-ecs'; -import { ApplicationLoadBalancedFargateService } from 'aws-cdk-lib/aws-ecs-patterns'; -import { Construct } from 'constructs'; -import { Certificate } from 'aws-cdk-lib/aws-certificatemanager'; - -interface AppStackProps extends cdk.StackProps { - vpc: Vpc; - image: EcrImage; - redisHostname: string, - postgresHostname: string, - postgresUser: string, - postgresDb: string, - postgresPassword: sm.ISecret, - publicCertificateArn: string, -} - -export class AppStack extends cdk.Stack { - readonly service: FargateService; - readonly loadBalancer: cdk.aws_elasticloadbalancingv2.ApplicationLoadBalancer; - - constructor(scope: Construct, id: string, props: AppStackProps) { - super(scope, id, props); - - // list of all env vars to be stored in Secrets Manager - const envVars = [ - // GitHub - "GITHUB_APP_ID", - "GITHUB_CLIENT_ID", - "GITHUB_CLIENT_SECRET", - "GITHUB_ORGANIZATION_NAME", - "GITHUB_PRIVATE_KEY_BASE_64", - "GITHUB_WEBHOK_REPOSITORY_ALLOWLIST", - "GITHUB_WEBHOK_REPOSITORY_DISALLOWLIST", - "GITHUB_WEBHOOK_SECRET", - // Auth0 - "AUTH0_BASE_URL", // TODO: Remove once we have transitioned to NEXTAUTH - "AUTH0_CLIENT_ID", // TODO: Remove once we have transitioned to NEXTAUTH - "AUTH0_CLIENT_SECRET", // TODO: Remove once we have transitioned to NEXTAUTH - "AUTH0_ISSUER_BASE_URL", // TODO: Remove once we have transitioned to NEXTAUTH - "AUTH0_MANAGEMENT_CLIENT_ID", // TODO: Remove once we have transitioned to NEXTAUTH - "AUTH0_MANAGEMENT_CLIENT_SECRET", // TODO: Remove once we have transitioned to NEXTAUTH - "AUTH0_MANAGEMENT_DOMAIN", // TODO: Remove once we have transitioned to NEXTAUTH - "AUTH0_SECRET", // TODO: Remove once we have transitioned to NEXTAUTH - "NEXTAUTH_SECRET", - "NEXTAUTH_URL", // TODO: Could be part of config along with certificate issuing - // SMTP for sending emails - "SMTP_HOST", - "SMTP_USER", - "SMTP_PASS", - // Other - "SHAPE_DOCS_BASE_URL", // TODO: Could be part of config along with certificate issuing - ] - - // create the env vars as secrets in Secrets Manager - // Note: secrets are created with an initial value which should be replaced via the AWS SecretsManager Console - // https://eu-central-1.console.aws.amazon.com/secretsmanager/listsecrets?region=eu-central-1 - const secrets = envVars.reduce((acc, curr) => { - acc[curr] = new sm.Secret(this, `${id}Secret${curr}`, { - secretName: `${id}/${curr}`, - }); - return acc; - }, {} as { [key: string]: sm.Secret }); - - // must be created & validated in the AWS Console - // https://eu-central-1.console.aws.amazon.com/acm/home?region=eu-central-1 - const certificate = Certificate.fromCertificateArn(this, `${id}Certificate`, props.publicCertificateArn) - - const app = new ApplicationLoadBalancedFargateService(this, "AppService", { - vpc: props.vpc, - assignPublicIp: false, // run in private network - desiredCount: 1, - cpu: 256, - memoryLimitMiB: 512, - publicLoadBalancer: true, - taskImageOptions: { - image: props.image, - environment: { - REDIS_URL: props.redisHostname, - POSTGRESQL_HOST: props.postgresHostname, - POSTGRESQL_USER: props.postgresUser, - POSTGRESQL_DB: props.postgresDb, - NEXT_PUBLIC_SHAPE_DOCS_TITLE: 'Shape Docs', - }, - secrets: { - ...envVars.reduce((acc, curr) => { // get each env var from Secrets Manager - acc[curr] = Secret.fromSecretsManager(secrets[curr]); - return acc; - }, {} as { [key: string]: Secret }), - POSTGRESQL_PASSWORD: Secret.fromSecretsManager(props.postgresPassword), - }, - containerPort: 3000, - }, - circuitBreaker: { - rollback: true, - }, - healthCheckGracePeriod: cdk.Duration.seconds(60), - certificate: certificate, - }); - - app.targetGroup.setAttribute('deregistration_delay.timeout_seconds', '15'); - - app.targetGroup.configureHealthCheck({ - path: "/api/health", - }); - - this.service = app.service; - this.loadBalancer = app.loadBalancer; - } -} diff --git a/infrastructure/aws/lib/docs-deployment.ts b/infrastructure/aws/lib/docs-deployment.ts deleted file mode 100644 index 55427f91..00000000 --- a/infrastructure/aws/lib/docs-deployment.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { Construct } from 'constructs' -import { InfrastructureStack } from './infrastructure-stack'; -import { Environment } from 'aws-cdk-lib'; -import { PostgresStack } from './postgres-stack'; -import { RedisStack } from './redis-stack'; -import { AppStack } from './app-stack'; -import { ContainerImage } from 'aws-cdk-lib/aws-ecs'; - -interface DocsDeploymentProps { - env: Environment, - publicCertificateArn: string, -} - -export default class DocsDeployment extends Construct { - readonly infrastructure: InfrastructureStack - readonly postgres: PostgresStack - readonly redis: RedisStack - readonly app: AppStack - - constructor(scope: Construct, id: string, props: DocsDeploymentProps) { - super(scope, id) - - this.infrastructure = new InfrastructureStack(scope, `${id}Infrastructure`, { - env: props.env, - }); - - this.postgres = new PostgresStack(scope, `${id}Postgres`, { - env: props.env, - vpc: this.infrastructure.vpc, - }); - - this.redis = new RedisStack(scope, `${id}Redis`, { - env: props.env, - vpc: this.infrastructure.vpc, - }); - - this.app = new AppStack(scope, `${id}App`, { - env: props.env, - vpc: this.infrastructure.vpc, - image: ContainerImage.fromEcrRepository(this.infrastructure.dockerRepository, 'latest'), - postgresHostname: this.postgres.dbInstance.instanceEndpoint.hostname, - postgresUser: this.postgres.username, - postgresDb: this.postgres.database, - postgresPassword: this.postgres.password, - redisHostname: this.redis.cluster.attrRedisEndpointAddress, - publicCertificateArn: props.publicCertificateArn, - }); - - this.app.service.connections.allowToDefaultPort(this.redis); - this.app.service.connections.allowToDefaultPort(this.postgres.dbInstance); - } -} diff --git a/infrastructure/aws/lib/infrastructure-stack.ts b/infrastructure/aws/lib/infrastructure-stack.ts deleted file mode 100644 index 06afdf84..00000000 --- a/infrastructure/aws/lib/infrastructure-stack.ts +++ /dev/null @@ -1,59 +0,0 @@ -import * as cdk from 'aws-cdk-lib'; -import { IpAddresses, Vpc } from 'aws-cdk-lib/aws-ec2'; -import { Repository } from 'aws-cdk-lib/aws-ecr'; -import { Effect, Policy, PolicyStatement, User } from 'aws-cdk-lib/aws-iam'; -import { Construct } from 'constructs'; - -export class InfrastructureStack extends cdk.Stack { - readonly vpc: Vpc; - readonly dockerRepository: Repository; - - constructor(scope: Construct, id: string, props?: cdk.StackProps) { - super(scope, id, props); - - this.vpc = new Vpc(this, 'VPC', { - ipAddresses: IpAddresses.cidr("10.0.0.0/16"), - maxAzs: 2, - }); - - this.dockerRepository = new Repository(this, 'Repository', { - repositoryName: 'shapedocs', - removalPolicy: cdk.RemovalPolicy.DESTROY, - }); - - const deploymentPolicy = new Policy(this, 'DeploymentPolicy', { - policyName: 'DeploymentPolicy', - statements: [ - new PolicyStatement({ - effect: Effect.ALLOW, - actions: [ - // ECR - "ecr:GetAuthorizationToken", - "ecr:GetDownloadUrlForLayer", - "ecr:BatchCheckLayerAvailability", - "ecr:PutImage", - "ecr:InitiateLayerUpload", - "ecr:UploadLayerPart", - "ecr:CompleteLayerUpload", - // ECS - "ecs:DescribeServices", - "ecs:UpdateService", - "ecs:RegisterTaskDefinition", - "ecs:DeregisterTaskDefinition", - "ecs:DescribeTaskDefinition", - "iam:PassRole" - ], - resources: [ - "*" - ], - }), - ], - }); - - const deploymentUser = new User(this, 'GitHubActionsUser'); - - deploymentPolicy.attachToUser(deploymentUser); - - deploymentUser.attachInlinePolicy(deploymentPolicy); - } -} diff --git a/infrastructure/aws/lib/postgres-stack.ts b/infrastructure/aws/lib/postgres-stack.ts deleted file mode 100644 index c76c31f1..00000000 --- a/infrastructure/aws/lib/postgres-stack.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { Construct } from 'constructs' -import { Duration, RemovalPolicy, Stack, StackProps } from 'aws-cdk-lib' -import { Vpc, InstanceClass, InstanceType, InstanceSize } from 'aws-cdk-lib/aws-ec2' -import * as rds from 'aws-cdk-lib/aws-rds' -import * as sm from 'aws-cdk-lib/aws-secretsmanager' - -interface PostgresStackProps extends StackProps { - vpc: Vpc; -} - -export class PostgresStack extends Stack { - readonly dbInstance: rds.DatabaseInstance; - readonly database: string = 'docs'; - readonly username: string = 'docs'; - readonly password: sm.Secret; - - constructor(scope: Construct, id: string, props: PostgresStackProps) { - super(scope, id, props); - - this.password = new sm.Secret(this, `DbPasswordSecret`, { - secretName: `${id}DbPassword`, - generateSecretString: { - excludePunctuation: true - } - }) - - this.dbInstance = new rds.DatabaseInstance(this, `DbInstance`, { - engine: rds.DatabaseInstanceEngine.postgres({ - version: rds.PostgresEngineVersion.VER_16, - }), - instanceType: InstanceType.of(InstanceClass.T3, InstanceSize.MICRO), - credentials: { - username: this.username, - password: this.password.secretValue - }, - vpc: props.vpc, - allocatedStorage: 5, - maxAllocatedStorage: 50, - allowMajorVersionUpgrade: false, - autoMinorVersionUpgrade: true, - backupRetention: Duration.days(7), - deletionProtection: true, - databaseName: this.database, - removalPolicy: RemovalPolicy.RETAIN, - enablePerformanceInsights: true, - multiAz: false, - storageEncrypted: true, - }) - } -} diff --git a/infrastructure/aws/lib/redis-stack.ts b/infrastructure/aws/lib/redis-stack.ts deleted file mode 100644 index 40d3497a..00000000 --- a/infrastructure/aws/lib/redis-stack.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Stack, StackProps } from "aws-cdk-lib" -import { CfnCacheCluster, CfnSubnetGroup } from "aws-cdk-lib/aws-elasticache" -import { Connections, Port, SecurityGroup, Vpc } from "aws-cdk-lib/aws-ec2" -import { Construct } from "constructs" - -interface RedisStackProps extends StackProps { - vpc: Vpc; -} - -export class RedisStack extends Stack { - readonly cluster: CfnCacheCluster; - readonly connections: Connections; - - constructor(scope: Construct, id: string, props: RedisStackProps) { - super(scope, id, props); - - const subnetGroup = new CfnSubnetGroup(this, "SubnetGroup", { - cacheSubnetGroupName: `${id}SubnetGroup`, - description: `List of subnets used for redis cache ${id}`, - subnetIds: props.vpc.privateSubnets.map(subnet => subnet.subnetId) - }); - - const securityGroup = new SecurityGroup(this, "SecurityGroup", { - securityGroupName: `${id}SecurityGroup`, - vpc: props.vpc - }); - - this.connections = new Connections({ - securityGroups: [securityGroup], - defaultPort: Port.tcp(6379) - }); - - this.cluster = new CfnCacheCluster(this, `${id}Cluster`, { - cacheNodeType: 'cache.t2.micro', - engine: 'redis', - numCacheNodes: 1, - autoMinorVersionUpgrade: true, - cacheSubnetGroupName: subnetGroup.cacheSubnetGroupName, - vpcSecurityGroupIds: [ - securityGroup.securityGroupId, - ] - }); - } -} diff --git a/infrastructure/aws/package-lock.json b/infrastructure/aws/package-lock.json deleted file mode 100644 index 327c87a3..00000000 --- a/infrastructure/aws/package-lock.json +++ /dev/null @@ -1,4287 +0,0 @@ -{ - "name": "infrastructure", - "version": "0.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "infrastructure", - "version": "0.1.0", - "dependencies": { - "aws-cdk-lib": "2.113.0", - "constructs": "^10.0.0", - "source-map-support": "^0.5.21" - }, - "bin": { - "infrastructure": "bin/infrastructure.js" - }, - "devDependencies": { - "@types/jest": "^29.5.8", - "@types/node": "20.9.1", - "aws-cdk": "2.139.0", - "jest": "^29.7.0", - "ts-jest": "^29.1.1", - "ts-node": "^10.9.1", - "typescript": "~5.2.2" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@aws-cdk/asset-awscli-v1": { - "version": "2.2.201", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-awscli-v1/-/asset-awscli-v1-2.2.201.tgz", - "integrity": "sha512-INZqcwDinNaIdb5CtW3ez5s943nX5stGBQS6VOP2JDlOFP81hM3fds/9NDknipqfUkZM43dx+HgVvkXYXXARCQ==" - }, - "node_modules/@aws-cdk/asset-kubectl-v20": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-kubectl-v20/-/asset-kubectl-v20-2.1.2.tgz", - "integrity": "sha512-3M2tELJOxQv0apCIiuKQ4pAbncz9GuLwnKFqxifWfe77wuMxyTRPmxssYHs42ePqzap1LT6GDcPygGs+hHstLg==" - }, - "node_modules/@aws-cdk/asset-node-proxy-agent-v6": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@aws-cdk/asset-node-proxy-agent-v6/-/asset-node-proxy-agent-v6-2.0.1.tgz", - "integrity": "sha512-DDt4SLdLOwWCjGtltH4VCST7hpOI5DzieuhGZsBpZ+AgJdSI2GCjklCXm0GCTwJG/SolkL5dtQXyUKgg9luBDg==" - }, - "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", - "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.5.tgz", - "integrity": "sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.5", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.5", - "@babel/parser": "^7.23.5", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.5", - "@babel/types": "^7.23.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.5.tgz", - "integrity": "sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.23.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", - "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.5.tgz", - "integrity": "sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.5", - "@babel/types": "^7.23.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz", - "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.5.tgz", - "integrity": "sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/generator": "^7.23.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.5", - "@babel/types": "^7.23.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz", - "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.7", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", - "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", - "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.10", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.10.tgz", - "integrity": "sha512-tE4yxKEphEyxj9s4inideLHktW/x6DwesIwWZ9NN1FKf9zbJYsnhBoA9vrHA/IuIOKwPa5PcFBNV4lpMIOEzyQ==", - "dev": true, - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/node": { - "version": "20.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.1.tgz", - "integrity": "sha512-HhmzZh5LSJNS5O8jQKpJ/3ZcrrlG6L70hpGqMIAoM9YVD0YBRNWYsfwcXq8VnSjlNpCpgLzMXdiPo+dxcvSmiA==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", - "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/aws-cdk": { - "version": "2.139.0", - "resolved": "https://registry.npmjs.org/aws-cdk/-/aws-cdk-2.139.0.tgz", - "integrity": "sha512-MjMsySQbhR5yTWCphnuVQuS15UdGMV6v4XIM+C8SN7/eUOfv7BFr7QgYMUm5WXCG/f66RnY0zjJbOLRxvcjCrQ==", - "dev": true, - "bin": { - "cdk": "bin/cdk" - }, - "engines": { - "node": ">= 14.15.0" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/aws-cdk-lib": { - "version": "2.113.0", - "resolved": "https://registry.npmjs.org/aws-cdk-lib/-/aws-cdk-lib-2.113.0.tgz", - "integrity": "sha512-wZYooUd8nb3ADFtg1dSnsRt1MJmeqEK8cKOnPfCGCfm852YnVdb0qIEclURCQ4ygDJSuqiw9CE+xWVeTQTG6Dw==", - "bundleDependencies": [ - "@balena/dockerignore", - "case", - "fs-extra", - "ignore", - "jsonschema", - "minimatch", - "punycode", - "semver", - "table", - "yaml" - ], - "dependencies": { - "@aws-cdk/asset-awscli-v1": "^2.2.201", - "@aws-cdk/asset-kubectl-v20": "^2.1.2", - "@aws-cdk/asset-node-proxy-agent-v6": "^2.0.1", - "@balena/dockerignore": "^1.0.2", - "case": "1.6.3", - "fs-extra": "^11.1.1", - "ignore": "^5.3.0", - "jsonschema": "^1.4.1", - "minimatch": "^3.1.2", - "punycode": "^2.3.1", - "semver": "^7.5.4", - "table": "^6.8.1", - "yaml": "1.10.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "constructs": "^10.0.0" - } - }, - "node_modules/aws-cdk-lib/node_modules/@balena/dockerignore": { - "version": "1.0.2", - "inBundle": true, - "license": "Apache-2.0" - }, - "node_modules/aws-cdk-lib/node_modules/ajv": { - "version": "8.12.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/aws-cdk-lib/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/aws-cdk-lib/node_modules/ansi-styles": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/aws-cdk-lib/node_modules/astral-regex": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/aws-cdk-lib/node_modules/balanced-match": { - "version": "1.0.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/brace-expansion": { - "version": "1.1.11", - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/aws-cdk-lib/node_modules/case": { - "version": "1.6.3", - "inBundle": true, - "license": "(MIT OR GPL-3.0-or-later)", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/aws-cdk-lib/node_modules/color-convert": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/aws-cdk-lib/node_modules/color-name": { - "version": "1.1.4", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/concat-map": { - "version": "0.0.1", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/emoji-regex": { - "version": "8.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/fast-deep-equal": { - "version": "3.1.3", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/fs-extra": { - "version": "11.1.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/aws-cdk-lib/node_modules/graceful-fs": { - "version": "4.2.11", - "inBundle": true, - "license": "ISC" - }, - "node_modules/aws-cdk-lib/node_modules/ignore": { - "version": "5.3.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/aws-cdk-lib/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/aws-cdk-lib/node_modules/json-schema-traverse": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/jsonfile": { - "version": "6.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/aws-cdk-lib/node_modules/jsonschema": { - "version": "1.4.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/aws-cdk-lib/node_modules/lodash.truncate": { - "version": "4.4.2", - "inBundle": true, - "license": "MIT" - }, - "node_modules/aws-cdk-lib/node_modules/lru-cache": { - "version": "6.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/aws-cdk-lib/node_modules/minimatch": { - "version": "3.1.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/aws-cdk-lib/node_modules/punycode": { - "version": "2.3.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/aws-cdk-lib/node_modules/require-from-string": { - "version": "2.0.2", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/aws-cdk-lib/node_modules/semver": { - "version": "7.5.4", - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/aws-cdk-lib/node_modules/slice-ansi": { - "version": "4.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/aws-cdk-lib/node_modules/string-width": { - "version": "4.2.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/aws-cdk-lib/node_modules/strip-ansi": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/aws-cdk-lib/node_modules/table": { - "version": "6.8.1", - "inBundle": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/aws-cdk-lib/node_modules/universalify": { - "version": "2.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aws-cdk-lib/node_modules/uri-js": { - "version": "4.4.1", - "inBundle": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/aws-cdk-lib/node_modules/yallist": { - "version": "4.0.0", - "inBundle": true, - "license": "ISC" - }, - "node_modules/aws-cdk-lib/node_modules/yaml": { - "version": "1.10.2", - "inBundle": true, - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001566", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz", - "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/constructs": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/constructs/-/constructs-10.3.0.tgz", - "integrity": "sha512-vbK8i3rIb/xwZxSpTjz3SagHn1qq9BChLEfy5Hf6fB3/2eFbrwt2n9kHwQcS0CPTRBesreeAcsJfMq2229FnbQ==", - "engines": { - "node": ">= 16.14.0" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.601", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.601.tgz", - "integrity": "sha512-SpwUMDWe9tQu8JX5QCO1+p/hChAi9AE9UpoC3rcHVc+gdCGlbT3SGb5I1klgb952HRIyvt9wZhSz9bNBYz9swA==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", - "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-jest": { - "version": "29.1.1", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", - "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/ts-jest/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-jest/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/infrastructure/aws/package.json b/infrastructure/aws/package.json deleted file mode 100644 index 8571ce85..00000000 --- a/infrastructure/aws/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "infrastructure", - "version": "0.1.0", - "bin": { - "infrastructure": "bin/infrastructure.js" - }, - "scripts": { - "build": "tsc", - "watch": "tsc -w", - "cdk": "cdk" - }, - "devDependencies": { - "@types/node": "20.9.1", - "aws-cdk": "2.139.0", - "ts-node": "^10.9.1", - "typescript": "~5.2.2" - }, - "dependencies": { - "aws-cdk-lib": "2.113.0", - "constructs": "^10.0.0", - "source-map-support": "^0.5.21" - } -} diff --git a/infrastructure/aws/tsconfig.json b/infrastructure/aws/tsconfig.json deleted file mode 100644 index aaa7dc51..00000000 --- a/infrastructure/aws/tsconfig.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "module": "commonjs", - "lib": [ - "es2020", - "dom" - ], - "declaration": true, - "strict": true, - "noImplicitAny": true, - "strictNullChecks": true, - "noImplicitThis": true, - "alwaysStrict": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": false, - "inlineSourceMap": true, - "inlineSources": true, - "experimentalDecorators": true, - "strictPropertyInitialization": false, - "typeRoots": [ - "./node_modules/@types" - ] - }, - "exclude": [ - "node_modules", - "cdk.out" - ] -} diff --git a/jest.config.js b/jest.config.js index 4939f5cb..413c2d93 100644 --- a/jest.config.js +++ b/jest.config.js @@ -6,5 +6,8 @@ module.exports = { transform: { "^.+\\.ts$": "ts-jest" }, + moduleNameMapper: { + "^@/(.*)$": "/src/$1" + }, verbose: true } diff --git a/package-lock.json b/package-lock.json index c8627f84..664ce2d0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,69 +8,64 @@ "name": "shape-docs", "version": "0.1.0", "dependencies": { - "@auth0/nextjs-auth0": "^3.3.0", - "@emotion/react": "^11.11.1", - "@emotion/styled": "^11.11.0", - "@fortawesome/fontawesome-svg-core": "^6.4.2", - "@fortawesome/free-solid-svg-icons": "^6.4.2", - "@fortawesome/react-fontawesome": "^0.2.0", - "@mui/icons-material": "^5.15.10", - "@mui/material": "^5.14.18", - "@octokit/auth-app": "^6.0.1", - "@octokit/core": "^5.1.0", - "@octokit/webhooks": "^12.0.3", - "@stoplight/elements": "^7.15.3", - "auth0": "^4.1.0", - "core-js": "^3.33.3", + "@emotion/react": "^11.11.4", + "@emotion/styled": "^11.11.5", + "@fortawesome/fontawesome-svg-core": "^6.5.2", + "@fortawesome/free-solid-svg-icons": "^6.5.2", + "@fortawesome/react-fontawesome": "^0.2.2", + "@mui/icons-material": "^5.16.1", + "@mui/material": "^5.16.1", + "@octokit/auth-app": "^6.1.1", + "@octokit/core": "^5.2.0", + "@octokit/webhooks": "^12.2.0", + "@stoplight/elements": "^8.3.3", + "core-js": "^3.37.1", "encoding": "^0.1.13", "figma-squircle": "^0.3.1", "install": "^0.13.0", - "ioredis": "^5.3.2", - "mobx": "^6.12.0", - "next": "14.0.2", - "npm": "^10.2.4", - "octokit": "^3.1.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "redis-semaphore": "^5.5.0", - "redoc": "^2.1.3", - "styled-components": "^6.1.1", - "swagger-ui-react": "^5.11.7", - "swr": "^2.2.4", - "usehooks-ts": "^2.9.1", - "yaml": "^2.3.4", - "zod": "^3.22.4" + "ioredis": "^5.4.1", + "mobx": "^6.13.0", + "next": "^14.2.5", + "next-auth": "^5.0.0-beta.19", + "nodemailer": "^6.9.14", + "npm": "^10.8.2", + "octokit": "^3.2.1", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "redis-semaphore": "^5.6.0", + "redoc": "^2.1.5", + "styled-components": "^6.1.11", + "swagger-ui-react": "^5.17.14", + "swr": "^2.2.5", + "usehooks-ts": "^2.16.0", + "yaml": "^2.4.5", + "zod": "^3.23.8" }, "devDependencies": { - "@types/jest": "^29.5.8", - "@types/node": "^20.9.2", - "@types/react": "^18", - "@types/react-dom": "^18", - "@types/swagger-ui-react": "^4.18.2", - "@typescript-eslint/eslint-plugin": "^7.0.0", - "@typescript-eslint/parser": "^6.9.1", - "autoprefixer": "^10", - "eslint": "^8.56.0", - "eslint-config-next": "14.0.3", - "postcss": "^8", - "tailwindcss": "^3", - "ts-jest": "^29.1.1", - "typescript": "^5.3.2" + "@auth/pg-adapter": "^0.5.3", + "@types/jest": "^29.5.12", + "@types/node": "^20.14.10", + "@types/nodemailer": "^6.4.15", + "@types/pg": "^8.11.6", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@types/swagger-ui-react": "^4.18.3", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "autoprefixer": "^10.4.19", + "eslint": "^8.57.0", + "eslint-config-next": "^14.2.5", + "pg": "^8.12.0", + "postcss": "^8.4.39", + "tailwindcss": "^3.4.4", + "ts-jest": "^29.2.2", + "typescript": "^5.5.3" }, "engines": { "node": "20.8.1", "npm": "10.1.0" } }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", @@ -84,121 +79,78 @@ } }, "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "devOptional": true, "peer": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, - "node_modules/@auth0/nextjs-auth0": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@auth0/nextjs-auth0/-/nextjs-auth0-3.3.0.tgz", - "integrity": "sha512-zIBeb2OuLIv0SyNEJaqfBbmwsaPLi1CAlnwOIRloABPI2nX0k0Sp959FiI7uUfJkUzqW8xtCyE56MDl4bs9WLQ==", + "node_modules/@auth/core": { + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/@auth/core/-/core-0.26.3.tgz", + "integrity": "sha512-Ka6rMjWMdiQCvLW/CnYZxj4Rq2bhQ/ZtU32NLxmtyAaixGb0mRXQ9MxJUBZA7GHovbghdzu55p2Cb54qNlVFzw==", + "dev": true, "dependencies": { - "@panva/hkdf": "^1.0.2", - "cookie": "^0.6.0", - "debug": "^4.3.4", - "joi": "^17.6.0", - "jose": "^4.9.2", - "oauth4webapi": "^2.3.0", - "openid-client": "^5.2.1", - "tslib": "^2.4.0", - "url-join": "^4.0.1" - }, - "engines": { - "node": ">=16" + "@panva/hkdf": "^1.1.1", + "@types/cookie": "0.6.0", + "cookie": "0.6.0", + "jose": "^5.1.3", + "oauth4webapi": "^2.4.0", + "preact": "10.11.3", + "preact-render-to-string": "5.2.3" }, "peerDependencies": { - "next": ">=10" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" + "@simplewebauthn/browser": "^9.0.1", + "@simplewebauthn/server": "^9.0.1", + "nodemailer": "^6.8.0" }, - "engines": { - "node": ">=4" + "peerDependenciesMeta": { + "@simplewebauthn/browser": { + "optional": true + }, + "@simplewebauthn/server": { + "optional": true + }, + "nodemailer": { + "optional": true + } } }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/@auth/pg-adapter": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@auth/pg-adapter/-/pg-adapter-0.5.3.tgz", + "integrity": "sha512-Q3/yAl4ifZvsklADDfZBt31wRMaqtBLnbk5wXKV+Hp/Y4ytQclyXMV9hoUwlWUT3YKe3mdjfIdlY5vo3gF2XPw==", + "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@auth/core": "0.26.3" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" + "peerDependencies": { + "pg": "^8" } }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dependencies": { - "has-flag": "^3.0.0" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", - "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz", + "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==", "devOptional": true, "peer": true, "engines": { @@ -206,22 +158,22 @@ } }, "node_modules/@babel/core": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.0.tgz", - "integrity": "sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", + "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", "devOptional": true, "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helpers": "^7.23.0", - "@babel/parser": "^7.23.0", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.0", - "@babel/types": "^7.23.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.9", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.9", + "@babel/helpers": "^7.24.8", + "@babel/parser": "^7.24.8", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.9", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -236,18 +188,12 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "devOptional": true, - "peer": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } + "peer": true }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", @@ -260,15 +206,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", - "devOptional": true, - "peer": true, + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.9.tgz", + "integrity": "sha512-G8v3jRg+z8IwY1jHFxvCNhOPYPterE4XljNgdGTYfSTtzzwjIswIzIaSPSLs3R7yFuqnqNeay5rjICfqVr+/6A==", "dependencies": { - "@babel/types": "^7.23.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.9", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { @@ -276,15 +220,15 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz", + "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==", "devOptional": true, "peer": true, "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -312,73 +256,64 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "devOptional": true, - "peer": true - }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "devOptional": true, - "peer": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dependencies": { + "@babel/types": "^7.24.7" + }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "devOptional": true, - "peer": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "devOptional": true, - "peer": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", - "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz", + "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==", "devOptional": true, "peer": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -388,9 +323,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", "dev": true, "peer": true, "engines": { @@ -398,51 +333,50 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "devOptional": true, "peer": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "devOptional": true, - "peer": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", "devOptional": true, "peer": true, "engines": { @@ -450,103 +384,37 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz", - "integrity": "sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz", + "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==", "devOptional": true, "peer": true, "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.0", - "@babel/types": "^7.23.0" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.8" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", - "devOptional": true, - "peer": true, + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", + "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==", "bin": { "parser": "bin/babel-parser.js" }, @@ -620,13 +488,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", "dev": true, "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -730,13 +598,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", "dev": true, "peer": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -746,9 +614,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", - "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.8.tgz", + "integrity": "sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -757,9 +625,9 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.23.9.tgz", - "integrity": "sha512-oeOFTrYWdWXCvXGB5orvMTJ6gCZ9I6FBjR+M38iKNXCsPxr4xT0RTdg5uz1H7QP8pp74IzPtwritEr+JscqHXQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.8.tgz", + "integrity": "sha512-DXG/BhegtMHhnN7YPIvxWd303/9aXvYFD1TjNL3CD6tUrhI2LVsg3Lck0aql5TRH29n4sj3emcROypkZVUfSuA==", "dependencies": { "core-js-pure": "^3.30.2", "regenerator-runtime": "^0.14.0" @@ -769,59 +637,45 @@ } }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", - "devOptional": true, - "peer": true, + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", - "devOptional": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz", + "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.8", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.8", + "@babel/types": "^7.24.8", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "devOptional": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "version": "7.24.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz", + "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -836,9 +690,26 @@ "peer": true }, "node_modules/@braintree/sanitize-url": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.0.0.tgz", - "integrity": "sha512-GMu2OJiTd1HSe74bbJYQnVvELANpYiGFZELyyTM1CR0sdv5ReQAcJ/c/8pIrPab3lO11+D+EpuGLUxqz+y832g==" + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.0.2.tgz", + "integrity": "sha512-NVf/1YycDMs6+FxS0Tb/W8MjJRDQdXF+tBfDtZ5UZeiRUkTmwKc4vmYCKZTyymfJk1gnMsauvZSX/HiV9jOABw==" + }, + "node_modules/@cfaester/enzyme-adapter-react-18": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cfaester/enzyme-adapter-react-18/-/enzyme-adapter-react-18-0.8.0.tgz", + "integrity": "sha512-3Z3ThTUouHwz8oIyhTYQljEMNRFtlVyc3VOOHCbxs47U6cnXs8K9ygi/c1tv49s7MBlTXeIcuN+Ttd9aPtILFQ==", + "dependencies": { + "enzyme-shallow-equal": "^1.0.0", + "function.prototype.name": "^1.1.6", + "has": "^1.0.4", + "react-is": "^18.2.0", + "react-shallow-renderer": "^16.15.0" + }, + "peerDependencies": { + "enzyme": "^3.11.0", + "react": ">=18", + "react-dom": ">=18" + } }, "node_modules/@emotion/babel-plugin": { "version": "11.11.0", @@ -858,19 +729,6 @@ "stylis": "4.2.0" } }, - "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "node_modules/@emotion/babel-plugin/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@emotion/cache": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", @@ -889,9 +747,9 @@ "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" }, "node_modules/@emotion/is-prop-valid": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", - "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", "dependencies": { "@emotion/memoize": "^0.8.1" } @@ -902,14 +760,14 @@ "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" }, "node_modules/@emotion/react": { - "version": "11.11.1", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.1.tgz", - "integrity": "sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA==", + "version": "11.11.4", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.4.tgz", + "integrity": "sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==", "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.11.0", "@emotion/cache": "^11.11.0", - "@emotion/serialize": "^1.1.2", + "@emotion/serialize": "^1.1.3", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", "@emotion/utils": "^1.2.1", "@emotion/weak-memoize": "^0.3.1", @@ -925,9 +783,9 @@ } }, "node_modules/@emotion/serialize": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.2.tgz", - "integrity": "sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.4.tgz", + "integrity": "sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==", "dependencies": { "@emotion/hash": "^0.9.1", "@emotion/memoize": "^0.8.1", @@ -942,14 +800,14 @@ "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" }, "node_modules/@emotion/styled": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", - "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "version": "11.11.5", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.5.tgz", + "integrity": "sha512-/ZjjnaNKvuMPxcIiUkf/9SHoG4Q196DRl1w82hQ3WCsjo1IUR8uaGWrC6a87CrYAW0Kb/pK7hk8BnLgLRi9KoQ==", "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.11.0", - "@emotion/is-prop-valid": "^1.2.1", - "@emotion/serialize": "^1.1.2", + "@emotion/is-prop-valid": "^1.2.2", + "@emotion/serialize": "^1.1.4", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", "@emotion/utils": "^1.2.1" }, @@ -1002,9 +860,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", - "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -1033,48 +891,97 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@exodus/schemasafe": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.3.0.tgz", - "integrity": "sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==" - }, - "node_modules/@faker-js/faker": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-5.5.3.tgz", - "integrity": "sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw==" - }, - "node_modules/@floating-ui/core": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz", - "integrity": "sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==", "dependencies": { - "@floating-ui/utils": "^0.1.3" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@floating-ui/dom": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", - "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, "dependencies": { - "@floating-ui/core": "^1.4.2", - "@floating-ui/utils": "^0.1.3" + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@exodus/schemasafe": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.3.0.tgz", + "integrity": "sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==" + }, + "node_modules/@faker-js/faker": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-5.5.3.tgz", + "integrity": "sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw==" + }, + "node_modules/@floating-ui/core": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.4.tgz", + "integrity": "sha512-a4IowK4QkXl4SCWTGUR0INAfEOX3wtsYw3rKK5InQEHMGObkR8Xk44qYQD9P4r6HHw0iIfK6GUKECmY8sTkqRA==", + "dependencies": { + "@floating-ui/utils": "^0.2.4" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.7.tgz", + "integrity": "sha512-wmVfPG5o2xnKDU4jx/m4w5qva9FWHcnZ8BvzEe90D/RpwsJaTAVYPEPdQ8sbr/N8zZTAHlZUTQdqg8ZUbzHmng==", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.4" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.4.tgz", - "integrity": "sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", + "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", "dependencies": { - "@floating-ui/dom": "^1.5.1" + "@floating-ui/dom": "^1.0.0" }, "peerDependencies": { "react": ">=16.8.0", @@ -1082,47 +989,47 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", - "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==" + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.4.tgz", + "integrity": "sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA==" }, "node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.2.tgz", - "integrity": "sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.2.tgz", + "integrity": "sha512-gBxPg3aVO6J0kpfHNILc+NMhXnqHumFxOmjYCFfOiLZfwhnnfhtsdA2hfJlDnj+8PjAs6kKQPenOTKj3Rf7zHw==", "hasInstallScript": true, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.2.tgz", - "integrity": "sha512-gjYDSKv3TrM2sLTOKBc5rH9ckje8Wrwgx1CxAPbN5N3Fm4prfi7NsJVWd1jklp7i5uSCVwhZS5qlhMXqLrpAIg==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.2.tgz", + "integrity": "sha512-5CdaCBGl8Rh9ohNdxeeTMxIj8oc3KNBgIeLMvJosBMdslK/UnEB8rzyDRrbKdL1kDweqBPo4GT9wvnakHWucZw==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.2" + "@fortawesome/fontawesome-common-types": "6.5.2" }, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.2.tgz", - "integrity": "sha512-sYwXurXUEQS32fZz9hVCUUv/xu49PEJEyUOsA51l6PU/qVgfbTb2glsTEaJngVVT8VqBATRIdh7XVgV1JF1LkA==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.2.tgz", + "integrity": "sha512-QWFZYXFE7O1Gr1dTIp+D6UcFUF0qElOnZptpi7PBUMylJh+vFmIedVe1Ir6RM1t2tEQLLSV1k7bR4o92M+uqlw==", "hasInstallScript": true, "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.2" + "@fortawesome/fontawesome-common-types": "6.5.2" }, "engines": { "node": ">=6" } }, "node_modules/@fortawesome/react-fontawesome": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz", - "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.2.tgz", + "integrity": "sha512-EnkrprPNqI6SXJl//m29hpaNzOp1bruISWaOiRtkMi/xSvHJlzc2j2JAYS7egxt/EbjSNV/k6Xy0AQI6vB2+1g==", "dependencies": { "prop-types": "^15.8.1" }, @@ -1131,31 +1038,41 @@ "react": ">=16.3" } }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { - "@hapi/hoek": "^9.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10.10.0" + "node": "*" } }, "node_modules/@humanwhocodes/module-importer": { @@ -1172,9 +1089,10 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true }, "node_modules/@ioredis/commands": { @@ -1182,6 +1100,47 @@ "resolved": "https://registry.npmjs.org/@ioredis/commands/-/commands-1.2.0.tgz", "integrity": "sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==" }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -1317,6 +1276,82 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@jest/core": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", @@ -1365,6 +1400,82 @@ } } }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@jest/environment": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", @@ -1485,10 +1596,132 @@ } } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "dependencies": { "@sinclair/typebox": "^0.27.8" @@ -1571,6 +1804,89 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "peer": true + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@jest/types": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", @@ -1588,48 +1904,114 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "devOptional": true, + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "devOptional": true, + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "devOptional": true, + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "devOptional": true, + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -1646,16 +2028,16 @@ "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==" }, "node_modules/@mui/base": { - "version": "5.0.0-beta.24", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.24.tgz", - "integrity": "sha512-bKt2pUADHGQtqWDZ8nvL2Lvg2GNJyd/ZUgZAJoYzRgmnxBL9j36MSlS3+exEdYkikcnvVafcBtD904RypFKb0w==", - "dependencies": { - "@babel/runtime": "^7.23.2", - "@floating-ui/react-dom": "^2.0.4", - "@mui/types": "^7.2.9", - "@mui/utils": "^5.14.18", + "version": "5.0.0-beta.40", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz", + "integrity": "sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@floating-ui/react-dom": "^2.0.8", + "@mui/types": "^7.2.14", + "@mui/utils": "^5.15.14", "@popperjs/core": "^2.11.8", - "clsx": "^2.0.0", + "clsx": "^2.1.0", "prop-types": "^15.8.1" }, "engines": { @@ -1663,7 +2045,7 @@ }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0", @@ -1677,18 +2059,18 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.14.18", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.18.tgz", - "integrity": "sha512-yFpF35fEVDV81nVktu0BE9qn2dD/chs7PsQhlyaV3EnTeZi9RZBuvoEfRym1/jmhJ2tcfeWXiRuHG942mQXJJQ==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.16.1.tgz", + "integrity": "sha512-62Jq7ACYi/55Kjkh/nVfEL3F3ytTYTsdB8MGJ9iI+eRQv+Aoem5CPUAzQihUo25qqh1VkVu9/jQn3dFbyrXHgw==", "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" } }, "node_modules/@mui/icons-material": { - "version": "5.15.10", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.10.tgz", - "integrity": "sha512-9cF8oUHZKo9oQ7EQ3pxPELaZuZVmphskU4OI6NiJNDVN7zcuvrEsuWjYo1Zh4fLiC39Nrvm30h/B51rcUjvSGA==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.16.1.tgz", + "integrity": "sha512-ogQPweYba4+5XZykilwxn2/oS78uwoQ0BVBpOhhCJo0ooZsqTTsalhzP2qD/RdGqMQ8xyXPz1sYM2djTruVVVA==", "dependencies": { "@babel/runtime": "^7.23.9" }, @@ -1711,21 +2093,21 @@ } }, "node_modules/@mui/material": { - "version": "5.14.18", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.18.tgz", - "integrity": "sha512-y3UiR/JqrkF5xZR0sIKj6y7xwuEiweh9peiN3Zfjy1gXWXhz5wjlaLdoxFfKIEBUFfeQALxr/Y8avlHH+B9lpQ==", - "dependencies": { - "@babel/runtime": "^7.23.2", - "@mui/base": "5.0.0-beta.24", - "@mui/core-downloads-tracker": "^5.14.18", - "@mui/system": "^5.14.18", - "@mui/types": "^7.2.9", - "@mui/utils": "^5.14.18", - "@types/react-transition-group": "^4.4.8", - "clsx": "^2.0.0", - "csstype": "^3.1.2", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.16.1.tgz", + "integrity": "sha512-BGTgJRb0d/hX9tus5CEb6N/Fo8pE4tYA+s9r4/S0PCrtZ3urCLXlTH4qrAvggQbiF1cYRAbHCkVHoQ+4Pdxl+w==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/base": "5.0.0-beta.40", + "@mui/core-downloads-tracker": "^5.16.1", + "@mui/system": "^5.16.1", + "@mui/types": "^7.2.15", + "@mui/utils": "^5.16.1", + "@types/react-transition-group": "^4.4.10", + "clsx": "^2.1.0", + "csstype": "^3.1.3", "prop-types": "^15.8.1", - "react-is": "^18.2.0", + "react-is": "^18.3.1", "react-transition-group": "^4.4.5" }, "engines": { @@ -1733,7 +2115,7 @@ }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { "@emotion/react": "^11.5.0", @@ -1754,18 +2136,13 @@ } } }, - "node_modules/@mui/material/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "node_modules/@mui/private-theming": { - "version": "5.14.18", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.18.tgz", - "integrity": "sha512-WSgjqRlzfHU+2Rou3HlR2Gqfr4rZRsvFgataYO3qQ0/m6gShJN+lhVEvwEiJ9QYyVzMDvNpXZAcqp8Y2Vl+PAw==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.16.1.tgz", + "integrity": "sha512-2EGCKnAlq9vRIFj61jNWNXlKAxXp56577OVvsts7fAqRx+G1y6F+N7Q198SBaz8jYQeGKSz8ZMXK/M3FqjdEyw==", "dependencies": { - "@babel/runtime": "^7.23.2", - "@mui/utils": "^5.14.18", + "@babel/runtime": "^7.23.9", + "@mui/utils": "^5.16.1", "prop-types": "^15.8.1" }, "engines": { @@ -1773,7 +2150,7 @@ }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0", @@ -1786,13 +2163,13 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.14.18", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.18.tgz", - "integrity": "sha512-pW8bpmF9uCB5FV2IPk6mfbQCjPI5vGI09NOLhtGXPeph/4xIfC3JdIX0TILU0WcTs3aFQqo6s2+1SFgIB9rCXA==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.16.1.tgz", + "integrity": "sha512-JwWUBaYR8HHCFefSeos0z6JoTbu0MnjAuNHu4QoDgPxl2EE70XH38CsKay66Iy0QkNWmGTRXVU2sVFgUOPL/Dw==", "dependencies": { - "@babel/runtime": "^7.23.2", + "@babel/runtime": "^7.23.9", "@emotion/cache": "^11.11.0", - "csstype": "^3.1.2", + "csstype": "^3.1.3", "prop-types": "^15.8.1" }, "engines": { @@ -1800,7 +2177,7 @@ }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { "@emotion/react": "^11.4.1", @@ -1817,17 +2194,17 @@ } }, "node_modules/@mui/system": { - "version": "5.14.18", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.18.tgz", - "integrity": "sha512-hSQQdb3KF72X4EN2hMEiv8EYJZSflfdd1TRaGPoR7CIAG347OxCslpBUwWngYobaxgKvq6xTrlIl+diaactVww==", - "dependencies": { - "@babel/runtime": "^7.23.2", - "@mui/private-theming": "^5.14.18", - "@mui/styled-engine": "^5.14.18", - "@mui/types": "^7.2.9", - "@mui/utils": "^5.14.18", - "clsx": "^2.0.0", - "csstype": "^3.1.2", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.16.1.tgz", + "integrity": "sha512-VaFcClC+uhvIEzhzcNmh9FRBvrG9IPjsOokhj6U1HPZsFnLzHV7AD7dJcT6LxWoiIZj9Ej0GK+MGh/b8+BtSlQ==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/private-theming": "^5.16.1", + "@mui/styled-engine": "^5.16.1", + "@mui/types": "^7.2.15", + "@mui/utils": "^5.16.1", + "clsx": "^2.1.0", + "csstype": "^3.1.3", "prop-types": "^15.8.1" }, "engines": { @@ -1835,7 +2212,7 @@ }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { "@emotion/react": "^11.5.0", @@ -1856,9 +2233,9 @@ } }, "node_modules/@mui/types": { - "version": "7.2.9", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.9.tgz", - "integrity": "sha512-k1lN/PolaRZfNsRdAqXtcR71sTnv3z/VCCGPxU8HfdftDkzi335MdJ6scZxvofMAd/K/9EbzCZTFBmlNpQVdCg==", + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.15.tgz", + "integrity": "sha512-nbo7yPhtKJkdf9kcVOF8JZHPZTmqXjJ/tI0bdWgHg5tp9AnIN4Y7f7wm9T+0SyGYJk76+GYZ8Q5XaTYAsUHN0Q==", "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0" }, @@ -1869,21 +2246,21 @@ } }, "node_modules/@mui/utils": { - "version": "5.14.18", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.18.tgz", - "integrity": "sha512-HZDRsJtEZ7WMSnrHV9uwScGze4wM/Y+u6pDVo+grUjt5yXzn+wI8QX/JwTHh9YSw/WpnUL80mJJjgCnWj2VrzQ==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.16.1.tgz", + "integrity": "sha512-4UQzK46tAEYs2xZv79hRiIc3GxZScd00kGPDadNrGztAEZlmSaUY8cb9ITd2xCiTfzsx5AN6DH8aaQ8QEKJQeQ==", "dependencies": { - "@babel/runtime": "^7.23.2", - "@types/prop-types": "^15.7.10", + "@babel/runtime": "^7.23.9", + "@types/prop-types": "^15.7.12", "prop-types": "^15.8.1", - "react-is": "^18.2.0" + "react-is": "^18.3.1" }, "engines": { "node": ">=12.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/mui" + "url": "https://opencollective.com/mui-org" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0", @@ -1895,29 +2272,24 @@ } } }, - "node_modules/@mui/utils/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, "node_modules/@next/env": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.2.tgz", - "integrity": "sha512-HAW1sljizEaduEOes/m84oUqeIDAUYBR1CDwu2tobNlNDFP3cSm9d6QsOsGeNlIppU1p/p1+bWbYCbvwjFiceA==" + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.5.tgz", + "integrity": "sha512-/zZGkrTOsraVfYjGP8uM0p6r0BDT6xWpkjdVbcz66PJVSpwXX3yNiRycxAuDfBKGWBrZBXRuK/YVlkNgxHGwmA==" }, "node_modules/@next/eslint-plugin-next": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.3.tgz", - "integrity": "sha512-j4K0n+DcmQYCVnSAM+UByTVfIHnYQy2ODozfQP+4RdwtRDfobrIvKq1K4Exb2koJ79HSSa7s6B2SA8T/1YR3RA==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.5.tgz", + "integrity": "sha512-LY3btOpPh+OTIpviNojDpUdIbHW9j0JBYBjsIp8IxtDFfYFyORvw3yNq6N231FVqQA7n7lwaf7xHbVJlA1ED7g==", "dev": true, "dependencies": { - "glob": "7.1.7" + "glob": "10.3.10" } }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.2.tgz", - "integrity": "sha512-i+jQY0fOb8L5gvGvojWyZMfQoQtDVB2kYe7fufOEiST6sicvzI2W5/EXo4lX5bLUjapHKe+nFxuVv7BA+Pd7LQ==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.5.tgz", + "integrity": "sha512-/9zVxJ+K9lrzSGli1///ujyRfon/ZneeZ+v4ptpiPoOU+GKZnm8Wj8ELWU1Pm7GHltYRBklmXMTUqM/DqQ99FQ==", "cpu": [ "arm64" ], @@ -1930,9 +2302,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.2.tgz", - "integrity": "sha512-zRCAO0d2hW6gBEa4wJaLn+gY8qtIqD3gYd9NjruuN98OCI6YyelmhWVVLlREjS7RYrm9OUQIp/iVJFeB6kP1hg==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.5.tgz", + "integrity": "sha512-vXHOPCwfDe9qLDuq7U1OYM2wUY+KQ4Ex6ozwsKxp26BlJ6XXbHleOUldenM67JRyBfVjv371oneEvYd3H2gNSA==", "cpu": [ "x64" ], @@ -1945,9 +2317,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.2.tgz", - "integrity": "sha512-tSJmiaon8YaKsVhi7GgRizZoV0N1Sx5+i+hFTrCKKQN7s3tuqW0Rov+RYdPhAv/pJl4qiG+XfSX4eJXqpNg3dA==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.5.tgz", + "integrity": "sha512-vlhB8wI+lj8q1ExFW8lbWutA4M2ZazQNvMWuEDqZcuJJc78iUnLdPPunBPX8rC4IgT6lIx/adB+Cwrl99MzNaA==", "cpu": [ "arm64" ], @@ -1960,9 +2332,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.2.tgz", - "integrity": "sha512-dXJLMSEOwqJKcag1BeX1C+ekdPPJ9yXbWIt3nAadhbLx5CjACoB2NQj9Xcqu2tmdr5L6m34fR+fjGPs+ZVPLzA==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.5.tgz", + "integrity": "sha512-NpDB9NUR2t0hXzJJwQSGu1IAOYybsfeB+LxpGsXrRIb7QOrYmidJz3shzY8cM6+rO4Aojuef0N/PEaX18pi9OA==", "cpu": [ "arm64" ], @@ -1975,9 +2347,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.2.tgz", - "integrity": "sha512-WC9KAPSowj6as76P3vf1J3mf2QTm3Wv3FBzQi7UJ+dxWjK3MhHVWsWUo24AnmHx9qDcEtHM58okgZkXVqeLB+Q==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.5.tgz", + "integrity": "sha512-8XFikMSxWleYNryWIjiCX+gU201YS+erTUidKdyOVYi5qUQo/gRxv/3N1oZFCgqpesN6FPeqGM72Zve+nReVXQ==", "cpu": [ "x64" ], @@ -1990,9 +2362,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.2.tgz", - "integrity": "sha512-KSSAwvUcjtdZY4zJFa2f5VNJIwuEVnOSlqYqbQIawREJA+gUI6egeiRu290pXioQXnQHYYdXmnVNZ4M+VMB7KQ==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.5.tgz", + "integrity": "sha512-6QLwi7RaYiQDcRDSU/os40r5o06b5ue7Jsk5JgdRBGGp8l37RZEh9JsLSM8QF0YDsgcosSeHjglgqi25+m04IQ==", "cpu": [ "x64" ], @@ -2005,9 +2377,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.2.tgz", - "integrity": "sha512-2/O0F1SqJ0bD3zqNuYge0ok7OEWCQwk55RPheDYD0va5ij7kYwrFkq5ycCRN0TLjLfxSF6xI5NM6nC5ux7svEQ==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.5.tgz", + "integrity": "sha512-1GpG2VhbspO+aYoMOQPQiqc/tG3LzmsdBH0LhnDS3JrtDx2QmzXe0B6mSZZiN3Bq7IOMXxv1nlsjzoS1+9mzZw==", "cpu": [ "arm64" ], @@ -2020,9 +2392,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.2.tgz", - "integrity": "sha512-vJI/x70Id0oN4Bq/R6byBqV1/NS5Dl31zC+lowO8SDu1fHmUxoAdILZR5X/sKbiJpuvKcCrwbYgJU8FF/Gh50Q==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.5.tgz", + "integrity": "sha512-Igh9ZlxwvCDsu6438FXlQTHlRno4gFpJzqPjSIBZooD22tKeI4fE/YMRoHVJHmrQ2P5YL1DoZ0qaOKkbeFWeMg==", "cpu": [ "ia32" ], @@ -2035,9 +2407,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.2.tgz", - "integrity": "sha512-Ut4LXIUvC5m8pHTe2j0vq/YDnTEyq6RSR9vHYPqnELrDapPhLNz9Od/L5Ow3J8RNDWpEnfCiQXuVdfjlNEJ7ug==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.5.tgz", + "integrity": "sha512-tEQ7oinq1/CjSG9uSTerca3v4AZ+dFa+4Yu6ihaG8Ud8ddqLQgFGcnwYls13H5X5CPDPZJdYxyeMui6muOLd4g==", "cpu": [ "x64" ], @@ -2085,9 +2457,9 @@ } }, "node_modules/@octokit/app": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/@octokit/app/-/app-14.0.2.tgz", - "integrity": "sha512-NCSCktSx+XmjuSUVn2dLfqQ9WIYePGP95SDJs4I9cn/0ZkeXcPkaoCLl64Us3dRKL2ozC7hArwze5Eu+/qt1tg==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@octokit/app/-/app-14.1.0.tgz", + "integrity": "sha512-g3uEsGOQCBl1+W1rgfwoRFUIR6PtvB2T1E4RpygeUU5LrLvlOqcxrt5lfykIeRpUPpupreGJUYl70fqMDXdTpw==", "dependencies": { "@octokit/auth-app": "^6.0.0", "@octokit/auth-unauthenticated": "^5.0.0", @@ -2101,42 +2473,61 @@ "node": ">= 18" } }, - "node_modules/@octokit/auth-app": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-6.0.1.tgz", - "integrity": "sha512-tjCD4nzQNZgmLH62+PSnTF6eGerisFgV4v6euhqJik6yWV96e1ZiiGj+NXIqbgnpjLmtnBqVUrNyGKu3DoGEGA==", + "node_modules/@octokit/app/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==" + }, + "node_modules/@octokit/app/node_modules/@octokit/plugin-paginate-rest": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz", + "integrity": "sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==", "dependencies": { - "@octokit/auth-oauth-app": "^7.0.0", - "@octokit/auth-oauth-user": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", - "deprecation": "^2.3.1", - "lru-cache": "^10.0.0", - "universal-github-app-jwt": "^1.1.1", - "universal-user-agent": "^6.0.0" + "@octokit/types": "^12.6.0" }, "engines": { "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "5" } }, - "node_modules/@octokit/auth-app/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "node_modules/@octokit/app/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, + "node_modules/@octokit/auth-app": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-6.1.1.tgz", + "integrity": "sha512-VrTtzRpyuT5nYGUWeGWQqH//hqEZDV+/yb6+w5wmWpmmUA1Tx950XsAc2mBBfvusfcdF2E7w8jZ1r1WwvfZ9pA==", + "dependencies": { + "@octokit/auth-oauth-app": "^7.1.0", + "@octokit/auth-oauth-user": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", + "deprecation": "^2.3.1", + "lru-cache": "^10.0.0", + "universal-github-app-jwt": "^1.1.2", + "universal-user-agent": "^6.0.0" + }, "engines": { - "node": "14 || >=16.14" + "node": ">= 18" } }, "node_modules/@octokit/auth-oauth-app": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-7.0.1.tgz", - "integrity": "sha512-RE0KK0DCjCHXHlQBoubwlLijXEKfhMhKm9gO56xYvFmP1QTMb+vvwRPmQLLx0V+5AvV9N9I3lr1WyTzwL3rMDg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-7.1.0.tgz", + "integrity": "sha512-w+SyJN/b0l/HEb4EOPRudo7uUOSW51jcK1jwLa+4r7PA8FPFpoxEnHBHMITqCsc/3Vo2qqFjgQfz/xUUvsSQnA==", "dependencies": { - "@octokit/auth-oauth-device": "^6.0.0", - "@octokit/auth-oauth-user": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/types": "^12.0.0", + "@octokit/auth-oauth-device": "^6.1.0", + "@octokit/auth-oauth-user": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", "@types/btoa-lite": "^1.0.0", "btoa-lite": "^1.0.0", "universal-user-agent": "^6.0.0" @@ -2146,13 +2537,13 @@ } }, "node_modules/@octokit/auth-oauth-device": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-6.0.1.tgz", - "integrity": "sha512-yxU0rkL65QkjbqQedgVx3gmW7YM5fF+r5uaSj9tM/cQGVqloXcqP2xK90eTyYvl29arFVCW8Vz4H/t47mL0ELw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-6.1.0.tgz", + "integrity": "sha512-FNQ7cb8kASufd6Ej4gnJ3f1QB5vJitkoV1O0/g6e6lUsQ7+VsSNRHRmFScN2tV4IgKA12frrr/cegUs0t+0/Lw==", "dependencies": { - "@octokit/oauth-methods": "^4.0.0", - "@octokit/request": "^8.0.0", - "@octokit/types": "^12.0.0", + "@octokit/oauth-methods": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -2160,14 +2551,14 @@ } }, "node_modules/@octokit/auth-oauth-user": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-4.0.1.tgz", - "integrity": "sha512-N94wWW09d0hleCnrO5wt5MxekatqEJ4zf+1vSe8MKMrhZ7gAXKFOKrDEZW2INltvBWJCyDUELgGRv8gfErH1Iw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-4.1.0.tgz", + "integrity": "sha512-FrEp8mtFuS/BrJyjpur+4GARteUCrPeR/tZJzD8YourzoVhRics7u7we/aDcKv+yywRNwNi/P4fRi631rG/OyQ==", "dependencies": { - "@octokit/auth-oauth-device": "^6.0.0", - "@octokit/oauth-methods": "^4.0.0", - "@octokit/request": "^8.0.2", - "@octokit/types": "^12.0.0", + "@octokit/auth-oauth-device": "^6.1.0", + "@octokit/oauth-methods": "^4.1.0", + "@octokit/request": "^8.3.1", + "@octokit/types": "^13.0.0", "btoa-lite": "^1.0.0", "universal-user-agent": "^6.0.0" }, @@ -2195,16 +2586,29 @@ "node": ">= 18" } }, + "node_modules/@octokit/auth-unauthenticated/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==" + }, + "node_modules/@octokit/auth-unauthenticated/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, "node_modules/@octokit/core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.1.0.tgz", - "integrity": "sha512-BDa2VAMLSh3otEiaMJ/3Y36GU4qf6GI+VivQ/P41NC6GHcdxpKlqV0ikSZ5gdQsmS3ojXeRx5vasgNTinF0Q4g==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz", + "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==", "dependencies": { "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", + "@octokit/graphql": "^7.1.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.0.0", "before-after-hook": "^2.2.0", "universal-user-agent": "^6.0.0" }, @@ -2213,12 +2617,11 @@ } }, "node_modules/@octokit/endpoint": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.1.tgz", - "integrity": "sha512-hRlOKAovtINHQPYHZlfyFwaM8OyetxeoC81lAkBy34uLb8exrZB50SQdeW3EROqiY9G9yxQTpp5OHTV54QD+vA==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.5.tgz", + "integrity": "sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==", "dependencies": { - "@octokit/types": "^12.0.0", - "is-plain-object": "^5.0.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -2226,12 +2629,12 @@ } }, "node_modules/@octokit/graphql": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz", - "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.0.tgz", + "integrity": "sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==", "dependencies": { - "@octokit/request": "^8.0.1", - "@octokit/types": "^12.0.0", + "@octokit/request": "^8.3.0", + "@octokit/types": "^13.0.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -2239,9 +2642,9 @@ } }, "node_modules/@octokit/oauth-app": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-6.0.0.tgz", - "integrity": "sha512-bNMkS+vJ6oz2hCyraT9ZfTpAQ8dZNqJJQVNaKjPLx4ue5RZiFdU1YWXguOPR8AaSHS+lKe+lR3abn2siGd+zow==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-6.1.0.tgz", + "integrity": "sha512-nIn/8eUJ/BKUVzxUXd5vpzl1rwaVxMyYbQkNZjHrF7Vk/yu98/YDF/N2KeWO7uZ0g3b5EyiFXFkZI8rJ+DH1/g==", "dependencies": { "@octokit/auth-oauth-app": "^7.0.0", "@octokit/auth-oauth-user": "^4.0.0", @@ -2265,42 +2668,29 @@ } }, "node_modules/@octokit/oauth-methods": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-4.0.0.tgz", - "integrity": "sha512-dqy7BZLfLbi3/8X8xPKUKZclMEK9vN3fK5WF3ortRvtplQTszFvdAGbTo71gGLO+4ZxspNiLjnqdd64Chklf7w==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-4.1.0.tgz", + "integrity": "sha512-4tuKnCRecJ6CG6gr0XcEXdZtkTDbfbnD5oaHBmLERTjTMZNi2CbfEHZxPU41xXLDG4DfKf+sonu00zvKI9NSbw==", "dependencies": { "@octokit/oauth-authorization-url": "^6.0.2", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^11.0.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.0.0", "btoa-lite": "^1.0.0" }, "engines": { "node": ">= 18" } }, - "node_modules/@octokit/oauth-methods/node_modules/@octokit/openapi-types": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", - "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==" - }, - "node_modules/@octokit/oauth-methods/node_modules/@octokit/types": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-11.1.0.tgz", - "integrity": "sha512-Fz0+7GyLm/bHt8fwEqgvRBWwIV1S6wRRyq+V6exRKLVWaKGsuy6H9QFYeBVDV7rK6fO3XwHgQOPxv+cLj2zpXQ==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, "node_modules/@octokit/openapi-types": { - "version": "19.0.2", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.0.2.tgz", - "integrity": "sha512-8li32fUDUeml/ACRp/njCWTsk5t17cfTM1jp9n08pBrqs5cDFJubtjsSnuz56r5Tad6jdEPJld7LxNp9dNcyjQ==" + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==" }, "node_modules/@octokit/plugin-paginate-graphql": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-4.0.0.tgz", - "integrity": "sha512-7HcYW5tP7/Z6AETAPU14gp5H5KmCPT3hmJrS/5tO7HIgbwenYmgw4OY9Ma54FDySuxMwD+wsJlxtuGWwuZuItA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-4.0.1.tgz", + "integrity": "sha512-R8ZQNmrIKKpHWC6V2gum4x9LG2qF1RxRjo27gjQcG3j+vf2tLsEfE7I/wRWEPzYMaenr1M+qDAtNcwZve1ce1A==", "engines": { "node": ">= 18" }, @@ -2309,31 +2699,31 @@ } }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.1.4.tgz", - "integrity": "sha512-MvZx4WvfhBnt7PtH5XE7HORsO7bBk4er1FgRIUr1qJ89NR2I6bWjGyKsxk8z42FPQ34hFQm0Baanh4gzdZR4gQ==", + "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz", + "integrity": "sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==", "dependencies": { - "@octokit/types": "^12.3.0" + "@octokit/types": "^13.5.0" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": "5" } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.0.0.tgz", - "integrity": "sha512-16VkwE2v6rXU+/gBsYC62M8lKWOphY5Lg4wpjYnVE9Zbu0J6IwiT5kILoj1YOB53XLmcJR+Nqp8DmifOPY4H3g==", + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz", + "integrity": "sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==", "dependencies": { - "@octokit/types": "^12.0.0" + "@octokit/types": "^13.5.0" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": "^5" } }, "node_modules/@octokit/plugin-retry": { @@ -2352,12 +2742,25 @@ "@octokit/core": ">=5" } }, + "node_modules/@octokit/plugin-retry/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==" + }, + "node_modules/@octokit/plugin-retry/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, "node_modules/@octokit/plugin-throttling": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.0.0.tgz", - "integrity": "sha512-OkMbHYUidj81q92YRkPzWmwXkEtsI3KOcSkNm763aqUOh9IEplyX05XjKAdZFANAvaYH0Q4JBZwu4h2VnPVXZA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.2.0.tgz", + "integrity": "sha512-nOpWtLayKFpgqmgD0y3GqXafMFuKcA4tRPZIfu7BArd2lEZeb1988nhWhwx4aZWmjDmUfdgVf7W+Tt4AmvRmMQ==", "dependencies": { - "@octokit/types": "^12.0.0", + "@octokit/types": "^12.2.0", "bottleneck": "^2.15.3" }, "engines": { @@ -2367,15 +2770,27 @@ "@octokit/core": "^5.0.0" } }, + "node_modules/@octokit/plugin-throttling/node_modules/@octokit/openapi-types": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", + "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==" + }, + "node_modules/@octokit/plugin-throttling/node_modules/@octokit/types": { + "version": "12.6.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", + "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "dependencies": { + "@octokit/openapi-types": "^20.0.0" + } + }, "node_modules/@octokit/request": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.3.tgz", - "integrity": "sha512-iUvXP4QmysS8kyE/a4AGwR0A+tHDVxgW6TmPd2ci8/Xc8KjlBtTKSDpZlUT5Y4S4Nu+eM8LvbOYjVAp/sz3Gpg==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.0.tgz", + "integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==", "dependencies": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", - "is-plain-object": "^5.0.0", + "@octokit/endpoint": "^9.0.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" }, "engines": { @@ -2383,11 +2798,11 @@ } }, "node_modules/@octokit/request-error": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.1.tgz", - "integrity": "sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.0.tgz", + "integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==", "dependencies": { - "@octokit/types": "^12.0.0", + "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", "once": "^1.4.0" }, @@ -2396,21 +2811,21 @@ } }, "node_modules/@octokit/types": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.3.0.tgz", - "integrity": "sha512-nJ8X2HRr234q3w/FcovDlA+ttUU4m1eJAourvfUUtwAWeqL8AsyRqfnLvVnYn3NFbUnsmzQCzLNdFerPwdmcDQ==", + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz", + "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", "dependencies": { - "@octokit/openapi-types": "^19.0.2" + "@octokit/openapi-types": "^22.2.0" } }, "node_modules/@octokit/webhooks": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-12.0.7.tgz", - "integrity": "sha512-g9HKed5x+72yBZcTRAYNiR7Ane/iOwNEjd9sdu+Jvrcc/Z0FdkjYBMfBmQdowbOhHM4Nek9zpGC5u3C3Wxfhsg==", + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-12.2.0.tgz", + "integrity": "sha512-CyuLJ0/P7bKZ+kIYw+fnkeVdhUzNuDKgNSI7pU/m7Nod0T7kP+s4s2f0pNmG9HL8/RZN1S0ZWTDll3VTMrFLAw==", "dependencies": { "@octokit/request-error": "^5.0.0", - "@octokit/webhooks-methods": "^4.0.0", - "@octokit/webhooks-types": "7.1.0", + "@octokit/webhooks-methods": "^4.1.0", + "@octokit/webhooks-types": "7.4.0", "aggregate-error": "^3.1.0" }, "engines": { @@ -2418,26 +2833,35 @@ } }, "node_modules/@octokit/webhooks-methods": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-4.0.0.tgz", - "integrity": "sha512-M8mwmTXp+VeolOS/kfRvsDdW+IO0qJ8kYodM/sAysk093q6ApgmBXwK1ZlUvAwXVrp/YVHp6aArj4auAxUAOFw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-4.1.0.tgz", + "integrity": "sha512-zoQyKw8h9STNPqtm28UGOYFE7O6D4Il8VJwhAtMHFt2C4L0VQT1qGKLeefUOqHNs1mNRYSadVv7x0z8U2yyeWQ==", "engines": { "node": ">= 18" } }, "node_modules/@octokit/webhooks-types": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-7.1.0.tgz", - "integrity": "sha512-y92CpG4kFFtBBjni8LHoV12IegJ+KFxLgKRengrVjKmGE5XMeCuGvlfRe75lTRrgXaG6XIWJlFpIDTlkoJsU8w==" + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-7.4.0.tgz", + "integrity": "sha512-FE2V+QZ2UYlh+9wWd5BPLNXG+J/XUD/PPq0ovS+nCcGX4+3qVbi3jYOmCTW48hg9SBBLtInx9+o7fFt4H5iP0Q==" }, "node_modules/@panva/hkdf": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.1.1.tgz", - "integrity": "sha512-dhPeilub1NuIG0X5Kvhh9lH4iW3ZsHlnzwgwbOlgwQ2wG1IqFzsgHqmKPk3WzsdWAeaxKJxgM0+W433RmN45GA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.2.1.tgz", + "integrity": "sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==", "funding": { "url": "https://github.com/sponsors/panva" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", @@ -2532,20 +2956,20 @@ } }, "node_modules/@react-types/checkbox": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.6.0.tgz", - "integrity": "sha512-vgbuJzQpVCNT5AZWV0OozXCnihqrXxoZKfJFIw0xro47pT2sn3t5UC4RA9wfjDGMoK4frw1K/4HQLsQIOsPBkw==", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.8.1.tgz", + "integrity": "sha512-5/oVByPw4MbR/8QSdHCaalmyWC71H/QGgd4aduTJSaNi825o+v/hsN2/CH7Fq9atkLKsC8fvKD00Bj2VGaKriQ==", "dependencies": { - "@react-types/shared": "^3.22.0" + "@react-types/shared": "^3.23.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } }, "node_modules/@react-types/shared": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.22.0.tgz", - "integrity": "sha512-yVOekZWbtSmmiThGEIARbBpnmUIuePFlLyctjvCbgJgGhz8JnEJOipLQ/a4anaWfzAgzSceQP8j/K+VOOePleA==", + "version": "3.23.1", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.23.1.tgz", + "integrity": "sha512-5d+3HbFDxGZjhbMBeFHRQhexMFt4pUce3okyRtUVKbbedQFUrtXSBg9VszgF2RTeQDKDkMCIQDtz5ccP/Lk1gw==", "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" } @@ -2570,14 +2994,20 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, + "node_modules/@redocly/config": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.6.3.tgz", + "integrity": "sha512-hGWJgCsXRw0Ow4rplqRlUQifZvoSwZipkYnt11e3SeH1Eb23VUIDBcRuaQOUqy1wn0eevXkU2GzzQ8fbKdQ7Mg==" + }, "node_modules/@redocly/openapi-core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.2.0.tgz", - "integrity": "sha512-Ccft2n/JiF4u2crmj1cdDzPq6C40U7NgLZ+p/BxzAFXbfrddr/5FN0HMJPHT/op329qqv2P2jUrXsV2Bp+rzEQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.18.0.tgz", + "integrity": "sha512-kcbt7w23pcVYGLnJkh2LZpXF1OX5RDM4DLOtwPug2HvRE8ow/YfY8ZEM1YCFlA41D8rBPBVP918cYeIx4BVUbw==", "dependencies": { "@redocly/ajv": "^8.11.0", - "@types/node": "^14.11.8", + "@redocly/config": "^0.6.2", "colorette": "^1.2.0", + "https-proxy-agent": "^7.0.4", "js-levenshtein": "^1.1.6", "js-yaml": "^4.1.0", "lodash.isequal": "^4.5.0", @@ -2587,20 +3017,8 @@ "yaml-ast-parser": "0.0.43" }, "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@redocly/openapi-core/node_modules/@types/node": { - "version": "14.18.63", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", - "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==" - }, - "node_modules/@redocly/openapi-core/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" + "node": ">=14.19.0", + "npm": ">=7.0.0" } }, "node_modules/@redocly/openapi-core/node_modules/minimatch": { @@ -2623,9 +3041,9 @@ } }, "node_modules/@rushstack/eslint-patch": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz", - "integrity": "sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.3.tgz", + "integrity": "sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==", "dev": true }, "node_modules/@sentry/browser": { @@ -2752,24 +3170,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -2777,9 +3177,9 @@ "dev": true }, "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, "peer": true, "dependencies": { @@ -2797,19 +3197,19 @@ } }, "node_modules/@stoplight/elements": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@stoplight/elements/-/elements-7.15.3.tgz", - "integrity": "sha512-aMmjjUvktuSsy+taYj0UhmW4OYLqhBkRpkGfPuGTi71F8843on1bTGiTpeyABDmb1q7TmrBZRCZJfc+OB+G13g==", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@stoplight/elements/-/elements-8.3.3.tgz", + "integrity": "sha512-n0V2Clh+B4VZUZlIObQJAIPBq/GgmKYIpd2fyk6cMDmKh3IZh5Y230mvmrD/LuG9xfoIeqoSG0p6pn62JdYl9g==", "dependencies": { - "@stoplight/elements-core": "~7.15.1", - "@stoplight/http-spec": "^6.0.0", + "@stoplight/elements-core": "~8.3.3", + "@stoplight/http-spec": "^7.1.0", "@stoplight/json": "^3.18.1", - "@stoplight/mosaic": "^1.46.1", - "@stoplight/types": "^14.0.0", - "@stoplight/yaml": "^4.2.3", + "@stoplight/mosaic": "^1.53.1", + "@stoplight/types": "^14.1.1", + "@stoplight/yaml": "^4.3.0", "classnames": "^2.2.6", "file-saver": "^2.0.5", - "lodash": "^4.17.19", + "lodash": "^4.17.21", "react-query": "^3.34.19", "react-router-dom": "^5.2.0" }, @@ -2822,29 +3222,29 @@ } }, "node_modules/@stoplight/elements-core": { - "version": "7.15.1", - "resolved": "https://registry.npmjs.org/@stoplight/elements-core/-/elements-core-7.15.1.tgz", - "integrity": "sha512-ZwwnhgMuoKheIQyku6hZfa6sHZPo1t0zGuk8kr7uNeU7OcCfuH0tf6DIIrzJU/dn2KTiQolUbuKMokPtzXL0YA==", - "dependencies": { - "@stoplight/http-spec": "^6.0.0", - "@stoplight/json": "^3.18.1", - "@stoplight/json-schema-ref-parser": "^9.0.5", - "@stoplight/json-schema-sampler": "0.2.3", - "@stoplight/json-schema-tree": "^2.3.0", - "@stoplight/json-schema-viewer": "^4.14.0", - "@stoplight/markdown-viewer": "^5.6.0", - "@stoplight/mosaic": "^1.46.1", - "@stoplight/mosaic-code-editor": "^1.46.1", - "@stoplight/mosaic-code-viewer": "^1.46.1", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/@stoplight/elements-core/-/elements-core-8.3.3.tgz", + "integrity": "sha512-DoqQ02Iu1kFSeeLQ5eQrzkIV9BpA+Zc7gTrktyTFu1Ec1idmtY+PvIc/O7lXAub3f8XMkzY4h8b2U2R2X1XcNA==", + "dependencies": { + "@stoplight/http-spec": "^7.1.0", + "@stoplight/json": "^3.21.0", + "@stoplight/json-schema-ref-parser": "^9.2.7", + "@stoplight/json-schema-sampler": "0.3.0", + "@stoplight/json-schema-tree": "^4.0.0", + "@stoplight/json-schema-viewer": "4.16.1", + "@stoplight/markdown-viewer": "^5.7.0", + "@stoplight/mosaic": "^1.53.1", + "@stoplight/mosaic-code-editor": "^1.53.1", + "@stoplight/mosaic-code-viewer": "^1.53.1", "@stoplight/path": "^1.3.2", - "@stoplight/react-error-boundary": "^2.0.0", - "@stoplight/types": "^14.0.0", - "@stoplight/yaml": "^4.2.3", + "@stoplight/react-error-boundary": "^3.0.0", + "@stoplight/types": "^14.1.1", + "@stoplight/yaml": "^4.3.0", "classnames": "^2.2.6", "httpsnippet-lite": "^3.0.5", "jotai": "1.3.9", "json-schema": "^0.4.0", - "lodash": "^4.17.19", + "lodash": "^4.17.21", "nanoid": "^3.1.32", "prop-types": "^15.7.2", "react-query": "^3.34.19", @@ -2864,22 +3264,20 @@ } }, "node_modules/@stoplight/http-spec": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@stoplight/http-spec/-/http-spec-6.0.2.tgz", - "integrity": "sha512-6uQxW0ycJF3cUSthsv7u3EClGn6AgqkLW9Q0dlrxOYJ1iH5Rx6SJEGYtmnkbTc/iXX/LygyoQ40lk8ebpqSegQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@stoplight/http-spec/-/http-spec-7.1.0.tgz", + "integrity": "sha512-Z2XqKX2SV8a1rrgSzFqccX2TolfcblT+l4pNvUU+THaLl50tKDoeidwWWZTzYUzqU0+UV97ponvqEbWWN3PaXg==", "dependencies": { "@stoplight/json": "^3.18.1", "@stoplight/json-schema-generator": "1.0.2", - "@stoplight/types": "14.0.0", + "@stoplight/types": "14.1.0", "@types/json-schema": "7.0.11", "@types/swagger-schema-official": "~2.0.22", "@types/type-is": "^1.6.3", "fnv-plus": "^1.3.1", - "lodash.isequalwith": "^4.4.0", - "lodash.pick": "^4.4.0", - "lodash.pickby": "^4.6.0", + "lodash": "^4.17.21", "openapi3-ts": "^2.0.2", - "postman-collection": "^4.1.2", + "postman-collection": "^4.1.3", "tslib": "^2.6.2", "type-is": "^1.6.18" }, @@ -2887,10 +3285,17 @@ "node": ">=14.13" } }, - "node_modules/@stoplight/http-spec/node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + "node_modules/@stoplight/http-spec/node_modules/@stoplight/types": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-14.1.0.tgz", + "integrity": "sha512-fL8Nzw03+diALw91xHEHA5Q0WCGeW9WpPgZQjodNUWogAgJ56aJs03P9YzsQ1J6fT7/XjDqHMgn7/RlsBzB/SQ==", + "dependencies": { + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" + }, + "engines": { + "node": "^12.20 || >=14.13" + } }, "node_modules/@stoplight/json": { "version": "3.21.0", @@ -2923,15 +3328,10 @@ "json-schema-generator": "bin/cli.js" } }, - "node_modules/@stoplight/json-schema-generator/node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, "node_modules/@stoplight/json-schema-merge-allof": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/@stoplight/json-schema-merge-allof/-/json-schema-merge-allof-0.7.8.tgz", - "integrity": "sha512-JTDt6GYpCWQSb7+UW1P91IAp/pcLWis0mmEzWVFcLsrNgtUYK7JLtYYz0ZPSR4QVL0fJ0YQejM+MPq5iNDFO4g==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@stoplight/json-schema-merge-allof/-/json-schema-merge-allof-0.8.0.tgz", + "integrity": "sha512-g8e0s43v96Xbzvd8d6KKUuJTO16CS2oJglJrviUi8ASIUxzFvAJqTHWLtGmpTryisQopqg1evXGJfi0+164+Qw==", "dependencies": { "compute-lcm": "^1.1.0", "json-schema-compare": "^0.2.2", @@ -2953,21 +3353,21 @@ } }, "node_modules/@stoplight/json-schema-sampler": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@stoplight/json-schema-sampler/-/json-schema-sampler-0.2.3.tgz", - "integrity": "sha512-57PqNll9y/Rkfp4/t1AkVfz5C0PIrDd8i2AW/N0XU5wVJ50kIrmJg3BD+PzmVcrF3lXFH7/LojoOUkzLZXMJpg==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@stoplight/json-schema-sampler/-/json-schema-sampler-0.3.0.tgz", + "integrity": "sha512-G7QImi2xr9+8iPEg0D9YUi1BWhIiiEm19aMb91oWBSdxuhezOAqqRP3XNY6wczHV9jLWW18f+KkghTy9AG0BQA==", "dependencies": { "@types/json-schema": "^7.0.7", "json-pointer": "^0.6.1" } }, "node_modules/@stoplight/json-schema-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@stoplight/json-schema-tree/-/json-schema-tree-2.3.1.tgz", - "integrity": "sha512-99jviuRT+ZFIoRBX7nw3JAyojifKc4pf0WP8c3HC/SXSO0qUO1tzbsY0MSVOSONdHBWJVVkeQ8vplULe/eb0lQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@stoplight/json-schema-tree/-/json-schema-tree-4.0.0.tgz", + "integrity": "sha512-SAGtof+ihIdPqETR+7XXOaqZJcrbSih/xEahaw5t1nXk5sVW6ss2l5A1WCIuvtvnQiUKnBfanmZU4eoM1ZvItg==", "dependencies": { "@stoplight/json": "^3.12.0", - "@stoplight/json-schema-merge-allof": "^0.7.8", + "@stoplight/json-schema-merge-allof": "^0.8.0", "@stoplight/lifecycle": "^2.3.2", "@types/json-schema": "^7.0.7", "magic-error": "0.0.1" @@ -2977,12 +3377,12 @@ } }, "node_modules/@stoplight/json-schema-viewer": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/@stoplight/json-schema-viewer/-/json-schema-viewer-4.14.0.tgz", - "integrity": "sha512-cI7HmlsCFAXcKKYDsLJsA7g5PyF1xgM0pe4qOxH6p63UKxnFuhS1mDANURAzWiNTECVz+DfFmWqcLdfpCJoEQw==", + "version": "4.16.1", + "resolved": "https://registry.npmjs.org/@stoplight/json-schema-viewer/-/json-schema-viewer-4.16.1.tgz", + "integrity": "sha512-gQ1v9/Dj1VP43zERuZoFMOr7RQDBZlgfF7QFh+R0sadP6W30oYFJtD7y2PG2gIQDohKElVuPjhFUbVH/81MnSg==", "dependencies": { "@stoplight/json": "^3.20.1", - "@stoplight/json-schema-tree": "^2.3.0", + "@stoplight/json-schema-tree": "^4.0.0", "@stoplight/react-error-boundary": "^2.0.0", "@types/json-schema": "^7.0.7", "classnames": "^2.2.6", @@ -3001,6 +3401,21 @@ "react-dom": ">=16.8" } }, + "node_modules/@stoplight/json-schema-viewer/node_modules/@stoplight/react-error-boundary": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@stoplight/react-error-boundary/-/react-error-boundary-2.0.0.tgz", + "integrity": "sha512-r9cyaaH2h0kFe5c0aP+yJuY9CyXgfbBaMO6660M/wRQXqM49K5Ul7kexE4ei2cqYgo+Cd6ALl6RXSZFYwf2kCA==", + "dependencies": { + "@sentry/react": "^6.13.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/@stoplight/json-schema-viewer/node_modules/jotai": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/jotai/-/jotai-1.13.1.tgz", @@ -3107,9 +3522,9 @@ } }, "node_modules/@stoplight/markdown-viewer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@stoplight/markdown-viewer/-/markdown-viewer-5.6.0.tgz", - "integrity": "sha512-vKHn1Bv9nafBYQWtNLlrRZ1aKqFRTOdfWUAhCSV1ZH4iqxGa+O1OWWTBbeOF5du8vcrWu1tTrXoCXkZjmq1NlA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@stoplight/markdown-viewer/-/markdown-viewer-5.7.0.tgz", + "integrity": "sha512-SOFmEapj/RAJ6fUqgZO41diB9ocEFxhrSL7C8aJKNoYoHme0xxk5DK53DvFNBayEEXnf9e/YmKPfwJjFdKUilA==", "dependencies": { "@rehooks/component-size": "^1.0.3", "@stoplight/markdown": "^3.1.3", @@ -3136,59 +3551,19 @@ "react-dom": ">=16.14" } }, - "node_modules/@stoplight/markdown-viewer/node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/@stoplight/markdown-viewer/node_modules/hast-util-parse-selector": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", - "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", + "node_modules/@stoplight/markdown-viewer/node_modules/@stoplight/react-error-boundary": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@stoplight/react-error-boundary/-/react-error-boundary-2.0.0.tgz", + "integrity": "sha512-r9cyaaH2h0kFe5c0aP+yJuY9CyXgfbBaMO6660M/wRQXqM49K5Ul7kexE4ei2cqYgo+Cd6ALl6RXSZFYwf2kCA==", "dependencies": { - "@types/hast": "^2.0.0" + "@sentry/react": "^6.13.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@stoplight/markdown-viewer/node_modules/hastscript": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", - "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^3.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" + "engines": { + "node": ">=10" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@stoplight/markdown-viewer/node_modules/property-information": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.0.tgz", - "integrity": "sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/@stoplight/markdown-viewer/node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" } }, "node_modules/@stoplight/markdown/node_modules/@stoplight/types": { @@ -3204,9 +3579,9 @@ } }, "node_modules/@stoplight/mosaic": { - "version": "1.46.1", - "resolved": "https://registry.npmjs.org/@stoplight/mosaic/-/mosaic-1.46.1.tgz", - "integrity": "sha512-ziMwdgbB77jvOoQEHr/IyqheaCzVGSkfTeBv0t6RJGADDkp+Oj8ItwDECXP7CA12VfxCgbKrGb33iyHCE/tVYA==", + "version": "1.53.2", + "resolved": "https://registry.npmjs.org/@stoplight/mosaic/-/mosaic-1.53.2.tgz", + "integrity": "sha512-fhSU1jqXLP3+9DghzrAHBgL+TfzaRDCwwg9+6Xe9Iz2LikOguAMPfBriantrtKOoM0pfUBOjHEuTO8QPw6uLKw==", "dependencies": { "@fortawesome/fontawesome-svg-core": "^6.1.1", "@fortawesome/react-fontawesome": "^0.2.0", @@ -3223,7 +3598,6 @@ "clsx": "^1.1.1", "copy-to-clipboard": "^3.3.1", "dom-helpers": "^3.3.1", - "focus-trap-react": "^10.2.3", "lodash.get": "^4.4.2", "nano-memoize": "^1.2.1", "polished": "^4.1.3", @@ -3239,9 +3613,9 @@ } }, "node_modules/@stoplight/mosaic-code-editor": { - "version": "1.46.1", - "resolved": "https://registry.npmjs.org/@stoplight/mosaic-code-editor/-/mosaic-code-editor-1.46.1.tgz", - "integrity": "sha512-rG2Zhwe0P9KJ8Lv/s7u4zsXQwX6znYz0DSs+Cq1cVJCgztOpAs1x6ISmOWdVLFJLiPioElrY+sCAwjxJcWnUuQ==", + "version": "1.53.2", + "resolved": "https://registry.npmjs.org/@stoplight/mosaic-code-editor/-/mosaic-code-editor-1.53.2.tgz", + "integrity": "sha512-1+dwU6BuDVCZJmiyJt6zj/xo/LeDsisEWQNq1rdvCFpVagAZDMXatbRNm8zIKkSDD+oww2+mCnp2fuNqTLCC1A==", "dependencies": { "@fortawesome/fontawesome-svg-core": "^6.1.1", "@fortawesome/react-fontawesome": "^0.2.0", @@ -3250,13 +3624,12 @@ "@react-types/radio": "3.1.2", "@react-types/shared": "3.9.0", "@react-types/switch": "3.1.2", - "@stoplight/mosaic": "1.46.1", - "@stoplight/mosaic-code-viewer": "1.46.1", + "@stoplight/mosaic": "1.53.2", + "@stoplight/mosaic-code-viewer": "1.53.2", "@stoplight/types": "^13.7.0", "clsx": "^1.1.1", "copy-to-clipboard": "^3.3.1", "dom-helpers": "^3.3.1", - "focus-trap-react": "^10.2.3", "lodash.get": "^4.4.2", "nano-memoize": "^1.2.1", "polished": "^4.1.3", @@ -3324,18 +3697,10 @@ "node": ">=6" } }, - "node_modules/@stoplight/mosaic-code-editor/node_modules/dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "dependencies": { - "@babel/runtime": "^7.1.2" - } - }, "node_modules/@stoplight/mosaic-code-viewer": { - "version": "1.46.1", - "resolved": "https://registry.npmjs.org/@stoplight/mosaic-code-viewer/-/mosaic-code-viewer-1.46.1.tgz", - "integrity": "sha512-upz74Tq4p6/heg9fWYvFzlcmaajzgXybw9I4/Y8oFTxAkkOlVkHLiUKdUlZUWxWUZQNJXFSK0EMMIf+qcWZv2A==", + "version": "1.53.2", + "resolved": "https://registry.npmjs.org/@stoplight/mosaic-code-viewer/-/mosaic-code-viewer-1.53.2.tgz", + "integrity": "sha512-BtiAfotKmy4TtwrXTD2ktruFEwTLPwW3wt/KUQAWpGnwmTcJ9cXph2hsskFKAt1G866UzsKE3OKOAIv9GKHOdQ==", "dependencies": { "@fortawesome/fontawesome-svg-core": "^6.1.1", "@fortawesome/react-fontawesome": "^0.2.0", @@ -3344,12 +3709,11 @@ "@react-types/radio": "3.1.2", "@react-types/shared": "3.9.0", "@react-types/switch": "3.1.2", - "@stoplight/mosaic": "1.46.1", + "@stoplight/mosaic": "1.53.2", "@stoplight/types": "^13.7.0", "clsx": "^1.1.1", "copy-to-clipboard": "^3.3.1", "dom-helpers": "^3.3.1", - "focus-trap-react": "^10.2.3", "lodash.get": "^4.4.2", "nano-memoize": "^1.2.1", "polished": "^4.1.3", @@ -3417,14 +3781,6 @@ "node": ">=6" } }, - "node_modules/@stoplight/mosaic-code-viewer/node_modules/dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "dependencies": { - "@babel/runtime": "^7.1.2" - } - }, "node_modules/@stoplight/mosaic/node_modules/@react-types/button": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/@react-types/button/-/button-3.4.1.tgz", @@ -3491,12 +3847,12 @@ } }, "node_modules/@stoplight/mosaic/node_modules/@types/react": { - "version": "17.0.71", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.71.tgz", - "integrity": "sha512-lfqOu9mp16nmaGRrS8deS2Taqhd5Ih0o92Te5Ws6I1py4ytHBcXLqh0YIqVsViqwVI5f+haiFM6hju814BzcmA==", + "version": "17.0.80", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.80.tgz", + "integrity": "sha512-LrgHIu2lEtIo8M7d1FcI3BdwXWoRQwMoXOZ7+dPTW0lYREjmlHl3P0U1VD0i/9tppOuv8/sam7sOjx34TxSFbA==", "dependencies": { "@types/prop-types": "*", - "@types/scheduler": "*", + "@types/scheduler": "^0.16", "csstype": "^3.0.2" } }, @@ -3516,14 +3872,6 @@ "node": ">=6" } }, - "node_modules/@stoplight/mosaic/node_modules/dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "dependencies": { - "@babel/runtime": "^7.1.2" - } - }, "node_modules/@stoplight/ordered-object-literal": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.5.tgz", @@ -3541,24 +3889,20 @@ } }, "node_modules/@stoplight/react-error-boundary": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@stoplight/react-error-boundary/-/react-error-boundary-2.0.0.tgz", - "integrity": "sha512-r9cyaaH2h0kFe5c0aP+yJuY9CyXgfbBaMO6660M/wRQXqM49K5Ul7kexE4ei2cqYgo+Cd6ALl6RXSZFYwf2kCA==", - "dependencies": { - "@sentry/react": "^6.13.2" - }, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@stoplight/react-error-boundary/-/react-error-boundary-3.0.0.tgz", + "integrity": "sha512-lFuTpGy2fu4hffmRTnJot1URa9/ifVLyPPQg62WW3RYo9LsxxHF0PrnFzAeXEQb40g1kc55S/oX6zQc8YJrKXg==", "engines": { "node": ">=10" }, "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" + "react": ">=16.8" } }, "node_modules/@stoplight/types": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-14.0.0.tgz", - "integrity": "sha512-w7Ejau6TaB7RqR0vWzGJSdmgLEYD2frjgbHPZoxgGQwAq/R8Qh/D9p9Bl9JFdii+YTL5xoDjyX0c1WDRlbMV8g==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-14.1.1.tgz", + "integrity": "sha512-/kjtr+0t0tjKr+heVfviO9FrU/uGLc+QNX3fHJc19xsCNYqU7lVhaXxDmEID9BZTjG+/r9pK9xP/xU02XGg65g==", "dependencies": { "@types/json-schema": "^7.0.4", "utility-types": "^3.10.0" @@ -3568,13 +3912,13 @@ } }, "node_modules/@stoplight/yaml": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@stoplight/yaml/-/yaml-4.2.3.tgz", - "integrity": "sha512-Mx01wjRAR9C7yLMUyYFTfbUf5DimEpHMkRDQ1PKLe9dfNILbgdxyrncsOXM3vCpsQ1Hfj4bPiGl+u4u6e9Akqw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@stoplight/yaml/-/yaml-4.3.0.tgz", + "integrity": "sha512-JZlVFE6/dYpP9tQmV0/ADfn32L9uFarHWxfcRhReKUnljz1ZiUM5zpX+PH8h5CJs6lao3TuFqnPm9IJJCEkE2w==", "dependencies": { - "@stoplight/ordered-object-literal": "^1.0.1", - "@stoplight/types": "^13.0.0", - "@stoplight/yaml-ast-parser": "0.0.48", + "@stoplight/ordered-object-literal": "^1.0.5", + "@stoplight/types": "^14.1.1", + "@stoplight/yaml-ast-parser": "0.0.50", "tslib": "^2.2.0" }, "engines": { @@ -3582,471 +3926,451 @@ } }, "node_modules/@stoplight/yaml-ast-parser": { - "version": "0.0.48", - "resolved": "https://registry.npmjs.org/@stoplight/yaml-ast-parser/-/yaml-ast-parser-0.0.48.tgz", - "integrity": "sha512-sV+51I7WYnLJnKPn2EMWgS4EUfoP4iWEbrWwbXsj0MZCB/xOK8j6+C9fntIdOM50kpx45ZLC3s6kwKivWuqvyg==" - }, - "node_modules/@stoplight/yaml/node_modules/@stoplight/types": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.20.0.tgz", - "integrity": "sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==", - "dependencies": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" - }, - "engines": { - "node": "^12.20 || >=14.13" - } + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@stoplight/yaml-ast-parser/-/yaml-ast-parser-0.0.50.tgz", + "integrity": "sha512-Pb6M8TDO9DtSVla9yXSTAxmo9GVEouq5P40DWXdOie69bXogZTkgvopCq+yEvTMA0F6PEvdJmbtTV3ccIp11VQ==" }, "node_modules/@swagger-api/apidom-ast": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-0.95.0.tgz", - "integrity": "sha512-hYv4gED2aG/4eZXloenPaS2EW9hEewfkm9GCJ+3zchYWNctHgcq5O/LHQfYzvlsldNoNWSFEVtjb9v2rs8qA0g==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-1.0.0-alpha.6.tgz", + "integrity": "sha512-uzDNIeTLFeITzK7yX9PSsu3dl92rHP/gKMNAlJhmDRr7r+OLr5dCpAzyZ0WvONRxjxR8Otj5LX4AD12+EX32fg==", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-error": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", + "@swagger-api/apidom-error": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", "unraw": "^3.0.0" } }, "node_modules/@swagger-api/apidom-core": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-0.95.0.tgz", - "integrity": "sha512-SWnFJX8sUP2cAgH1c62bOpQZm2ye0Dbgrgd+NZ8umSWtkz9rFLrSvBgy8QobaDMDvmQo9Kv60srnP3tvu5A9oQ==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-1.0.0-alpha.6.tgz", + "integrity": "sha512-5u7dK3+8cF2h5bHEI/qrA6JrfXX+HIHSmUgPGbeMAqSCEfpsjnsngXK6gHtd4ktLlPz3TplNZAQl88wIp+39nw==", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-ast": "^0.95.0", - "@swagger-api/apidom-error": "^0.95.0", - "@types/ramda": "~0.29.6", + "@swagger-api/apidom-ast": "^1.0.0-alpha.6", + "@swagger-api/apidom-error": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", "minim": "~0.23.8", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", "short-unique-id": "^5.0.2", - "stampit": "^4.3.2" + "ts-mixer": "^6.0.3" } }, "node_modules/@swagger-api/apidom-error": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-error/-/apidom-error-0.95.0.tgz", - "integrity": "sha512-yh8TZZrtqR60g91ed/lu1KRDF2Z+Vv82dpf859TU1xJL7mhcPQG7aptc129cfUkla/+d9edNJDHNsnWUQPw7+A==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-error/-/apidom-error-1.0.0-alpha.6.tgz", + "integrity": "sha512-eOcqaXwLitjp5CIGYR0W2oM6p4UiTL7EjNdkCcfrELKHdgNS6U7kZdl3KCBlOuMb14CijwtZNEJbIGhhGZUYHg==", "dependencies": { "@babel/runtime-corejs3": "^7.20.7" } }, "node_modules/@swagger-api/apidom-json-pointer": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-0.95.0.tgz", - "integrity": "sha512-aqszOa4UenYC5B7MlcU0tkL4yQJ0OSJhUS0uBpKJatao9mZZ0yRv8eB2TIMeAN0MkuDfyYphkKdmAVgIxZ9SeQ==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-1.0.0-alpha.6.tgz", + "integrity": "sha512-8ULBcQRQ1UPgqJ+ZuuKjmeKeuxqbuIUHwWHRRA848jK5+IHmNw/Cp68MhNiwYXLmTLkTIGaDubcOplMeHCxSyA==", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-error": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-error": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-ns-api-design-systems": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-0.95.0.tgz", - "integrity": "sha512-fkLwhp+MSIZXr5Fu1oOGuQDTguLIDv6OOKthXYqWnfh/UVpdZgaClXxxDkXaW6EnIiPujtj5j4i52/y5z+fBew==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-1.0.0-alpha.6.tgz", + "integrity": "sha512-JRiImw3XKrfm22pzlx7uM6XYJtWM71QkCLy86gOTBFybWgTOCECnN4c8jFBnYl6KYuIb2VV9kXZs38xjK4NfBQ==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-error": "^0.95.0", - "@swagger-api/apidom-ns-openapi-3-1": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-error": "^1.0.0-alpha.6", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", "ts-mixer": "^6.0.3" } }, "node_modules/@swagger-api/apidom-ns-asyncapi-2": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-0.95.0.tgz", - "integrity": "sha512-WuETyax2c2wRJporR5tdcPgyhwxH/2H2UxydZMuk6cp/ix4784tcourpXdEKDH9X15kE8qnQTWT5KMQmw6R1og==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-1.0.0-alpha.6.tgz", + "integrity": "sha512-I8Yq+AmJPUJihGneBv1/m/ly+2dp4FJiCxW/auRQSicvYIV7hoBO5qGZqcEEoVt7OpuhFbFqI2pwnambz90Uvg==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-ns-json-schema-draft-7": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", "ts-mixer": "^6.0.3" } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-4": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-0.95.0.tgz", - "integrity": "sha512-JtePOEMfyGCyqWuzW+IAoCjaXJfQT/GVqcQSB/tHltU8yFOKygEnguV1eGeu22HvIk1UlE9K55XZ8SVu76pO5w==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-1.0.0-alpha.6.tgz", + "integrity": "sha512-E8JjqdDgopnLd4HXEXGSrc6rkbDyB8Qk6sYgmyT6lB8caFUMRdJ5Rp57fPePETnVpegb8cAuKjBdjTImX1gQ3Q==", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-ast": "^0.95.0", - "@swagger-api/apidom-core": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", - "stampit": "^4.3.2" + "@swagger-api/apidom-ast": "^1.0.0-alpha.6", + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.4" } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-6": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-0.95.0.tgz", - "integrity": "sha512-KPtt6Dp7UOGm/MCYe2s8VsNR9usmk52Wj0FX6hkb4x8Mc6+RFvIM4grZuHuo+kgpaGC5NPC86LMsaB2joy3MfQ==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-1.0.0-alpha.6.tgz", + "integrity": "sha512-uzYmV65nn7i6nlp7Kp7ldGfAoXWPPquIocoHLWDBTx5sPdS+ALu2T2yvytav0z6StKeV+gU2HZjMLVRWdLzLZA==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-error": "^0.95.0", - "@swagger-api/apidom-ns-json-schema-draft-4": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", - "stampit": "^4.3.2" + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-error": "^1.0.0-alpha.6", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.4" } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-7": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-0.95.0.tgz", - "integrity": "sha512-J7zrSmw308cTkZBjEN2RFyejFVNUEcLZGbo6Pfh3Is4BTBnStAc0/sHumLOPx1r1asJNXFul9AxPnMZxtMKzfQ==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-1.0.0-alpha.6.tgz", + "integrity": "sha512-dWEVUVMByOs5JIMsgcceETOYH3nTiAHoIIjXbYeHP6m6HaNP8IE5ex0ZgfmQc29uH0E6H+6aYAv1flfvy56rVQ==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-error": "^0.95.0", - "@swagger-api/apidom-ns-json-schema-draft-6": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", - "stampit": "^4.3.2" + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-error": "^1.0.0-alpha.6", + "@swagger-api/apidom-ns-json-schema-draft-6": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.4" } }, "node_modules/@swagger-api/apidom-ns-openapi-2": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-0.95.0.tgz", - "integrity": "sha512-kag5DA32gptTtMd6fl0sKz0G9V7Ys1HA/eGlsPQVIdG2XYNn0DI+9Xek/D2cajuXJkdt907Ja+7ySGIoFvq49w==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-1.0.0-alpha.6.tgz", + "integrity": "sha512-sPwvOY+FGd5yEAijYLupmIYwf4HIpW6yegzrz6uUvGmONZpiCNIidCu+2m6GyYCoZ/lQZdPMw29DuU2O4iiDKw==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-error": "^0.95.0", - "@swagger-api/apidom-ns-json-schema-draft-4": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-error": "^1.0.0-alpha.6", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", "ts-mixer": "^6.0.3" } }, "node_modules/@swagger-api/apidom-ns-openapi-3-0": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-0.95.0.tgz", - "integrity": "sha512-IAsnRx/ViUXVBZqivTG6C91roY48QlnuVejQps/gBzxHNkeb2OBalF+9BCXG0C8mj0fxqouNnz1clfpgOP+sGQ==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-1.0.0-alpha.6.tgz", + "integrity": "sha512-kE4s17j69DDvXrf7xeRTunmSQJLiX52fCX1YnfC81e1IPm3q/mdpkZiysM87FuJQQj522fX2G+QUIJlDkD5U9w==", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-error": "^0.95.0", - "@swagger-api/apidom-ns-json-schema-draft-4": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-error": "^1.0.0-alpha.6", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", "ts-mixer": "^6.0.3" } }, "node_modules/@swagger-api/apidom-ns-openapi-3-1": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-0.95.0.tgz", - "integrity": "sha512-oPVelaDpHSSZtLXMA13SwZa+3KTeO7qtaqs1XQD3EYYZbyRoNl74xIHeDCKEi94MnzpwnjIW81mFI8u2vmW5dA==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-1.0.0-alpha.6.tgz", + "integrity": "sha512-2QA2z9beyaVyZDOXbLg4Nu8o8xKWo9L0WHWOP+hg/haGRyyPHXgyg2XdwRuFBozBI9wBaIfEg1lvNC+J0taDjg==", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-ast": "^0.95.0", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-ns-openapi-3-0": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", + "@swagger-api/apidom-ast": "^1.0.0-alpha.6", + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-json-pointer": "^1.0.0-alpha.6", + "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", "ts-mixer": "^6.0.3" } }, "node_modules/@swagger-api/apidom-ns-workflows-1": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-workflows-1/-/apidom-ns-workflows-1-0.95.0.tgz", - "integrity": "sha512-YQZl0Mm2ELjEG6uJtxEbKKRXsZO0ftAWdLwFmIPbIPfesGilOYJFCe8vEcKKwP3lLq8A4pyn3VCsF457JXiL5Q==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-workflows-1/-/apidom-ns-workflows-1-1.0.0-alpha.6.tgz", + "integrity": "sha512-9kXU7hUdz25TTGF8b1pmKGugkET4gkW7ING+qSUjU5nWdrkdUIVuq1o8qjaZwRDRvkNynnlRbWHqXeWgRWyi/w==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-ns-openapi-3-1": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", "ts-mixer": "^6.0.3" } }, "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-json": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-0.95.0.tgz", - "integrity": "sha512-rWmtf29bHnRNoE561nE3uPqpxnMqgDBnRq+veYyVRsIhg1AtpDpgl4nYJUzZ2Tg9Zn5Y/WBuZLeBhj06xVCgPg==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-1.0.0-alpha.6.tgz", + "integrity": "sha512-7THBmhvwTmsb1eFXvj/tbIK91g5tzkvhxGSUVbpGt1zApEFmKvjZbDhGnMx15CImIUURW1QZ6TQ/cZ7jRWk8kQ==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-ns-api-design-systems": "^0.95.0", - "@swagger-api/apidom-parser-adapter-json": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-ns-api-design-systems": "^1.0.0-alpha.6", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-yaml": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-0.95.0.tgz", - "integrity": "sha512-5GRO2Fc+q5w3iNo0QBsge4n/WNr3IY2SRvrQKDHrXVF+tG6PFoKh+EXAOxzgUrcCy2A9R/bj2V+4xcdtZvxdxw==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-1.0.0-alpha.6.tgz", + "integrity": "sha512-xD0aRgRGPaM1J+H3nRg8qP6bQ4fNtsUopoc6JEKzi7NJxd+r/mZV4pVa+Gr6CS+xv4d6TJ53UCJmGsjgmR1bQw==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-ns-api-design-systems": "^0.95.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-ns-api-design-systems": "^1.0.0-alpha.6", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-json-2": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-0.95.0.tgz", - "integrity": "sha512-bd1zc3s50J7o7CYz8TMqco/Vs8HxpbMAYgiCFaKe6kbGjQtjnOFI9qcs+PkwhPrD6ici/B1IXrcPKhHGlTtwFw==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-1.0.0-alpha.6.tgz", + "integrity": "sha512-BVouq+7XiS2/HmNHd/CHHieyRT5mTN+kqYACnKV/TAzC5+fK3t2mcdng4I81m3Mzb9OJ/VpHiEVlSZiWZoPU/Q==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-ns-asyncapi-2": "^0.95.0", - "@swagger-api/apidom-parser-adapter-json": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-alpha.6", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-0.95.0.tgz", - "integrity": "sha512-zSs9mGSWgufjLfg0P3qCj/wSvSf7rro3a5/wQ/lS4jpKuh1T0B+jHOS4kQZmXL32NJk/uSBGI4YLWodxaaOUCw==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-1.0.0-alpha.6.tgz", + "integrity": "sha512-CsUu5t6ijflz0DDjdoxE/OUbSjBAeh5v2zfMRVOfGdnNDhDhrE/3P0VTpdKdVmbWQ1ueIbq2QaC8thQ+Jcxwyg==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-ns-asyncapi-2": "^0.95.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-alpha.6", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-json": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-0.95.0.tgz", - "integrity": "sha512-KWFOfSCZNUyIRgU6+3xc2xQu4GlnGnh42LO25DSvbJmlWAaU/9sbW4FBBWF4Z3gIjw32nCj6AoGLdbjQvp8PtQ==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-1.0.0-alpha.6.tgz", + "integrity": "sha512-ruEkgvJSmBUUsGZdYiHeczekTWCJSWHrNvhAczY6c1ZFhpCukZg9tCqdVhnni/LPp4r4h7BdNldjY7dtrUkCiQ==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-ast": "^0.95.0", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-error": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", + "@swagger-api/apidom-ast": "^1.0.0-alpha.6", + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-error": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", "tree-sitter": "=0.20.4", "tree-sitter-json": "=0.20.2", "web-tree-sitter": "=0.20.3" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-2": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-0.95.0.tgz", - "integrity": "sha512-0MFlrN/6VnnSUv2xeRxRYQv72rbO019D1gh4t8QB93LfOfFD/k8HxiSkChJaJEbKq+dZfW9Hw/tWhCMROOHNYQ==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-1.0.0-alpha.6.tgz", + "integrity": "sha512-RLvjHvjURnqfWxEdLFOW6agBS8CzVyV9++Vg4TSB9gPCNsTlz5w9iy82NYvApExHJIlN55Ga92OZ6CuWXJ8iKw==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-ns-openapi-2": "^0.95.0", - "@swagger-api/apidom-parser-adapter-json": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-ns-openapi-2": "^1.0.0-alpha.6", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-0": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-0.95.0.tgz", - "integrity": "sha512-i7seQZpAQSHnYmDh7304eZqus/iNq8csw2c/rvhveZAw8vVuJzTVv/euPdPHdMfrdilHsIS0ZIHtZOwNfQD3kw==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-1.0.0-alpha.6.tgz", + "integrity": "sha512-cf9+M9vySTrUZW+m2SR04IMnl+5QX6P7S2xgFF705ySOMkPiA9GTgAZJFqwzncAEPovkp7/A24adxyhFz52iZg==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-ns-openapi-3-0": "^0.95.0", - "@swagger-api/apidom-parser-adapter-json": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-alpha.6", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-1": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-0.95.0.tgz", - "integrity": "sha512-PapPDHPuyRYidnVZUsHEc36vCuK0FSNE7DFtDfh2QTOKg37taKuPTq5DNG0Az4C2sHey1M3AdeZEJOQUcsmvAw==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-1.0.0-alpha.6.tgz", + "integrity": "sha512-Z7TCUWB/VotmHU5kjUcAlu3qMHCVr1pOpnsuI01I6vCHGJOqUZPelnNqVyw5tjiVbgwDCKzXiPSQo9gGG1HoGA==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-ns-openapi-3-1": "^0.95.0", - "@swagger-api/apidom-parser-adapter-json": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-alpha.6", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-2": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-0.95.0.tgz", - "integrity": "sha512-ntHZv5L1KiZMw2tVO+FAMzVGuZPKElT4LhS1aEYKlCwCVBIKGHVy1qXgrdo+MtKEK/+VtG8BvO8dE/W5hwO/9Q==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-1.0.0-alpha.6.tgz", + "integrity": "sha512-XI0qlTjL2Q1TMvzxjjEki2iuJqt43C0mwGHremjcpbNHpJejnkEGFDPJqs1rp3RobwRl1ftHVFJi7JVPiA8Zvw==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-ns-openapi-2": "^0.95.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-ns-openapi-2": "^1.0.0-alpha.6", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-0.95.0.tgz", - "integrity": "sha512-IvP/jLhlUKXhd1bb4qTofyVQkEk9W7Ijg33st+ymNdZ3gmkwrCu/zdxzpHUA/+Z7P45UwjRh0WuYGJnevA4n7Q==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-1.0.0-alpha.6.tgz", + "integrity": "sha512-yGd5dP52BrBMO4/nCJdcvotxCbmbXYOi/nQrj7rL4/7VFdKbC4ngT0ggprvKE8CVQC99qPz4qR1y728QdioPAg==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-ns-openapi-3-0": "^0.95.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-alpha.6", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-0.95.0.tgz", - "integrity": "sha512-vWGB/9rKr/yG6+SLFhI4chT6WMmDqzJ77WICsuj6K1ZIb5cE6Ko1d37Lya8ghUvvh1xrtaF+XXZXprVwlpQx2A==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-1.0.0-alpha.6.tgz", + "integrity": "sha512-4F/rWh7bi97y20SRskrqz9UdO+YwHOn+vcOvNs5/arI5niSmTeAN3dgH9emTx1LJi8d7woUAct+TEqshwoh/zQ==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-ns-openapi-3-1": "^0.95.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-alpha.6", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-workflows-json-1": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-workflows-json-1/-/apidom-parser-adapter-workflows-json-1-0.95.0.tgz", - "integrity": "sha512-yyMMB55D+5BqInuFcr1xo8eJtXoA2PxtridCOL9FeAZptPmUSKQuUM2iHYJ4+Jxc3Rg+DjCONDB1WHfGHnWqnQ==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-workflows-json-1/-/apidom-parser-adapter-workflows-json-1-1.0.0-alpha.6.tgz", + "integrity": "sha512-K2gZFUHtp+Vw9rcizanIJLxSsaYQWNh1QtsEVGtAkn3RBVa130i3umcgQBKuvaBzfhi+Zr21sR4LSrs4XiRHiQ==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-ns-workflows-1": "^0.95.0", - "@swagger-api/apidom-parser-adapter-json": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-ns-workflows-1": "^1.0.0-alpha.6", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-workflows-yaml-1": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-workflows-yaml-1/-/apidom-parser-adapter-workflows-yaml-1-0.95.0.tgz", - "integrity": "sha512-2/Lmb3vOAoQObwHdQJShjwvuT4i9hIMBHjplSXZLAFYSF65SN1YRCGwbJqKuC3W6mKB/lE3Fua19CFkRbw03Rg==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-workflows-yaml-1/-/apidom-parser-adapter-workflows-yaml-1-1.0.0-alpha.6.tgz", + "integrity": "sha512-yaJ9Iir43odK/zTB0tVL43RBC4ktQvNRfuT21vedqNaxO9J2pjTPy9NkIXJuOrcizinAASDLLUYX/b0UONhVxg==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-ns-workflows-1": "^0.95.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.0.0" + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-ns-workflows-1": "^1.0.0-alpha.6", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-yaml-1-2": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-0.95.0.tgz", - "integrity": "sha512-gy0rsrbuK50InSMLyGVXvtWXb18qlxAUWSSc8kUk8gu9kthAytXyLmM/y9Pk/qKLxg+5O9xCqZVlPcTWc2vz0Q==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-1.0.0-alpha.6.tgz", + "integrity": "sha512-qevJf2IRvskyvgeGnkJXCGKFnmrcnuMoFHoboI3nJFqdesN74g1hGm1VIVAOOkM4AcdG1w7BviCHEt4YEYGPcQ==", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-ast": "^0.95.0", - "@swagger-api/apidom-core": "^0.95.0", - "@swagger-api/apidom-error": "^0.95.0", - "@types/ramda": "~0.29.6", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", + "@swagger-api/apidom-ast": "^1.0.0-alpha.6", + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@swagger-api/apidom-error": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", "tree-sitter": "=0.20.4", "tree-sitter-yaml": "=0.5.0", "web-tree-sitter": "=0.20.3" } }, "node_modules/@swagger-api/apidom-reference": { - "version": "0.95.0", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-0.95.0.tgz", - "integrity": "sha512-VAgt6t9SMaJ3Svxqlkptxe26mTKxhFdXZuHyFneLu+08Tb7AoE/kdLH3sO1iIVn+aiFTAkPTzWNn36OQqEHV/g==", + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-1.0.0-alpha.6.tgz", + "integrity": "sha512-DbsxxgQCVd8ZTJag3EOtzJ2rtsaq4z5z/A4nEgzVQhStuHdRwrbQfxem1g7p6dOK2VrGEGf73UllGJvGV+uPpg==", "dependencies": { "@babel/runtime-corejs3": "^7.20.7", - "@swagger-api/apidom-core": "^0.95.0", - "@types/ramda": "~0.29.6", + "@swagger-api/apidom-core": "^1.0.0-alpha.6", + "@types/ramda": "~0.30.0", "axios": "^1.4.0", "minimatch": "^7.4.3", "process": "^0.11.10", - "ramda": "~0.29.1", - "ramda-adjunct": "^4.1.1", - "stampit": "^4.3.2" + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" }, "optionalDependencies": { - "@swagger-api/apidom-error": "^0.95.0", - "@swagger-api/apidom-json-pointer": "^0.95.0", - "@swagger-api/apidom-ns-asyncapi-2": "^0.95.0", - "@swagger-api/apidom-ns-openapi-2": "^0.95.0", - "@swagger-api/apidom-ns-openapi-3-0": "^0.95.0", - "@swagger-api/apidom-ns-openapi-3-1": "^0.95.0", - "@swagger-api/apidom-ns-workflows-1": "^0.95.0", - "@swagger-api/apidom-parser-adapter-api-design-systems-json": "^0.95.0", - "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^0.95.0", - "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^0.95.0", - "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^0.95.0", - "@swagger-api/apidom-parser-adapter-json": "^0.95.0", - "@swagger-api/apidom-parser-adapter-openapi-json-2": "^0.95.0", - "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^0.95.0", - "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^0.95.0", - "@swagger-api/apidom-parser-adapter-openapi-yaml-2": "^0.95.0", - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^0.95.0", - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^0.95.0", - "@swagger-api/apidom-parser-adapter-workflows-json-1": "^0.95.0", - "@swagger-api/apidom-parser-adapter-workflows-yaml-1": "^0.95.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^0.95.0" - } - }, - "node_modules/@swagger-api/apidom-reference/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" + "@swagger-api/apidom-error": "^1.0.0-alpha.1", + "@swagger-api/apidom-json-pointer": "^1.0.0-alpha.1", + "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-alpha.1", + "@swagger-api/apidom-ns-openapi-2": "^1.0.0-alpha.1", + "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-alpha.1", + "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-alpha.1", + "@swagger-api/apidom-ns-workflows-1": "^1.0.0-alpha.1", + "@swagger-api/apidom-parser-adapter-api-design-systems-json": "^1.0.0-alpha.1", + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^1.0.0-alpha.1", + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^1.0.0-alpha.1", + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^1.0.0-alpha.1", + "@swagger-api/apidom-parser-adapter-json": "^1.0.0-alpha.1", + "@swagger-api/apidom-parser-adapter-openapi-json-2": "^1.0.0-alpha.1", + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^1.0.0-alpha.1", + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^1.0.0-alpha.1", + "@swagger-api/apidom-parser-adapter-openapi-yaml-2": "^1.0.0-alpha.1", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^1.0.0-alpha.1", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^1.0.0-alpha.1", + "@swagger-api/apidom-parser-adapter-workflows-json-1": "^1.0.0-alpha.1", + "@swagger-api/apidom-parser-adapter-workflows-yaml-1": "^1.0.0-alpha.1", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-alpha.1" } }, "node_modules/@swagger-api/apidom-reference/node_modules/minimatch": { @@ -4063,23 +4387,29 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==" + }, "node_modules/@swc/helpers": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", - "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", + "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", "dependencies": { + "@swc/counter": "^0.1.3", "tslib": "^2.4.0" } }, "node_modules/@types/aws-lambda": { - "version": "8.10.126", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.126.tgz", - "integrity": "sha512-5eh4ffLdGYgGYI1Xr6W5L4IVse4RR7L2ns5OVUXA52nW5GFapIcGMcCzHAIMMOdpcQs3aGVxbvFlJNZH6IpgEQ==" + "version": "8.10.141", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.141.tgz", + "integrity": "sha512-SMWlRBukG9KV8ZNjwemp2AzDibp/czIAeKKTw09nCPbWxVskIxactCJCGOp4y6I1hCMY7T7UGfySvBLXNeUbEw==" }, "node_modules/@types/babel__core": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.2.tgz", - "integrity": "sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "peer": true, "dependencies": { @@ -4091,9 +4421,9 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.5", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.5.tgz", - "integrity": "sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==", + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", "dev": true, "peer": true, "dependencies": { @@ -4101,9 +4431,9 @@ } }, "node_modules/@types/babel__template": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.2.tgz", - "integrity": "sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, "peer": true, "dependencies": { @@ -4112,9 +4442,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.2.tgz", - "integrity": "sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", "dev": true, "peer": true, "dependencies": { @@ -4122,14 +4452,19 @@ } }, "node_modules/@types/btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.2.tgz", + "integrity": "sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg==" + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" }, "node_modules/@types/graceful-fs": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.7.tgz", - "integrity": "sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==", + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, "peer": true, "dependencies": { @@ -4142,41 +4477,41 @@ "integrity": "sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==" }, "node_modules/@types/hast": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.6.tgz", - "integrity": "sha512-47rJE80oqPmFdVDCD7IheXBrVdwuBgsYwoczFvKmwfo2Mzsnt+V9OONsYauFmICb6lQPpCuXYJWejBNs4pDJRg==", + "version": "2.3.10", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", + "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", "dependencies": { "@types/unist": "^2" } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jest": { - "version": "29.5.8", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.8.tgz", - "integrity": "sha512-fXEFTxMV2Co8ZF5aYFJv+YeA08RTYJfhtN5c9JSv/mFEMe+xxjufCb+PHL+bJcMs/ebPUsBu+UNTEz+ydXrR6g==", + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -4189,9 +4524,9 @@ "integrity": "sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==" }, "node_modules/@types/json-schema": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", - "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==" + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, "node_modules/@types/json5": { "version": "0.0.29", @@ -4200,9 +4535,9 @@ "dev": true }, "node_modules/@types/jsonwebtoken": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", - "integrity": "sha512-b0jGiOgHtZ2jqdPgPnP6WLCXZk1T8p06A/vPGzUvxpFGgKMbjXJDjC5m52ErqBnIuWZFgGoIJyRdeG5AyreJjA==", + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.6.tgz", + "integrity": "sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==", "dependencies": { "@types/node": "*" } @@ -4221,84 +4556,103 @@ "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==" }, "node_modules/@types/node": { - "version": "20.9.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.2.tgz", - "integrity": "sha512-WHZXKFCEyIUJzAwh3NyyTHYSR35SevJ6mZ1nWwJafKtiQbqRTIKSRcw3Ma3acqgsent3RRDqeVwpHntMk+9irg==", + "version": "20.14.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", + "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", "dependencies": { "undici-types": "~5.26.4" } }, + "node_modules/@types/nodemailer": { + "version": "6.4.15", + "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.15.tgz", + "integrity": "sha512-0EBJxawVNjPkng1zm2vopRctuWVCxk34JcIlRuXSf54habUWdz1FB7wHDqOqvDa8Mtpt0Q3LTXQkAs2LNyK5jQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" }, "node_modules/@types/parse5": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==" }, + "node_modules/@types/pg": { + "version": "8.11.6", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.11.6.tgz", + "integrity": "sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^4.0.1" + } + }, "node_modules/@types/prop-types": { - "version": "15.7.10", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.10.tgz", - "integrity": "sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A==" + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" }, "node_modules/@types/ramda": { - "version": "0.29.10", - "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.29.10.tgz", - "integrity": "sha512-0BzWVKtSEtignlk+XBuK88Il5wzQwbRVfEkzE8iKm02NYHMGQ/9ffB05M+zXhTCqo50DOIAT9pNSJsjFMMG4rQ==", + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.30.1.tgz", + "integrity": "sha512-aoyF/ADPL6N+/NXXfhPWF+Qj6w1Cql59m9wX0Gi15uyF+bpzXeLd63HPdiTDE2bmLXfNcVufsDPKmbfOrOzTBA==", "dependencies": { - "types-ramda": "^0.29.7" + "types-ramda": "^0.30.1" } }, "node_modules/@types/react": { - "version": "18.2.53", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.53.tgz", - "integrity": "sha512-52IHsMDT8qATp9B9zoOyobW8W3/0QhaJQTw1HwRj0UY2yBpCAQ7+S/CqHYQ8niAm3p4ji+rWUQ9UCib0GxQ60w==", + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", "dependencies": { "@types/prop-types": "*", - "@types/scheduler": "*", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "18.2.14", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.14.tgz", - "integrity": "sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==", + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", "dev": true, "dependencies": { "@types/react": "*" } }, "node_modules/@types/react-transition-group": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.9.tgz", - "integrity": "sha512-ZVNmWumUIh5NhH8aMD9CR2hdW0fNuYInlocZHaZ+dgk/1K49j1w/HoAuK1ki+pgscQrOFRTlXeoURtuzEkV3dg==", + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", + "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", "dependencies": { "@types/react": "*" } }, "node_modules/@types/scheduler": { - "version": "0.16.4", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.4.tgz", - "integrity": "sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ==" + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" }, "node_modules/@types/semver": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz", - "integrity": "sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", "dev": true }, "node_modules/@types/stylis": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.1.tgz", - "integrity": "sha512-OSaMrXUKxVigGlKRrET39V2xdhzlztQ9Aqumn1WbCBKHOi9ry7jKSd7rkyj0GzmWaU960Rd+LpOFpLfx5bMQAg==" + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", + "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==" }, "node_modules/@types/swagger-schema-official": { "version": "2.0.25", @@ -4306,9 +4660,9 @@ "integrity": "sha512-T92Xav+Gf/Ik1uPW581nA+JftmjWPgskw/WBf4TJzxRG/SJ+DfNnNE+WuZ4mrXuzflQMqMkm1LSYjzYW7MB1Cg==" }, "node_modules/@types/swagger-ui-react": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/@types/swagger-ui-react/-/swagger-ui-react-4.18.2.tgz", - "integrity": "sha512-uLiHyNGFdgQINNSq3hgca+TNnNMS7/X59M02EbmDfARgvh7KcB6wU+FVfkVY13qE4Zk9opKvjGqygwjjP7+u6w==", + "version": "4.18.3", + "resolved": "https://registry.npmjs.org/@types/swagger-ui-react/-/swagger-ui-react-4.18.3.tgz", + "integrity": "sha512-Mo/R7IjDVwtiFPs84pWvh5pI9iyNGBjmfielxqbOh2Jv+8WVSDVe8Nu25kb5BOuV2xmGS3o33jr6nwDJMBcX+Q==", "dev": true, "dependencies": { "@types/react": "*" @@ -4323,9 +4677,9 @@ } }, "node_modules/@types/unist": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.8.tgz", - "integrity": "sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==" + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==" }, "node_modules/@types/use-sync-external-store": { "version": "0.0.3", @@ -4333,31 +4687,31 @@ "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==" }, "node_modules/@types/yargs": { - "version": "17.0.28", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.28.tgz", - "integrity": "sha512-N3e3fkS86hNhtk6BEnc0rj3zcehaxx8QWhCROJkqpl5Zaoi7nAic3jH8q94jVD3zu5LGk+PUB6KAiDmimYOEQw==", + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.0.0.tgz", - "integrity": "sha512-M72SJ0DkcQVmmsbqlzc6EJgb/3Oz2Wdm6AyESB4YkGgCxP8u5jt5jn4/OBMPK3HLOxcttZq5xbBBU7e2By4SZQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.0.0", - "@typescript-eslint/type-utils": "7.0.0", - "@typescript-eslint/utils": "7.0.0", - "@typescript-eslint/visitor-keys": "7.0.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -4374,7 +4728,7 @@ }, "peerDependencies": { "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^8.56.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -4383,15 +4737,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.9.1.tgz", - "integrity": "sha512-C7AK2wn43GSaCUZ9do6Ksgi2g3mwFkMO3Cis96kzmgudoVaKyt62yNzJOktP0HDLb/iO2O0n2lBOzJgr6Q/cyg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.9.1", - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/typescript-estree": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4" }, "engines": { @@ -4410,88 +4764,14 @@ } } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.9.1.tgz", - "integrity": "sha512-38IxvKB6NAne3g/+MyXMs2Cda/Sz+CEpmm+KLGEM8hx/CvnSRuw51i8ukfwB/B/sESdeTGet1NH1Wj7I0YXswg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.9.1.tgz", - "integrity": "sha512-BUGslGOb14zUHOUmDB2FfT6SI1CcZEJYfF3qFwBeUrU6srJfzANonwRYHDpLBuzbq3HaoF2XL2hcr01c8f8OaQ==", - "dev": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.1.tgz", - "integrity": "sha512-U+mUylTHfcqeO7mLWVQ5W/tMLXqVpRv61wm9ZtfE5egz7gtnmqVIw9ryh0mgIlkKk9rZLY3UHygsBSdB9/ftyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.1.tgz", - "integrity": "sha512-MUaPUe/QRLEffARsmNfmpghuQkW436DvESW+h+M52w0coICHRfD6Np9/K6PdACwnrq1HmuLl+cSPZaJmeVPkSw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.9.1", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.0.0.tgz", - "integrity": "sha512-IxTStwhNDPO07CCrYuAqjuJ3Xf5MrMaNgbAZPxFXAUpAtwqFxiuItxUaVtP/SJQeCdJjwDGh9/lMOluAndkKeg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.0.0", - "@typescript-eslint/visitor-keys": "7.0.0" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -4502,13 +4782,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.0.0.tgz", - "integrity": "sha512-FIM8HPxj1P2G7qfrpiXvbHeHypgo2mFpFGoh5I73ZlqmJOsloSa1x0ZyXCer43++P1doxCgNqIOLqmZR6SOT8g==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.0.0", - "@typescript-eslint/utils": "7.0.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -4520,7 +4800,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -4529,9 +4809,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.0.0.tgz", - "integrity": "sha512-9ZIJDqagK1TTs4W9IyeB2sH/s1fFhN9958ycW8NRTg1vXGzzH5PQNzq6KbsbVGMT+oyyfa17DfchHDidcmf5cg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -4542,13 +4822,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.0.0.tgz", - "integrity": "sha512-JzsOzhJJm74aQ3c9um/aDryHgSHfaX8SHFIu9x4Gpik/+qxLvxUylhTsO9abcNu39JIdhY2LgYrFxTii3IajLA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.0.0", - "@typescript-eslint/visitor-keys": "7.0.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -4569,42 +4849,18 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@typescript-eslint/utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.0.0.tgz", - "integrity": "sha512-kuPZcPAdGcDBAyqDn/JVeJVhySvpkxzfXjJq1X1BFSTYo1TTuo4iyb937u457q4K0In84p6u2VHQGaFnv7VYqg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.0.0", - "@typescript-eslint/types": "7.0.0", - "@typescript-eslint/typescript-estree": "7.0.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", "semver": "^7.5.4" }, "engines": { @@ -4615,16 +4871,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^7.0.0 || ^8.0.0" } }, + "node_modules/@typescript-eslint/utils/node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.0.0.tgz", - "integrity": "sha512-JZP0uw59PRHp7sHQl3aF/lFgwOW2rgNVnXUksj1d932PMita9wFBd3621vHQRDvHwPsSY9FMAAHVc8gTvLYY4w==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.0.0", + "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -4646,15 +4908,10 @@ "resolved": "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz", "integrity": "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==" }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" - }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -4672,6 +4929,17 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -4716,19 +4984,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -4738,17 +4993,14 @@ } }, "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, "node_modules/any-promise": { @@ -4770,6 +5022,11 @@ "node": ">= 8" } }, + "node_modules/apg-lite": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/apg-lite/-/apg-lite-1.0.4.tgz", + "integrity": "sha512-B32zCN3IdHIc99Vy7V9BaYTUzLeRA8YXYY1aQD1/5I2aqIrO0coi4t6hJPqMisidlBxhyME8UexkHt31SlR6Og==" + }, "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -4782,37 +5039,40 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", "dev": true, "dependencies": { - "dequal": "^2.0.3" + "deep-equal": "^2.0.5" } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -4831,17 +5091,58 @@ "node": ">=8" } }, + "node_modules/array.prototype.filter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.4.tgz", + "integrity": "sha512-r+mCJ7zXgXElgR4IRC+fkvNCeoaavWBs6EdCso5Tbcf+iEMKzBU/His60lt34WEZ9vlb8wDkZvQGcVI5GwkfoQ==", + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-array-method-boxes-properly": "^1.0.0", + "es-object-atoms": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4854,7 +5155,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -4886,31 +5186,46 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.tosorted": { + "node_modules/array.prototype.toreversed": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.2.tgz", - "integrity": "sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "es-shim-unscopables": "^1.0.0" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -4921,45 +5236,22 @@ } }, "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.3" - } + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/auth0": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/auth0/-/auth0-4.1.0.tgz", - "integrity": "sha512-1CpjWPOuWPAhQZy46/T/jOViy1WXhytmdlZji693ZpBfugYw181+JXfKLzjea59oKmo4HFctD05cec7xGdysfQ==", - "dependencies": { - "jose": "^4.13.2", - "uuid": "^9.0.0" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/autolinker": { "version": "3.16.2", "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-3.16.2.tgz", @@ -4969,9 +5261,9 @@ } }, "node_modules/autoprefixer": { - "version": "10.4.16", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", - "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", "dev": true, "funding": [ { @@ -4988,9 +5280,9 @@ } ], "dependencies": { - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001538", - "fraction.js": "^4.3.6", + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -5006,9 +5298,12 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -5017,31 +5312,31 @@ } }, "node_modules/axe-core": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.2.tgz", - "integrity": "sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.9.1.tgz", + "integrity": "sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", "dependencies": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", "dev": true, "dependencies": { - "dequal": "^2.0.3" + "deep-equal": "^2.0.5" } }, "node_modules/babel-jest": { @@ -5066,6 +5361,82 @@ "@babel/core": "^7.8.0" } }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -5228,12 +5599,15 @@ } }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bl": { @@ -5263,20 +5637,20 @@ "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -5298,9 +5672,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", "devOptional": true, "funding": [ { @@ -5317,10 +5691,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -5404,12 +5778,18 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5456,9 +5836,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001546", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz", - "integrity": "sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==", + "version": "1.0.30001642", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz", + "integrity": "sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==", "funding": [ { "type": "opencollective", @@ -5484,18 +5864,24 @@ } }, "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" } }, "node_modules/char-regex": { @@ -5543,17 +5929,61 @@ "node": ">=4.0.0" } }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "peer": true, + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "peer": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "peer": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -5566,6 +5996,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -5603,9 +6036,9 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", "dev": true, "peer": true }, @@ -5640,10 +6073,74 @@ "node": ">=12" } }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/clsx": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", - "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "engines": { "node": ">=6" } @@ -5675,20 +6172,17 @@ "peer": true }, "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "color-name": "1.1.3" } }, "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/colorette": { "version": "1.4.0", @@ -5707,22 +6201,19 @@ } }, "node_modules/comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "peer": true }, "node_modules/compute-gcd": { "version": "1.2.1", @@ -5751,11 +6242,9 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "devOptional": true, - "peer": true + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/cookie": { "version": "0.6.0", @@ -5774,9 +6263,9 @@ } }, "node_modules/core-js": { - "version": "3.33.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.33.3.tgz", - "integrity": "sha512-lo0kOocUlLKmm6kv/FswQL8zbkH7mVsLJ/FULClOhv8WRVmKLVcs6XPNQAzstfeJTCHMyButEwG+z1kHxHoDZw==", + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", + "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -5784,9 +6273,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.36.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.0.tgz", - "integrity": "sha512-cN28qmhRNgbMZZMc/RFu5w8pK9VJzpb2rJVR/lHuZJKwmXnoWOpXmMkxqBB514igkp1Hu8WGROsiOAzUcKdHOQ==", + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.37.1.tgz", + "integrity": "sha512-J/r5JTHSmzTxbiYYrzXg9w1VpqrYt+gexenBE9pugeyhwPZTAEJddyiReJWsLO6uNQ8xJZFbod6XC7KKwatCiA==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -5838,6 +6327,82 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/create-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/create-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/create-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/create-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/create-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/create-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cross-fetch": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", @@ -5875,6 +6440,22 @@ "hyphenate-style-name": "^1.0.3" } }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "peer": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/css-selector-parser": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz", @@ -5902,6 +6483,26 @@ "node": ">=8.0.0" } }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "peer": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", @@ -5920,9 +6521,9 @@ } }, "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", @@ -5930,10 +6531,58 @@ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dependencies": { "ms": "2.1.2" }, @@ -5967,9 +6616,9 @@ } }, "node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", "dev": true, "peer": true, "peerDependencies": { @@ -5981,6 +6630,38 @@ } } }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -6004,24 +6685,25 @@ } }, "node_modules/define-data-property": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz", - "integrity": "sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==", - "dev": true, + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -6055,19 +6737,10 @@ "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "optional": true, "engines": { "node": ">=8" @@ -6115,6 +6788,12 @@ "node": ">=8" } }, + "node_modules/discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==", + "peer": true + }, "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", @@ -6134,18 +6813,72 @@ } }, "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", + "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" + "@babel/runtime": "^7.1.2" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "peer": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "peer": true + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "peer": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, "node_modules/dompurify": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.8.tgz", - "integrity": "sha512-b7uwreMYL2eZhrSCRC4ahLTeZcPZxSmYfmcQGXGkXiZSNW1X85v+SDM5KsWcpivIiUBH47Ji7NtyUdpLeF5JZQ==" + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz", + "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==" + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "peer": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } }, "node_modules/drange": { "version": "1.1.1", @@ -6155,6 +6888,11 @@ "node": ">=4" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -6163,10 +6901,25 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/electron-to-chromium": { - "version": "1.4.543", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.543.tgz", - "integrity": "sha512-t2ZP4AcGE0iKCCQCBx/K2426crYdxD3YU6l0uK2EO3FZH0pbC4pFz/sZm2ruZsND6hQBTcDWWlo/MLpiOdif5g==", + "version": "1.4.827", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.827.tgz", + "integrity": "sha512-VY+J0e4SFcNfQy19MEoMdaIcZLmDCprqvBtkii1WTCTQHpRvf5N8+3kTYCgL/PcntvwQvmMJWTuDPsq+IlhWKQ==", "devOptional": true }, "node_modules/emittery": { @@ -6185,8 +6938,7 @@ "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/encoding": { "version": "0.1.13", @@ -6206,9 +6958,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -6218,6 +6970,63 @@ "node": ">=10.13.0" } }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/enzyme": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz", + "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==", + "peer": true, + "dependencies": { + "array.prototype.flat": "^1.2.3", + "cheerio": "^1.0.0-rc.3", + "enzyme-shallow-equal": "^1.0.1", + "function.prototype.name": "^1.1.2", + "has": "^1.0.3", + "html-element-map": "^1.2.0", + "is-boolean-object": "^1.0.1", + "is-callable": "^1.1.5", + "is-number-object": "^1.0.4", + "is-regex": "^1.0.5", + "is-string": "^1.0.5", + "is-subset": "^0.1.1", + "lodash.escape": "^4.0.1", + "lodash.isequal": "^4.5.0", + "object-inspect": "^1.7.0", + "object-is": "^1.0.2", + "object.assign": "^4.1.0", + "object.entries": "^1.1.1", + "object.values": "^1.1.1", + "raf": "^3.4.1", + "rst-selector-parser": "^2.2.3", + "string.prototype.trim": "^1.2.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/enzyme-shallow-equal": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.7.tgz", + "integrity": "sha512-/um0GFqUXnpM9SvKtje+9Tjoz3f1fpBC3eXRFrNs8kpYn69JljciYP7KZTqM/YQbUY9KUjvKB4jo/q+L6WGGvg==", + "dependencies": { + "hasown": "^2.0.0", + "object-is": "^1.1.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -6235,50 +7044,56 @@ } }, "node_modules/es-abstract": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", - "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -6287,56 +7102,112 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-iterator-helpers": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", - "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "peer": true + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, "dependencies": { - "asynciterator.prototype": "^1.0.0", "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", + "internal-slot": "^1.0.7", "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dev": true, + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -6355,9 +7226,9 @@ "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==" }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "engines": { "node": ">=6" } @@ -6374,16 +7245,16 @@ } }, "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -6429,14 +7300,14 @@ } }, "node_modules/eslint-config-next": { - "version": "14.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.0.3.tgz", - "integrity": "sha512-IKPhpLdpSUyKofmsXUfrvBC49JMUTdeaD8ZIH4v9Vk0sC1X6URTuTJCLtA0Vwuj7V/CQh0oISuSTvNn5//Buew==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.5.tgz", + "integrity": "sha512-zogs9zlOiZ7ka+wgUnmcM0KBEDjo4Jis7kxN1jvC0N4wynQ2MIx/KBkg4mVF63J5EK4W0QMCn7xO3vNisjaAoA==", "dev": true, "dependencies": { - "@next/eslint-plugin-next": "14.0.3", + "@next/eslint-plugin-next": "14.2.5", "@rushstack/eslint-patch": "^1.3.3", - "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.28.1", @@ -6500,9 +7371,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -6526,28 +7397,28 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.28.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", - "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.findlastindex": "^1.2.2", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", + "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.8.0", - "has": "^1.0.3", - "is-core-module": "^2.13.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.6", - "object.groupby": "^1.0.0", - "object.values": "^1.1.6", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", "semver": "^6.3.1", - "tsconfig-paths": "^3.14.2" + "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" @@ -6556,6 +7427,16 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -6577,6 +7458,18 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -6587,27 +7480,27 @@ } }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz", + "integrity": "sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==", "dev": true, "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", + "aria-query": "~5.1.3", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.9.1", + "axobject-query": "~3.1.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", + "es-iterator-helpers": "^1.0.19", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.0" }, "engines": { "node": ">=4.0" @@ -6616,37 +7509,53 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "version": "7.34.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.4.tgz", + "integrity": "sha512-Np+jo9bUwJNxCsT12pXtrGhJgT3T44T1sHhn1Ssr42XFn8TES0267wPGo5nNrMHi8qkyimDAX2BUmkf9pSaVzA==", "dev": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", + "es-iterator-helpers": "^1.0.19", "estraverse": "^5.3.0", + "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", + "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" }, "engines": { "node": ">=4" @@ -6656,9 +7565,9 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, "engines": { "node": ">=10" @@ -6667,6 +7576,16 @@ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -6679,13 +7598,25 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -6733,6 +7664,125 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -6765,9 +7815,9 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -6807,9 +7857,9 @@ } }, "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" }, "node_modules/execa": { "version": "5.1.1", @@ -6835,6 +7885,13 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "peer": true + }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -6881,9 +7938,9 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -6925,11 +7982,6 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "node_modules/fast-loops": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-loops/-/fast-loops-1.1.3.tgz", - "integrity": "sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==" - }, "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", @@ -6951,9 +8003,9 @@ "integrity": "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==" }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -7011,10 +8063,32 @@ "node": ">=0.10.0" } }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -7043,32 +8117,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "dependencies": { - "micromatch": "^4.0.2" - } - }, "node_modules/flat-cache": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", - "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "flatted": "^3.2.7", + "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/fnv-plus": { @@ -7076,32 +8142,10 @@ "resolved": "https://registry.npmjs.org/fnv-plus/-/fnv-plus-1.3.1.tgz", "integrity": "sha512-Gz1EvfOneuFfk4yG458dJ3TLJ7gV19q3OM/vVvvHf7eT02Hm1DleB4edsia6ahbKgAYxO9gvyQ1ioWZR+a00Yw==" }, - "node_modules/focus-trap": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz", - "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==", - "dependencies": { - "tabbable": "^6.2.0" - } - }, - "node_modules/focus-trap-react": { - "version": "10.2.3", - "resolved": "https://registry.npmjs.org/focus-trap-react/-/focus-trap-react-10.2.3.tgz", - "integrity": "sha512-YXBpFu/hIeSu6NnmV2xlXzOYxuWkoOtar9jzgp3lOmjWLWY59C/b8DtDHEAV4SPU07Nd/t+nS/SBNGkhUBFmEw==", - "dependencies": { - "focus-trap": "^7.5.4", - "tabbable": "^6.2.0" - }, - "peerDependencies": { - "prop-types": "^15.8.1", - "react": ">=16.3.0", - "react-dom": ">=16.3.0" - } - }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -7130,6 +8174,21 @@ "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==" }, + "node_modules/foreground-child": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -7163,18 +8222,10 @@ "node": ">= 12.20" } }, - "node_modules/formdata-node/node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", - "engines": { - "node": ">= 14" - } - }, "node_modules/fraction.js": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz", - "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true, "engines": { "node": "*" @@ -7190,20 +8241,6 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "optional": true }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -7224,15 +8261,17 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -7250,7 +8289,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7274,14 +8312,18 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7316,13 +8358,13 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -7332,9 +8374,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", + "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", "dev": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -7355,19 +8397,21 @@ "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" }, "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -7385,33 +8429,21 @@ "node": ">=10.13.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -7474,35 +8506,33 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { - "get-intrinsic": "^1.1.1" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { "node": ">= 0.4" }, @@ -7522,11 +8552,11 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -7535,6 +8565,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hast-to-hyperscript": { "version": "10.0.3", "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-10.0.3.tgz", @@ -7552,33 +8593,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-to-hyperscript/node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-to-hyperscript/node_modules/property-information": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.0.tgz", - "integrity": "sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-to-hyperscript/node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/hast-util-from-parse5": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz", @@ -7597,61 +8611,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-from-parse5/node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-from-parse5/node_modules/hast-util-parse-selector": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", - "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", - "dependencies": { - "@types/hast": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5/node_modules/hastscript": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", - "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-parse-selector": "^3.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5/node_modules/property-information": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.0.tgz", - "integrity": "sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-from-parse5/node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/hast-util-from-parse5/node_modules/unist-util-stringify-position": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", @@ -7693,9 +8652,12 @@ } }, "node_modules/hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz", + "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==", + "dependencies": { + "@types/hast": "^2.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -7753,33 +8715,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-to-parse5/node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-to-parse5/node_modules/property-information": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.0.tgz", - "integrity": "sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/hast-util-to-parse5/node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/hast-util-whitespace": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz", @@ -7790,15 +8725,15 @@ } }, "node_modules/hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz", + "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==", "dependencies": { "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^3.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" }, "funding": { "type": "opencollective", @@ -7834,6 +8769,24 @@ "react-is": "^16.7.0" } }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/html-element-map": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.3.1.tgz", + "integrity": "sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg==", + "peer": true, + "dependencies": { + "array.prototype.filter": "^1.0.0", + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -7850,6 +8803,25 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "peer": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, "node_modules/http-reasons": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/http-reasons/-/http-reasons-0.1.0.tgz", @@ -7860,6 +8832,18 @@ "resolved": "https://registry.npmjs.org/http2-client/-/http2-client-1.3.5.tgz", "integrity": "sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==" }, + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/httpsnippet-lite": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/httpsnippet-lite/-/httpsnippet-lite-3.0.5.tgz", @@ -7884,9 +8868,9 @@ } }, "node_modules/hyphenate-style-name": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", - "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz", + "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==" }, "node_modules/iconv-lite": { "version": "0.6.3", @@ -7919,9 +8903,9 @@ ] }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" @@ -7974,7 +8958,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, "engines": { "node": ">=0.8.19" } @@ -7991,6 +8974,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -8004,8 +8988,7 @@ "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "optional": true + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/inline-style-parser": { "version": "0.1.1", @@ -8013,12 +8996,11 @@ "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, "node_modules/inline-style-prefixer": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-7.0.0.tgz", - "integrity": "sha512-I7GEdScunP1dQ6IM2mQWh6v0mOYdYmH3Bp31UecKdrcUgcURTcctSe1IECdUznSHKSmsHtjrT3CwCPI1pyxfUQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-7.0.1.tgz", + "integrity": "sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==", "dependencies": { - "css-in-js-utils": "^3.1.0", - "fast-loops": "^1.1.3" + "css-in-js-utils": "^3.1.0" } }, "node_modules/install": { @@ -8030,13 +9012,12 @@ } }, "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dev": true, + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -8052,9 +9033,9 @@ } }, "node_modules/ioredis": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.3.2.tgz", - "integrity": "sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.4.1.tgz", + "integrity": "sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA==", "dependencies": { "@ioredis/commands": "^1.1.1", "cluster-key-slot": "^1.1.0", @@ -8112,14 +9093,15 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8149,7 +9131,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -8173,7 +9154,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -8219,11 +9199,28 @@ } }, "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dependencies": { - "has": "^1.0.3" + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8233,7 +9230,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -8253,20 +9249,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -8342,19 +9324,21 @@ } }, "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "engines": { "node": ">= 0.4" }, @@ -8366,6 +9350,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "engines": { "node": ">=0.12.0" } @@ -8374,7 +9359,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -8410,19 +9394,10 @@ "node": ">=8" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -8443,21 +9418,26 @@ } }, "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8480,7 +9460,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -8491,11 +9470,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-subset": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", + "integrity": "sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==", + "peer": true + }, "node_modules/is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -8507,11 +9491,11 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -8521,10 +9505,13 @@ } }, "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8533,7 +9520,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -8542,34 +9528,25 @@ } }, "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "node_modules/isexe": { "version": "2.0.0", @@ -8586,9 +9563,9 @@ } }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "peer": true, "engines": { @@ -8596,15 +9573,15 @@ } }, "node_modules/istanbul-lib-instrument": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", - "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, "peer": true, "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", "istanbul-lib-coverage": "^3.2.0", "semver": "^7.5.4" }, @@ -8627,6 +9604,29 @@ "node": ">=10" } }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", @@ -8642,10 +9642,20 @@ "node": ">=10" } }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "peer": true, "dependencies": { @@ -8669,90 +9679,293 @@ "set-function-name": "^2.0.1" } }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "peer": true, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=14" }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "node_modules/jake": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz", + "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==", "dev": true, - "peer": true, "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "peer": true, "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "color-convert": "^2.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "peer": true, "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jake/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jake/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "peer": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", "create-jest": "^29.7.0", "exit": "^0.1.2", @@ -8762,467 +9975,1513 @@ "jest-validate": "^29.7.0", "yargs": "^17.3.1" }, - "bin": { - "jest": "bin/jest.js" + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "peer": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "peer": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "peer": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "peer": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-runtime/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "engines": { + "node": "*" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/jest-config": { + "node_modules/jest-snapshot": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, "peer": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", + "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", + "expect": "^29.7.0", "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", + "jest-diff": "^29.7.0", "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", + "natural-compare": "^1.4.0", "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" + "semver": "^7.5.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" + "engines": { + "node": ">=8" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "peer": true, "dependencies": { - "detect-newline": "^3.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=7.0.0" } }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "peer": true, "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-environment-node": { + "node_modules/jest-util": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, - "peer": true, "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "peer": true, "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "peer": true, "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=7.0.0" } }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-message-util": { + "node_modules/jest-validate": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "peer": true, "dependencies": { - "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", + "camelcase": "^6.2.0", "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "peer": true, "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" + "color-convert": "^2.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "peer": true, "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" + "node": ">=10" }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "peer": true, "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=7.0.0" } }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "peer": true, - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "peer": true, "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-runtime": { + "node_modules/jest-watcher": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "peer": true, "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", "@jest/types": "^29.6.3", "@types/node": "*", + "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", + "emittery": "^0.13.1", "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" + "string-length": "^4.0.1" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-runtime/node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "peer": true, "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "node": ">=10" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "peer": true, "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=7.0.0" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "peer": true + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "peer": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "peer": true, "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, "node_modules/jest-worker": { @@ -9241,6 +11500,16 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -9258,30 +11527,18 @@ } }, "node_modules/jiti": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", - "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", "dev": true, "bin": { "jiti": "bin/jiti.js" } }, - "node_modules/joi": { - "version": "17.11.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.11.0.tgz", - "integrity": "sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, "node_modules/jose": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.2.tgz", - "integrity": "sha512-IY73F228OXRl9ar3jJagh7Vnuhj/GzBunPiZP13K0lOl7Am9SoWW3kEzq3MCllJMTtZqHTiDXQvoRd4U95aU6A==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.6.3.tgz", + "integrity": "sha512-1Jh//hEEwMhNYPDDLwXHa2ePWgWiFNNUadVmguAAw2IJ6sj9mNxV5tGXJNqlMkJAybF6Lgw1mISDxTePP/187g==", "funding": { "url": "https://github.com/sponsors/panva" } @@ -9378,8 +11635,6 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "devOptional": true, - "peer": true, "bin": { "jsesc": "bin/jsesc" }, @@ -9433,17 +11688,6 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "node_modules/json-stable-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.2.tgz", - "integrity": "sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==", - "dependencies": { - "jsonify": "^0.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -9451,15 +11695,15 @@ "dev": true }, "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "devOptional": true, "bin": { "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, "node_modules/jsonc-parser": { @@ -9467,25 +11711,6 @@ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz", "integrity": "sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==" }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", - "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", @@ -9542,22 +11767,14 @@ } }, "node_modules/keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "dependencies": { "json-buffer": "3.0.1" } }, - "node_modules/klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "dependencies": { - "graceful-fs": "^4.1.11" - } - }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -9569,18 +11786,21 @@ } }, "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true }, "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "dependencies": { - "language-subtag-registry": "~0.3.2" + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" } }, "node_modules/leven": { @@ -9658,6 +11878,18 @@ "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" }, + "node_modules/lodash.escape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", + "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", + "peer": true + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "peer": true + }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", @@ -9683,11 +11915,6 @@ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" }, - "node_modules/lodash.isequalwith": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.isequalwith/-/lodash.isequalwith-4.4.0.tgz", - "integrity": "sha512-dcZON0IalGBpRmJBmMkaoV7d3I80R2O+FrzsZyHdNSFrANq/cgDqKQNmAHE8UEj4+QYWwwhkQOVdLHiAopzlsQ==" - }, "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", @@ -9725,16 +11952,6 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==" - }, - "node_modules/lodash.pickby": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", - "integrity": "sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q==" - }, "node_modules/longest-streak": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", @@ -9769,15 +11986,9 @@ } }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, "node_modules/lunr": { "version": "2.3.9", @@ -9853,12 +12064,12 @@ } }, "node_modules/match-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz", - "integrity": "sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==", + "version": "6.3.4", + "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.4.tgz", + "integrity": "sha512-jfZW7cWS5y/1xswZo8VBOdudUiSd9nifYRWphc9M5D/ee4w4AoXLgBEdRbgVaxbMuagBPeUC5y2Hi8DO6o9aDg==", "dependencies": { - "@babel/runtime": "^7.12.5", - "remove-accents": "0.4.2" + "@babel/runtime": "^7.23.8", + "remove-accents": "0.5.0" } }, "node_modules/mdast-util-definitions": { @@ -10278,11 +12489,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -10355,22 +12567,30 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" } }, "node_modules/mkdirp": { @@ -10391,27 +12611,27 @@ "optional": true }, "node_modules/mobx": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.12.0.tgz", - "integrity": "sha512-Mn6CN6meXEnMa0a5u6a5+RKrqRedHBhZGd15AWLk9O6uFY4KYHzImdt8JI8WODo1bjTSRnwXhJox+FCUZhCKCQ==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.13.0.tgz", + "integrity": "sha512-1laWODrBWmB7mDJ8EClCjUQTyLwJ0ydJgE4FtK7t9r3JnjXgc9OhmYs2P4RtHrY1co5+4T6cKP2UswX2SU29mA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mobx" } }, "node_modules/mobx-react": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/mobx-react/-/mobx-react-7.6.0.tgz", - "integrity": "sha512-+HQUNuh7AoQ9ZnU6c4rvbiVVl+wEkb9WqYsVDzGLng+Dqj1XntHu79PvEWKtSMoMj67vFp/ZPXcElosuJO8ckA==", + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/mobx-react/-/mobx-react-9.1.1.tgz", + "integrity": "sha512-gVV7AdSrAAxqXOJ2bAbGa5TkPqvITSzaPiiEkzpW4rRsMhSec7C2NBCJYILADHKp2tzOAIETGRsIY0UaCV5aEw==", "dependencies": { - "mobx-react-lite": "^3.4.0" + "mobx-react-lite": "^4.0.7" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mobx" }, "peerDependencies": { - "mobx": "^6.1.0", + "mobx": "^6.9.0", "react": "^16.8.0 || ^17 || ^18" }, "peerDependenciesMeta": { @@ -10424,15 +12644,18 @@ } }, "node_modules/mobx-react-lite": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.4.3.tgz", - "integrity": "sha512-NkJREyFTSUXR772Qaai51BnE1voWx56LOL80xG7qkZr6vo8vEaLF3sz1JNUVh+rxmUzxYaqOhfuxTfqUh0FXUg==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-4.0.7.tgz", + "integrity": "sha512-RjwdseshK9Mg8On5tyJZHtGD+J78ZnCnRaxeQDSiciKVQDUbfZcXhmld0VMxAwvcTnPEHZySGGewm467Fcpreg==", + "dependencies": { + "use-sync-external-store": "^1.2.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mobx" }, "peerDependencies": { - "mobx": "^6.1.0", + "mobx": "^6.9.0", "react": "^16.8.0 || ^17 || ^18" }, "peerDependenciesMeta": { @@ -10444,6 +12667,12 @@ } } }, + "node_modules/moo": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==", + "peer": true + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -10461,9 +12690,9 @@ } }, "node_modules/nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", + "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==", "optional": true }, "node_modules/nano-css": { @@ -10486,9 +12715,9 @@ } }, "node_modules/nano-css/node_modules/stylis": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", - "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", + "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==" }, "node_modules/nano-memoize": { "version": "1.3.1", @@ -10504,9 +12733,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", @@ -10532,18 +12761,40 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/nearley": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", + "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", + "peer": true, + "dependencies": { + "commander": "^2.19.0", + "moo": "^0.5.0", + "railroad-diagrams": "^1.0.0", + "randexp": "0.4.6" + }, + "bin": { + "nearley-railroad": "bin/nearley-railroad.js", + "nearley-test": "bin/nearley-test.js", + "nearley-unparse": "bin/nearley-unparse.js", + "nearleyc": "bin/nearleyc.js" + }, + "funding": { + "type": "individual", + "url": "https://nearley.js.org/#give-to-nearley" + } + }, "node_modules/next": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/next/-/next-14.0.2.tgz", - "integrity": "sha512-jsAU2CkYS40GaQYOiLl9m93RTv2DA/tTJ0NRlmZIBIL87YwQ/xR8k796z7IqgM3jydI8G25dXvyYMC9VDIevIg==", + "version": "14.2.5", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.5.tgz", + "integrity": "sha512-0f8aRfBVL+mpzfBjYfQuLWh2WyAwtJXCRfkPF4UJ5qd2YwrHczsrSzXU4tRMV0OAxR8ZJZWPFn6uhSC56UTsLA==", "dependencies": { - "@next/env": "14.0.2", - "@swc/helpers": "0.5.2", + "@next/env": "14.2.5", + "@swc/helpers": "0.5.5", "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001406", + "caniuse-lite": "^1.0.30001579", + "graceful-fs": "^4.2.11", "postcss": "8.4.31", - "styled-jsx": "5.1.1", - "watchpack": "2.4.0" + "styled-jsx": "5.1.1" }, "bin": { "next": "dist/bin/next" @@ -10552,18 +12803,19 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.0.2", - "@next/swc-darwin-x64": "14.0.2", - "@next/swc-linux-arm64-gnu": "14.0.2", - "@next/swc-linux-arm64-musl": "14.0.2", - "@next/swc-linux-x64-gnu": "14.0.2", - "@next/swc-linux-x64-musl": "14.0.2", - "@next/swc-win32-arm64-msvc": "14.0.2", - "@next/swc-win32-ia32-msvc": "14.0.2", - "@next/swc-win32-x64-msvc": "14.0.2" + "@next/swc-darwin-arm64": "14.2.5", + "@next/swc-darwin-x64": "14.2.5", + "@next/swc-linux-arm64-gnu": "14.2.5", + "@next/swc-linux-arm64-musl": "14.2.5", + "@next/swc-linux-x64-gnu": "14.2.5", + "@next/swc-linux-x64-musl": "14.2.5", + "@next/swc-win32-arm64-msvc": "14.2.5", + "@next/swc-win32-ia32-msvc": "14.2.5", + "@next/swc-win32-x64-msvc": "14.2.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", "react": "^18.2.0", "react-dom": "^18.2.0", "sass": "^1.3.0" @@ -10572,15 +12824,101 @@ "@opentelemetry/api": { "optional": true }, + "@playwright/test": { + "optional": true + }, "sass": { "optional": true } } }, + "node_modules/next-auth": { + "version": "5.0.0-beta.19", + "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-5.0.0-beta.19.tgz", + "integrity": "sha512-YHu1igcAxZPh8ZB7GIM93dqgY6gcAzq66FOhQFheAdOx1raxNcApt05nNyNCSB6NegSiyJ4XOPsaNow4pfDmsg==", + "dependencies": { + "@auth/core": "0.32.0" + }, + "peerDependencies": { + "@simplewebauthn/browser": "^9.0.1", + "@simplewebauthn/server": "^9.0.2", + "next": "^14 || ^15.0.0-0", + "nodemailer": "^6.6.5", + "react": "^18.2.0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@simplewebauthn/browser": { + "optional": true + }, + "@simplewebauthn/server": { + "optional": true + }, + "nodemailer": { + "optional": true + } + } + }, + "node_modules/next-auth/node_modules/@auth/core": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/@auth/core/-/core-0.32.0.tgz", + "integrity": "sha512-3+ssTScBd+1fd0/fscAyQN1tSygXzuhysuVVzB942ggU4mdfiTbv36P0ccVnExKWYJKvu3E2r3/zxXCCAmTOrg==", + "dependencies": { + "@panva/hkdf": "^1.1.1", + "@types/cookie": "0.6.0", + "cookie": "0.6.0", + "jose": "^5.1.3", + "oauth4webapi": "^2.9.0", + "preact": "10.11.3", + "preact-render-to-string": "5.2.3" + }, + "peerDependencies": { + "@simplewebauthn/browser": "^9.0.1", + "@simplewebauthn/server": "^9.0.2", + "nodemailer": "^6.8.0" + }, + "peerDependenciesMeta": { + "@simplewebauthn/browser": { + "optional": true + }, + "@simplewebauthn/server": { + "optional": true + }, + "nodemailer": { + "optional": true + } + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/node-abi": { - "version": "3.55.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.55.0.tgz", - "integrity": "sha512-uPEjtyh2tFEvWYt4Jw7McOD5FPcHkcxm/tHZc5PWaDB3JYq0rGFUbgaAK+CT5pYpQddBfsZVWI08OwoRfdfbcQ==", + "version": "3.65.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.65.0.tgz", + "integrity": "sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==", "optional": true, "dependencies": { "semver": "^7.3.5" @@ -10647,6 +12985,14 @@ "url": "https://opencollective.com/node-fetch" } }, + "node_modules/node-fetch-commonjs/node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "engines": { + "node": ">= 8" + } + }, "node_modules/node-fetch-h2": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz", @@ -10674,11 +13020,19 @@ } }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "devOptional": true }, + "node_modules/nodemailer": { + "version": "6.9.14", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.14.tgz", + "integrity": "sha512-Dobp/ebDKBvz91sbtRKhcznLThrKxKt97GI2FAlAyy+fk19j73Uz3sBXolVtmcXjaorivqsbbbjDY+Jkt4/bQA==", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -10698,9 +13052,9 @@ } }, "node_modules/npm": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/npm/-/npm-10.2.4.tgz", - "integrity": "sha512-umEuYneVEYO9KoEEI8n2sSGmNQeqco/3BSeacRlqIkCzw4E7XGtYSWMeJobxzr6hZ2n9cM+u5TsMTcC5bAgoWA==", + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/npm/-/npm-10.8.2.tgz", + "integrity": "sha512-x/AIjFIKRllrhcb48dqUNAAZl0ig9+qMuN91RpZo3Cb2+zuibfh+KISl6+kVVyktDz230JKc208UkQwwMqyB+w==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -10709,6 +13063,7 @@ "@npmcli/map-workspaces", "@npmcli/package-json", "@npmcli/promise-spawn", + "@npmcli/redact", "@npmcli/run-script", "@sigstore/tuf", "abbrev", @@ -10717,8 +13072,6 @@ "chalk", "ci-info", "cli-columns", - "cli-table3", - "columnify", "fastest-levenshtein", "fs-minipass", "glob", @@ -10754,7 +13107,6 @@ "npm-profile", "npm-registry-fetch", "npm-user-validate", - "npmlog", "p-map", "pacote", "parse-conflict-json", @@ -10764,7 +13116,6 @@ "semver", "spdx-expression-parse", "ssri", - "strip-ansi", "supports-color", "tar", "text-table", @@ -10776,74 +13127,71 @@ ], "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^7.2.1", - "@npmcli/config": "^8.0.2", - "@npmcli/fs": "^3.1.0", - "@npmcli/map-workspaces": "^3.0.4", - "@npmcli/package-json": "^5.0.0", - "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^7.0.2", - "@sigstore/tuf": "^2.2.0", + "@npmcli/arborist": "^7.5.4", + "@npmcli/config": "^8.3.4", + "@npmcli/fs": "^3.1.1", + "@npmcli/map-workspaces": "^3.0.6", + "@npmcli/package-json": "^5.2.0", + "@npmcli/promise-spawn": "^7.0.2", + "@npmcli/redact": "^2.0.1", + "@npmcli/run-script": "^8.1.0", + "@sigstore/tuf": "^2.3.4", "abbrev": "^2.0.0", "archy": "~1.0.0", - "cacache": "^18.0.0", + "cacache": "^18.0.3", "chalk": "^5.3.0", "ci-info": "^4.0.0", "cli-columns": "^4.0.0", - "cli-table3": "^0.6.3", - "columnify": "^1.6.0", "fastest-levenshtein": "^1.0.16", "fs-minipass": "^3.0.3", - "glob": "^10.3.10", + "glob": "^10.4.2", "graceful-fs": "^4.2.11", - "hosted-git-info": "^7.0.1", - "ini": "^4.1.1", - "init-package-json": "^6.0.0", - "is-cidr": "^5.0.3", - "json-parse-even-better-errors": "^3.0.0", - "libnpmaccess": "^8.0.1", - "libnpmdiff": "^6.0.3", - "libnpmexec": "^7.0.4", - "libnpmfund": "^5.0.1", - "libnpmhook": "^10.0.0", - "libnpmorg": "^6.0.1", - "libnpmpack": "^6.0.3", - "libnpmpublish": "^9.0.2", - "libnpmsearch": "^7.0.0", - "libnpmteam": "^6.0.0", - "libnpmversion": "^5.0.1", - "make-fetch-happen": "^13.0.0", - "minimatch": "^9.0.3", - "minipass": "^7.0.4", + "hosted-git-info": "^7.0.2", + "ini": "^4.1.3", + "init-package-json": "^6.0.3", + "is-cidr": "^5.1.0", + "json-parse-even-better-errors": "^3.0.2", + "libnpmaccess": "^8.0.6", + "libnpmdiff": "^6.1.4", + "libnpmexec": "^8.1.3", + "libnpmfund": "^5.0.12", + "libnpmhook": "^10.0.5", + "libnpmorg": "^6.0.6", + "libnpmpack": "^7.0.4", + "libnpmpublish": "^9.0.9", + "libnpmsearch": "^7.0.6", + "libnpmteam": "^6.0.5", + "libnpmversion": "^6.0.3", + "make-fetch-happen": "^13.0.1", + "minimatch": "^9.0.5", + "minipass": "^7.1.1", "minipass-pipeline": "^1.2.4", "ms": "^2.1.2", - "node-gyp": "^10.0.1", - "nopt": "^7.2.0", - "normalize-package-data": "^6.0.0", + "node-gyp": "^10.1.0", + "nopt": "^7.2.1", + "normalize-package-data": "^6.0.2", "npm-audit-report": "^5.0.0", "npm-install-checks": "^6.3.0", - "npm-package-arg": "^11.0.1", - "npm-pick-manifest": "^9.0.0", - "npm-profile": "^9.0.0", - "npm-registry-fetch": "^16.1.0", - "npm-user-validate": "^2.0.0", - "npmlog": "^7.0.1", + "npm-package-arg": "^11.0.2", + "npm-pick-manifest": "^9.1.0", + "npm-profile": "^10.0.0", + "npm-registry-fetch": "^17.1.0", + "npm-user-validate": "^2.0.1", "p-map": "^4.0.0", - "pacote": "^17.0.4", + "pacote": "^18.0.6", "parse-conflict-json": "^3.0.1", - "proc-log": "^3.0.0", + "proc-log": "^4.2.0", "qrcode-terminal": "^0.12.0", - "read": "^2.1.0", - "semver": "^7.5.4", - "spdx-expression-parse": "^3.0.1", - "ssri": "^10.0.5", - "strip-ansi": "^7.1.0", + "read": "^3.0.1", + "semver": "^7.6.2", + "spdx-expression-parse": "^4.0.0", + "ssri": "^10.0.6", "supports-color": "^9.4.0", - "tar": "^6.2.0", + "tar": "^6.2.1", "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", "treeverse": "^3.0.0", - "validate-npm-package-name": "^5.0.0", + "validate-npm-package-name": "^5.0.1", "which": "^4.0.0", "write-file-atomic": "^5.0.1" }, @@ -10868,15 +13216,6 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/@colors/colors": { - "version": "1.5.0", - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/npm/node_modules/@isaacs/cliui": { "version": "8.0.2", "inBundle": true, @@ -10893,25 +13232,50 @@ "node": ">=12" } }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", "inBundle": true, "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "ansi-regex": "^6.0.1" }, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/npm/node_modules/@isaacs/string-locale-compare": { @@ -10920,7 +13284,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/agent": { - "version": "2.2.0", + "version": "2.2.2", "inBundle": true, "license": "ISC", "dependencies": { @@ -10928,48 +13292,50 @@ "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.1", "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.1" + "socks-proxy-agent": "^8.0.3" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "7.2.1", + "version": "7.5.4", "inBundle": true, "license": "ISC", "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.0", - "@npmcli/installed-package-contents": "^2.0.2", + "@npmcli/fs": "^3.1.1", + "@npmcli/installed-package-contents": "^2.1.0", "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^7.0.0", + "@npmcli/metavuln-calculator": "^7.1.1", "@npmcli/name-from-folder": "^2.0.0", "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.0.0", - "@npmcli/query": "^3.0.1", - "@npmcli/run-script": "^7.0.2", - "bin-links": "^4.0.1", - "cacache": "^18.0.0", + "@npmcli/package-json": "^5.1.0", + "@npmcli/query": "^3.1.0", + "@npmcli/redact": "^2.0.0", + "@npmcli/run-script": "^8.1.0", + "bin-links": "^4.0.4", + "cacache": "^18.0.3", "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^7.0.1", - "json-parse-even-better-errors": "^3.0.0", + "hosted-git-info": "^7.0.2", + "json-parse-even-better-errors": "^3.0.2", "json-stringify-nice": "^1.1.4", - "minimatch": "^9.0.0", - "nopt": "^7.0.0", + "lru-cache": "^10.2.2", + "minimatch": "^9.0.4", + "nopt": "^7.2.1", "npm-install-checks": "^6.2.0", - "npm-package-arg": "^11.0.1", - "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^16.0.0", - "npmlog": "^7.0.1", - "pacote": "^17.0.4", + "npm-package-arg": "^11.0.2", + "npm-pick-manifest": "^9.0.1", + "npm-registry-fetch": "^17.0.1", + "pacote": "^18.0.6", "parse-conflict-json": "^3.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.2.0", + "proggy": "^2.0.0", "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.2", + "promise-call-limit": "^3.0.1", "read-package-json-fast": "^3.0.2", "semver": "^7.3.7", - "ssri": "^10.0.5", + "ssri": "^10.0.6", "treeverse": "^3.0.0", "walk-up-path": "^3.0.1" }, @@ -10981,16 +13347,16 @@ } }, "node_modules/npm/node_modules/@npmcli/config": { - "version": "8.0.2", + "version": "8.3.4", "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/package-json": "^5.1.1", "ci-info": "^4.0.0", - "ini": "^4.1.0", - "nopt": "^7.0.0", - "proc-log": "^3.0.0", - "read-package-json-fast": "^3.0.2", + "ini": "^4.1.2", + "nopt": "^7.2.1", + "proc-log": "^4.2.0", "semver": "^7.3.5", "walk-up-path": "^3.0.1" }, @@ -10998,33 +13364,8 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/@npmcli/disparity-colors": { - "version": "3.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "ansi-styles": "^4.3.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/@npmcli/disparity-colors/node_modules/ansi-styles": { - "version": "4.3.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/npm/node_modules/@npmcli/fs": { - "version": "3.1.0", + "version": "3.1.1", "inBundle": true, "license": "ISC", "dependencies": { @@ -11035,14 +13376,15 @@ } }, "node_modules/npm/node_modules/@npmcli/git": { - "version": "5.0.3", + "version": "5.0.8", "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/promise-spawn": "^7.0.0", + "ini": "^4.1.3", "lru-cache": "^10.0.1", "npm-pick-manifest": "^9.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", @@ -11053,7 +13395,7 @@ } }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { - "version": "2.0.2", + "version": "2.1.0", "inBundle": true, "license": "ISC", "dependencies": { @@ -11061,14 +13403,14 @@ "npm-normalize-package-bin": "^3.0.0" }, "bin": { - "installed-package-contents": "lib/index.js" + "installed-package-contents": "bin/index.js" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "3.0.4", + "version": "3.0.6", "inBundle": true, "license": "ISC", "dependencies": { @@ -11082,13 +13424,14 @@ } }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "7.0.0", + "version": "7.1.1", "inBundle": true, "license": "ISC", "dependencies": { "cacache": "^18.0.0", "json-parse-even-better-errors": "^3.0.0", - "pacote": "^17.0.0", + "pacote": "^18.0.0", + "proc-log": "^4.1.0", "semver": "^7.3.5" }, "engines": { @@ -11112,7 +13455,7 @@ } }, "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "5.0.0", + "version": "5.2.0", "inBundle": true, "license": "ISC", "dependencies": { @@ -11121,7 +13464,7 @@ "hosted-git-info": "^7.0.0", "json-parse-even-better-errors": "^3.0.0", "normalize-package-data": "^6.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.0.0", "semver": "^7.5.3" }, "engines": { @@ -11129,7 +13472,7 @@ } }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "7.0.0", + "version": "7.0.2", "inBundle": true, "license": "ISC", "dependencies": { @@ -11140,7 +13483,7 @@ } }, "node_modules/npm/node_modules/@npmcli/query": { - "version": "3.0.1", + "version": "3.1.0", "inBundle": true, "license": "ISC", "dependencies": { @@ -11150,15 +13493,24 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/npm/node_modules/@npmcli/redact": { + "version": "2.0.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "7.0.2", + "version": "8.1.0", "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", "@npmcli/promise-spawn": "^7.0.0", "node-gyp": "^10.0.0", - "read-package-json-fast": "^3.0.0", + "proc-log": "^4.0.0", "which": "^4.0.0" }, "engines": { @@ -11175,44 +13527,68 @@ } }, "node_modules/npm/node_modules/@sigstore/bundle": { - "version": "2.1.0", + "version": "2.3.2", "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.2.1" + "@sigstore/protobuf-specs": "^0.3.2" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/npm/node_modules/@sigstore/core": { + "version": "1.1.0", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { - "version": "0.2.1", + "version": "0.3.2", "inBundle": true, "license": "Apache-2.0", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@sigstore/sign": { - "version": "2.2.0", + "version": "2.3.2", "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^2.1.0", - "@sigstore/protobuf-specs": "^0.2.1", - "make-fetch-happen": "^13.0.0" + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "make-fetch-happen": "^13.0.1", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "2.2.0", + "version": "2.3.4", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2", + "tuf-js": "^2.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/verify": { + "version": "1.2.1", "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.2.1", - "tuf-js": "^2.1.0" + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.2" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -11227,12 +13603,12 @@ } }, "node_modules/npm/node_modules/@tufjs/models": { - "version": "2.0.0", + "version": "2.0.1", "inBundle": true, "license": "MIT", "dependencies": { "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.3" + "minimatch": "^9.0.4" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -11246,19 +13622,8 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/abort-controller": { - "version": "3.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, "node_modules/npm/node_modules/agent-base": { - "version": "7.1.0", + "version": "7.1.1", "inBundle": true, "license": "MIT", "dependencies": { @@ -11281,14 +13646,11 @@ } }, "node_modules/npm/node_modules/ansi-regex": { - "version": "6.0.1", + "version": "5.0.1", "inBundle": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=8" } }, "node_modules/npm/node_modules/ansi-styles": { @@ -11312,44 +13674,13 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/are-we-there-yet": { - "version": "4.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^4.1.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/npm/node_modules/balanced-match": { "version": "1.0.2", "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/base64-js": { - "version": "1.5.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/bin-links": { - "version": "4.0.3", + "version": "4.0.4", "inBundle": true, "license": "ISC", "dependencies": { @@ -11363,11 +13694,14 @@ } }, "node_modules/npm/node_modules/binary-extensions": { - "version": "2.2.0", + "version": "2.3.0", "inBundle": true, "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/npm/node_modules/brace-expansion": { @@ -11378,39 +13712,8 @@ "balanced-match": "^1.0.0" } }, - "node_modules/npm/node_modules/buffer": { - "version": "6.0.3", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/npm/node_modules/builtins": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "semver": "^7.0.0" - } - }, "node_modules/npm/node_modules/cacache": { - "version": "18.0.0", + "version": "18.0.3", "inBundle": true, "license": "ISC", "dependencies": { @@ -11419,7 +13722,7 @@ "glob": "^10.2.2", "lru-cache": "^10.0.1", "minipass": "^7.0.3", - "minipass-collect": "^1.0.2", + "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "p-map": "^4.0.0", @@ -11465,7 +13768,7 @@ } }, "node_modules/npm/node_modules/cidr-regex": { - "version": "4.0.3", + "version": "4.1.1", "inBundle": true, "license": "BSD-2-Clause", "dependencies": { @@ -11495,49 +13798,8 @@ "node": ">= 10" } }, - "node_modules/npm/node_modules/cli-columns/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cli-columns/node_modules/strip-ansi": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cli-table3": { - "version": "0.6.3", - "inBundle": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/npm/node_modules/clone": { - "version": "1.0.4", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, "node_modules/npm/node_modules/cmd-shim": { - "version": "6.0.2", + "version": "6.0.3", "inBundle": true, "license": "ISC", "engines": { @@ -11560,52 +13822,8 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/color-support": { - "version": "1.1.3", - "inBundle": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/npm/node_modules/columnify": { - "version": "1.6.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/npm/node_modules/columnify/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/columnify/node_modules/strip-ansi": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/common-ancestor-path": { - "version": "1.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/console-control-strings": { - "version": "1.1.0", + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "1.0.1", "inBundle": true, "license": "ISC" }, @@ -11648,7 +13866,7 @@ } }, "node_modules/npm/node_modules/debug": { - "version": "4.3.4", + "version": "4.3.5", "inBundle": true, "license": "MIT", "dependencies": { @@ -11668,24 +13886,8 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/defaults": { - "version": "1.0.4", - "inBundle": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm/node_modules/delegates": { - "version": "1.0.0", - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/diff": { - "version": "5.1.0", + "version": "5.2.0", "inBundle": true, "license": "BSD-3-Clause", "engines": { @@ -11724,22 +13926,6 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/event-target-shim": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/events": { - "version": "3.3.0", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, "node_modules/npm/node_modules/exponential-backoff": { "version": "3.1.1", "inBundle": true, @@ -11754,7 +13940,7 @@ } }, "node_modules/npm/node_modules/foreground-child": { - "version": "3.1.1", + "version": "3.2.1", "inBundle": true, "license": "ISC", "dependencies": { @@ -11779,67 +13965,23 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/function-bind": { - "version": "1.1.2", - "inBundle": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/npm/node_modules/gauge": { - "version": "5.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^4.0.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm/node_modules/gauge/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/gauge/node_modules/strip-ansi": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/npm/node_modules/glob": { - "version": "10.3.10", + "version": "10.4.2", "inBundle": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -11850,24 +13992,8 @@ "inBundle": true, "license": "ISC" }, - "node_modules/npm/node_modules/has-unicode": { - "version": "2.0.1", - "inBundle": true, - "license": "ISC" - }, - "node_modules/npm/node_modules/hasown": { - "version": "2.0.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/npm/node_modules/hosted-git-info": { - "version": "7.0.1", + "version": "7.0.2", "inBundle": true, "license": "ISC", "dependencies": { @@ -11883,7 +14009,7 @@ "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/http-proxy-agent": { - "version": "7.0.0", + "version": "7.0.2", "inBundle": true, "license": "MIT", "dependencies": { @@ -11895,7 +14021,7 @@ } }, "node_modules/npm/node_modules/https-proxy-agent": { - "version": "7.0.2", + "version": "7.0.5", "inBundle": true, "license": "MIT", "dependencies": { @@ -11918,27 +14044,8 @@ "node": ">=0.10.0" } }, - "node_modules/npm/node_modules/ieee754": { - "version": "1.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "BSD-3-Clause" - }, "node_modules/npm/node_modules/ignore-walk": { - "version": "6.0.3", + "version": "6.0.5", "inBundle": true, "license": "ISC", "dependencies": { @@ -11965,7 +14072,7 @@ } }, "node_modules/npm/node_modules/ini": { - "version": "4.1.1", + "version": "4.1.3", "inBundle": true, "license": "ISC", "engines": { @@ -11973,14 +14080,14 @@ } }, "node_modules/npm/node_modules/init-package-json": { - "version": "6.0.0", + "version": "6.0.3", "inBundle": true, "license": "ISC", "dependencies": { + "@npmcli/package-json": "^5.0.0", "npm-package-arg": "^11.0.0", "promzard": "^1.0.0", - "read": "^2.0.0", - "read-package-json": "^7.0.0", + "read": "^3.0.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "^5.0.0" @@ -11989,10 +14096,17 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/ip": { - "version": "2.0.0", + "node_modules/npm/node_modules/ip-address": { + "version": "9.0.5", "inBundle": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } }, "node_modules/npm/node_modules/ip-regex": { "version": "5.0.0", @@ -12006,27 +14120,16 @@ } }, "node_modules/npm/node_modules/is-cidr": { - "version": "5.0.3", + "version": "5.1.0", "inBundle": true, "license": "BSD-2-Clause", "dependencies": { - "cidr-regex": "4.0.3" + "cidr-regex": "^4.1.1" }, "engines": { "node": ">=14" } }, - "node_modules/npm/node_modules/is-core-module": { - "version": "2.13.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/npm/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "inBundle": true, @@ -12046,7 +14149,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/jackspeak": { - "version": "2.3.6", + "version": "3.4.0", "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -12062,8 +14165,13 @@ "@pkgjs/parseargs": "^0.11.0" } }, + "node_modules/npm/node_modules/jsbn": { + "version": "1.1.0", + "inBundle": true, + "license": "MIT" + }, "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", + "version": "3.0.2", "inBundle": true, "license": "MIT", "engines": { @@ -12097,49 +14205,47 @@ "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { - "version": "8.0.1", + "version": "8.0.6", "inBundle": true, "license": "ISC", "dependencies": { - "npm-package-arg": "^11.0.1", - "npm-registry-fetch": "^16.0.0" + "npm-package-arg": "^11.0.2", + "npm-registry-fetch": "^17.0.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "6.0.3", + "version": "6.1.4", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^7.2.1", - "@npmcli/disparity-colors": "^3.0.0", - "@npmcli/installed-package-contents": "^2.0.2", - "binary-extensions": "^2.2.0", + "@npmcli/arborist": "^7.5.4", + "@npmcli/installed-package-contents": "^2.1.0", + "binary-extensions": "^2.3.0", "diff": "^5.1.0", - "minimatch": "^9.0.0", - "npm-package-arg": "^11.0.1", - "pacote": "^17.0.4", - "tar": "^6.2.0" + "minimatch": "^9.0.4", + "npm-package-arg": "^11.0.2", + "pacote": "^18.0.6", + "tar": "^6.2.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "7.0.4", + "version": "8.1.3", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^7.2.1", - "@npmcli/run-script": "^7.0.2", + "@npmcli/arborist": "^7.5.4", + "@npmcli/run-script": "^8.1.0", "ci-info": "^4.0.0", - "npm-package-arg": "^11.0.1", - "npmlog": "^7.0.1", - "pacote": "^17.0.4", - "proc-log": "^3.0.0", - "read": "^2.0.0", + "npm-package-arg": "^11.0.2", + "pacote": "^18.0.6", + "proc-log": "^4.2.0", + "read": "^3.0.1", "read-package-json-fast": "^3.0.2", "semver": "^7.3.7", "walk-up-path": "^3.0.1" @@ -12149,104 +14255,104 @@ } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "5.0.1", + "version": "5.0.12", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^7.2.1" + "@npmcli/arborist": "^7.5.4" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmhook": { - "version": "10.0.0", + "version": "10.0.5", "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^16.0.0" + "npm-registry-fetch": "^17.0.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmorg": { - "version": "6.0.1", + "version": "6.0.6", "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^16.0.0" + "npm-registry-fetch": "^17.0.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "6.0.3", + "version": "7.0.4", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^7.2.1", - "@npmcli/run-script": "^7.0.2", - "npm-package-arg": "^11.0.1", - "pacote": "^17.0.4" + "@npmcli/arborist": "^7.5.4", + "@npmcli/run-script": "^8.1.0", + "npm-package-arg": "^11.0.2", + "pacote": "^18.0.6" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmpublish": { - "version": "9.0.2", + "version": "9.0.9", "inBundle": true, "license": "ISC", "dependencies": { "ci-info": "^4.0.0", - "normalize-package-data": "^6.0.0", - "npm-package-arg": "^11.0.1", - "npm-registry-fetch": "^16.0.0", - "proc-log": "^3.0.0", + "normalize-package-data": "^6.0.1", + "npm-package-arg": "^11.0.2", + "npm-registry-fetch": "^17.0.1", + "proc-log": "^4.2.0", "semver": "^7.3.7", - "sigstore": "^2.1.0", - "ssri": "^10.0.5" + "sigstore": "^2.2.0", + "ssri": "^10.0.6" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmsearch": { - "version": "7.0.0", + "version": "7.0.6", "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^16.0.0" + "npm-registry-fetch": "^17.0.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmteam": { - "version": "6.0.0", + "version": "6.0.5", "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^16.0.0" + "npm-registry-fetch": "^17.0.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/libnpmversion": { - "version": "5.0.1", + "version": "6.0.3", "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^5.0.3", - "@npmcli/run-script": "^7.0.2", - "json-parse-even-better-errors": "^3.0.0", - "proc-log": "^3.0.0", + "@npmcli/git": "^5.0.7", + "@npmcli/run-script": "^8.1.0", + "json-parse-even-better-errors": "^3.0.2", + "proc-log": "^4.2.0", "semver": "^7.3.7" }, "engines": { @@ -12254,18 +14360,15 @@ } }, "node_modules/npm/node_modules/lru-cache": { - "version": "10.0.2", + "version": "10.2.2", "inBundle": true, "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, "engines": { "node": "14 || >=16.14" } }, "node_modules/npm/node_modules/make-fetch-happen": { - "version": "13.0.0", + "version": "13.0.1", "inBundle": true, "license": "ISC", "dependencies": { @@ -12278,6 +14381,7 @@ "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", + "proc-log": "^4.2.0", "promise-retry": "^2.0.1", "ssri": "^10.0.0" }, @@ -12286,7 +14390,7 @@ } }, "node_modules/npm/node_modules/minimatch": { - "version": "9.0.3", + "version": "9.0.5", "inBundle": true, "license": "ISC", "dependencies": { @@ -12300,7 +14404,7 @@ } }, "node_modules/npm/node_modules/minipass": { - "version": "7.0.4", + "version": "7.1.2", "inBundle": true, "license": "ISC", "engines": { @@ -12308,29 +14412,18 @@ } }, "node_modules/npm/node_modules/minipass-collect": { - "version": "1.0.2", - "inBundle": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", + "version": "2.0.1", "inBundle": true, "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/npm/node_modules/minipass-fetch": { - "version": "3.0.4", + "version": "3.0.5", "inBundle": true, "license": "MIT", "dependencies": { @@ -12367,26 +14460,6 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/minipass-json-stream": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/npm/node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/npm/node_modules/minipass-pipeline": { "version": "1.2.4", "inBundle": true, @@ -12487,7 +14560,7 @@ } }, "node_modules/npm/node_modules/node-gyp": { - "version": "10.0.1", + "version": "10.1.0", "inBundle": true, "license": "MIT", "dependencies": { @@ -12509,8 +14582,16 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/npm/node_modules/node-gyp/node_modules/proc-log": { + "version": "3.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/npm/node_modules/nopt": { - "version": "7.2.0", + "version": "7.2.1", "inBundle": true, "license": "ISC", "dependencies": { @@ -12524,12 +14605,11 @@ } }, "node_modules/npm/node_modules/normalize-package-data": { - "version": "6.0.0", + "version": "6.0.2", "inBundle": true, "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^7.0.0", - "is-core-module": "^2.8.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" }, @@ -12546,7 +14626,7 @@ } }, "node_modules/npm/node_modules/npm-bundled": { - "version": "3.0.0", + "version": "3.0.1", "inBundle": true, "license": "ISC", "dependencies": { @@ -12576,12 +14656,12 @@ } }, "node_modules/npm/node_modules/npm-package-arg": { - "version": "11.0.1", + "version": "11.0.2", "inBundle": true, "license": "ISC", "dependencies": { "hosted-git-info": "^7.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.0.0", "semver": "^7.3.5", "validate-npm-package-name": "^5.0.0" }, @@ -12590,18 +14670,18 @@ } }, "node_modules/npm/node_modules/npm-packlist": { - "version": "8.0.0", + "version": "8.0.2", "inBundle": true, "license": "ISC", "dependencies": { - "ignore-walk": "^6.0.0" + "ignore-walk": "^6.0.4" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "9.0.0", + "version": "9.1.0", "inBundle": true, "license": "ISC", "dependencies": { @@ -12615,56 +14695,43 @@ } }, "node_modules/npm/node_modules/npm-profile": { - "version": "9.0.0", + "version": "10.0.0", "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^16.0.0", - "proc-log": "^3.0.0" + "npm-registry-fetch": "^17.0.1", + "proc-log": "^4.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=18.0.0" } }, "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "16.1.0", + "version": "17.1.0", "inBundle": true, "license": "ISC", "dependencies": { + "@npmcli/redact": "^2.0.0", + "jsonparse": "^1.3.1", "make-fetch-happen": "^13.0.0", "minipass": "^7.0.2", "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", "npm-package-arg": "^11.0.0", - "proc-log": "^3.0.0" + "proc-log": "^4.0.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm/node_modules/npm-user-validate": { - "version": "2.0.0", + "version": "2.0.1", "inBundle": true, "license": "BSD-2-Clause", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/npmlog": { - "version": "7.0.1", - "inBundle": true, - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^4.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^5.0.0", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/npm/node_modules/p-map": { "version": "4.0.0", "inBundle": true, @@ -12679,32 +14746,36 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/npm/node_modules/package-json-from-dist": { + "version": "1.0.0", + "inBundle": true, + "license": "BlueOak-1.0.0" + }, "node_modules/npm/node_modules/pacote": { - "version": "17.0.4", + "version": "18.0.6", "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/git": "^5.0.0", "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/package-json": "^5.1.0", "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^7.0.0", + "@npmcli/run-script": "^8.0.0", "cacache": "^18.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", "npm-package-arg": "^11.0.0", "npm-packlist": "^8.0.0", "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^16.0.0", - "proc-log": "^3.0.0", + "npm-registry-fetch": "^17.0.0", + "proc-log": "^4.0.0", "promise-retry": "^2.0.1", - "read-package-json": "^7.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^2.0.0", + "sigstore": "^2.2.0", "ssri": "^10.0.0", "tar": "^6.1.11" }, "bin": { - "pacote": "lib/bin.js" + "pacote": "bin/index.js" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -12732,22 +14803,22 @@ } }, "node_modules/npm/node_modules/path-scurry": { - "version": "1.10.1", + "version": "1.11.1", "inBundle": true, "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.18" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.0.13", + "version": "6.1.0", "inBundle": true, "license": "MIT", "dependencies": { @@ -12759,19 +14830,19 @@ } }, "node_modules/npm/node_modules/proc-log": { - "version": "3.0.0", + "version": "4.2.0", "inBundle": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/process": { - "version": "0.11.10", + "node_modules/npm/node_modules/proggy": { + "version": "2.0.0", "inBundle": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">= 0.6.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm/node_modules/promise-all-reject-late": { @@ -12783,7 +14854,7 @@ } }, "node_modules/npm/node_modules/promise-call-limit": { - "version": "1.0.2", + "version": "3.0.1", "inBundle": true, "license": "ISC", "funding": { @@ -12808,11 +14879,11 @@ } }, "node_modules/npm/node_modules/promzard": { - "version": "1.0.0", + "version": "1.0.2", "inBundle": true, "license": "ISC", "dependencies": { - "read": "^2.0.0" + "read": "^3.0.1" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -12826,11 +14897,11 @@ } }, "node_modules/npm/node_modules/read": { - "version": "2.1.0", + "version": "3.0.1", "inBundle": true, "license": "ISC", "dependencies": { - "mute-stream": "~1.0.0" + "mute-stream": "^1.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -12844,20 +14915,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/read-package-json": { - "version": "7.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, "node_modules/npm/node_modules/read-package-json-fast": { "version": "3.0.2", "inBundle": true, @@ -12870,21 +14927,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/readable-stream": { - "version": "4.4.2", - "inBundle": true, - "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, "node_modules/npm/node_modules/retry": { "version": "0.12.0", "inBundle": true, @@ -12893,25 +14935,6 @@ "node": ">= 4" } }, - "node_modules/npm/node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/safer-buffer": { "version": "2.1.2", "inBundle": true, @@ -12919,12 +14942,9 @@ "optional": true }, "node_modules/npm/node_modules/semver": { - "version": "7.5.4", + "version": "7.6.2", "inBundle": true, "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -12932,22 +14952,6 @@ "node": ">=10" } }, - "node_modules/npm/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/set-blocking": { - "version": "2.0.0", - "inBundle": true, - "license": "ISC" - }, "node_modules/npm/node_modules/shebang-command": { "version": "2.0.0", "inBundle": true, @@ -12979,14 +14983,16 @@ } }, "node_modules/npm/node_modules/sigstore": { - "version": "2.1.0", + "version": "2.3.1", "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^2.1.0", - "@sigstore/protobuf-specs": "^0.2.1", - "@sigstore/sign": "^2.1.0", - "@sigstore/tuf": "^2.1.0" + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "@sigstore/sign": "^2.3.2", + "@sigstore/tuf": "^2.3.4", + "@sigstore/verify": "^1.2.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -13002,26 +15008,26 @@ } }, "node_modules/npm/node_modules/socks": { - "version": "2.7.1", + "version": "2.8.3", "inBundle": true, "license": "MIT", "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "8.0.2", + "version": "8.0.4", "inBundle": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.1", "debug": "^4.3.4", - "socks": "^2.7.1" + "socks": "^2.8.3" }, "engines": { "node": ">= 14" @@ -13036,13 +15042,22 @@ "spdx-license-ids": "^3.0.0" } }, + "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/npm/node_modules/spdx-exceptions": { - "version": "2.3.0", + "version": "2.5.0", "inBundle": true, "license": "CC-BY-3.0" }, "node_modules/npm/node_modules/spdx-expression-parse": { - "version": "3.0.1", + "version": "4.0.0", "inBundle": true, "license": "MIT", "dependencies": { @@ -13051,12 +15066,17 @@ } }, "node_modules/npm/node_modules/spdx-license-ids": { - "version": "3.0.16", + "version": "3.0.18", "inBundle": true, "license": "CC0-1.0" }, + "node_modules/npm/node_modules/sprintf-js": { + "version": "1.1.3", + "inBundle": true, + "license": "BSD-3-Clause" + }, "node_modules/npm/node_modules/ssri": { - "version": "10.0.5", + "version": "10.0.6", "inBundle": true, "license": "ISC", "dependencies": { @@ -13066,14 +15086,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/string_decoder": { - "version": "1.3.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/npm/node_modules/string-width": { "version": "4.2.3", "inBundle": true, @@ -13101,34 +15113,7 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/string-width/node_modules/strip-ansi": { + "node_modules/npm/node_modules/strip-ansi": { "version": "6.0.1", "inBundle": true, "license": "MIT", @@ -13139,20 +15124,6 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/strip-ansi": { - "version": "7.1.0", - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/npm/node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", @@ -13165,14 +15136,6 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/npm/node_modules/supports-color": { "version": "9.4.0", "inBundle": true, @@ -13185,7 +15148,7 @@ } }, "node_modules/npm/node_modules/tar": { - "version": "6.2.0", + "version": "6.2.1", "inBundle": true, "license": "ISC", "dependencies": { @@ -13249,13 +15212,13 @@ } }, "node_modules/npm/node_modules/tuf-js": { - "version": "2.1.0", + "version": "2.2.1", "inBundle": true, "license": "MIT", "dependencies": { - "@tufjs/models": "2.0.0", + "@tufjs/models": "2.0.1", "debug": "^4.3.4", - "make-fetch-happen": "^13.0.0" + "make-fetch-happen": "^13.0.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -13297,13 +15260,19 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "5.0.0", + "version": "5.0.1", "inBundle": true, "license": "ISC", - "dependencies": { - "builtins": "^5.0.0" - }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -13313,14 +15282,6 @@ "inBundle": true, "license": "ISC" }, - "node_modules/npm/node_modules/wcwidth": { - "version": "1.0.1", - "inBundle": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, "node_modules/npm/node_modules/which": { "version": "4.0.0", "inBundle": true, @@ -13343,14 +15304,6 @@ "node": ">=16" } }, - "node_modules/npm/node_modules/wide-align": { - "version": "1.1.5", - "inBundle": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/npm/node_modules/wrap-ansi": { "version": "8.1.0", "inBundle": true, @@ -13384,14 +15337,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", "inBundle": true, @@ -13406,15 +15351,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", "inBundle": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { @@ -13438,6 +15383,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/npm/node_modules/write-file-atomic": { "version": "5.0.1", "inBundle": true, @@ -13556,9 +15515,9 @@ } }, "node_modules/oauth4webapi": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-2.3.0.tgz", - "integrity": "sha512-JGkb5doGrwzVDuHwgrR4nHJayzN4h59VCed6EW8Tql6iHDfZIabCJvg6wtbn5q6pyB2hZruI3b77Nudvq7NmvA==", + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-2.11.1.tgz", + "integrity": "sha512-aNzOnL98bL6izG97zgnZs1PFEyO4WDVRhz2Pd066NPak44w5ESLRCYmJIyey8avSBPOMtBjhF3ZDDm7bIb7UOg==", "funding": { "url": "https://github.com/sponsors/panva" } @@ -13581,9 +15540,27 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -13592,19 +15569,17 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -13616,28 +15591,28 @@ } }, "node_modules/object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", - "dev": true, + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -13647,39 +15622,27 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/object.hasown": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.4" } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", - "dev": true, + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -13693,34 +15656,32 @@ "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz", "integrity": "sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==" }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, "node_modules/octokit": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/octokit/-/octokit-3.1.2.tgz", - "integrity": "sha512-MG5qmrTL5y8KYwFgE1A4JWmgfQBaIETE/lOlfwNYx1QOtCQHGVxkRJmdUJltFc1HVn73d61TlMhMyNTOtMl+ng==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/octokit/-/octokit-3.2.1.tgz", + "integrity": "sha512-u+XuSejhe3NdIvty3Jod00JvTdAE/0/+XbhIDhefHbu+2OcTRHd80aCiH6TX19ZybJmwPQBKFQmHGxp0i9mJrg==", "dependencies": { "@octokit/app": "^14.0.2", "@octokit/core": "^5.0.0", "@octokit/oauth-app": "^6.0.0", "@octokit/plugin-paginate-graphql": "^4.0.0", - "@octokit/plugin-paginate-rest": "^9.0.0", - "@octokit/plugin-rest-endpoint-methods": "^10.0.0", + "@octokit/plugin-paginate-rest": "11.3.1", + "@octokit/plugin-rest-endpoint-methods": "13.2.2", "@octokit/plugin-retry": "^6.0.0", "@octokit/plugin-throttling": "^8.0.0", "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0" + "@octokit/types": "^13.0.0" }, "engines": { "node": ">= 18" } }, - "node_modules/oidc-token-hash": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz", - "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==", - "engines": { - "node": "^10.13.0 || >=12.0.0" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -13745,30 +15706,37 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "node_modules/openapi-path-templating": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/openapi-path-templating/-/openapi-path-templating-1.6.0.tgz", + "integrity": "sha512-1atBNwOUrZXthTvlvvX8k8ovFEF3iA8mDidYMkdOtvVdndBhTrspbwGXNOzEUaJhm9iUl4Tf5uQaeTLAJvwPig==", "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" + "apg-lite": "^1.0.3" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12.20.0" } }, "node_modules/openapi-sampler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/openapi-sampler/-/openapi-sampler-1.3.1.tgz", - "integrity": "sha512-Ert9mvc2tLPmmInwSyGZS+v4Ogu9/YoZuq9oP3EdUklg2cad6+IGndP9yqJJwbgdXwZibiq5fpv6vYujchdJFg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/openapi-sampler/-/openapi-sampler-1.5.1.tgz", + "integrity": "sha512-tIWIrZUKNAsbqf3bd9U1oH6JEXo8LNYuDlXw26By67EygpjT+ArFnsxxyTMjFWRfbqo5ozkvgSQDK69Gd8CddA==", "dependencies": { "@types/json-schema": "^7.0.7", "json-pointer": "0.6.2" } }, + "node_modules/openapi-server-url-templating": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/openapi-server-url-templating/-/openapi-server-url-templating-1.1.0.tgz", + "integrity": "sha512-dtyTFKx2xVcO0W8JKaluXIHC9l/MLjHeflBaWjiWNMCHp/TBs9dEjQDbj/VFlHR4omFOKjjmqm1pW1aCAhmPBg==", + "dependencies": { + "apg-lite": "^1.0.3" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/openapi3-ts": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-2.0.2.tgz", @@ -13785,53 +15753,23 @@ "node": ">= 6" } }, - "node_modules/openid-client": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.6.0.tgz", - "integrity": "sha512-uFTkN/iqgKvSnmpVAS/T6SNThukRMBcmymTQ71Ngus1F60tdtKVap7zCrleocY+fogPtpmoxi5Q1YdrgYuTlkA==", - "dependencies": { - "jose": "^4.15.1", - "lru-cache": "^6.0.0", - "object-hash": "^2.2.0", - "oidc-token-hash": "^5.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/openid-client/node_modules/object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", - "engines": { - "node": ">= 6" - } - }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -13922,52 +15860,29 @@ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, - "node_modules/patch-package": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.0.tgz", - "integrity": "sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==", + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "peer": true, "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^4.1.2", - "ci-info": "^3.7.0", - "cross-spawn": "^7.0.3", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^9.0.0", - "json-stable-stringify": "^1.0.2", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.6", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^7.5.3", - "slash": "^2.0.0", - "tmp": "^0.0.33", - "yaml": "^2.2.2" + "domhandler": "^5.0.2", + "parse5": "^7.0.0" }, - "bin": { - "patch-package": "index.js" - }, - "engines": { - "node": ">=14", - "npm": ">5" + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/patch-package/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "peer": true, "dependencies": { - "glob": "^7.1.3" + "entities": "^4.4.0" }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/patch-package/node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, "node_modules/path-browserify": { @@ -14005,6 +15920,21 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/path-to-regexp": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", @@ -14031,15 +15961,177 @@ "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.5.tgz", "integrity": "sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g==" }, - "node_modules/picocolors": { + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "peer": true + }, + "node_modules/pg": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz", + "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==", + "dev": true, + "dependencies": { + "pg-connection-string": "^2.6.4", + "pg-pool": "^3.6.2", + "pg-protocol": "^1.6.1", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "optionalDependencies": { + "pg-cloudflare": "^1.1.1" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-cloudflare": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz", + "integrity": "sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==", + "dev": true, + "optional": true + }, + "node_modules/pg-connection-string": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.4.tgz", + "integrity": "sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==", + "dev": true + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-numeric": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pg-numeric/-/pg-numeric-1.0.2.tgz", + "integrity": "sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pg-pool": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.2.tgz", + "integrity": "sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==", + "dev": true, + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz", + "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==", + "dev": true + }, + "node_modules/pg-types": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-4.0.2.tgz", + "integrity": "sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==", + "dev": true, + "dependencies": { + "pg-int8": "1.0.1", + "pg-numeric": "1.0.2", + "postgres-array": "~3.0.1", + "postgres-bytea": "~3.0.0", + "postgres-date": "~2.1.0", + "postgres-interval": "^3.0.0", + "postgres-range": "^1.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pg/node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dev": true, + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pg/node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pg/node_modules/postgres-bytea": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pg/node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pg/node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dev": true, + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dev": true, + "dependencies": { + "split2": "^4.1.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -14143,9 +16235,9 @@ } }, "node_modules/polished": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz", - "integrity": "sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", + "integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==", "dependencies": { "@babel/runtime": "^7.17.8" }, @@ -14153,10 +16245,19 @@ "node": ">=10" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", + "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", + "dev": true, "funding": [ { "type": "opencollective", @@ -14172,9 +16273,9 @@ } ], "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -14217,21 +16318,27 @@ } }, "node_modules/postcss-load-config": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", - "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^2.1.1" + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" }, "engines": { "node": ">= 14" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, "peerDependencies": { "postcss": ">=8.0.9", "ts-node": ">=9.0.0" @@ -14245,6 +16352,18 @@ } } }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, "node_modules/postcss-nested": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", @@ -14265,9 +16384,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", + "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -14282,10 +16401,55 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, + "node_modules/postgres-array": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-3.0.2.tgz", + "integrity": "sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/postgres-bytea": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-3.0.0.tgz", + "integrity": "sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==", + "dev": true, + "dependencies": { + "obuf": "~1.1.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postgres-date": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-2.1.0.tgz", + "integrity": "sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/postgres-interval": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-3.0.0.tgz", + "integrity": "sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/postgres-range": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/postgres-range/-/postgres-range-1.1.4.tgz", + "integrity": "sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==", + "dev": true + }, "node_modules/postman-collection": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.3.0.tgz", - "integrity": "sha512-QpmNOw1JhAVQTFWRz443/qpKs4/3T1MFrKqDZ84RS1akxOzhXXr15kD8+/+jeA877qyy9rfMsrFgLe2W7aCPjw==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.4.0.tgz", + "integrity": "sha512-2BGDFcUwlK08CqZFUlIC8kwRJueVzPjZnnokWPtJCd9f2J06HBQpGL7t2P1Ud1NEsK9NHq9wdipUhWLOPj5s/Q==", "dependencies": { "@faker-js/faker": "5.5.3", "file-type": "3.9.0", @@ -14303,29 +16467,76 @@ "node": ">=10" } }, - "node_modules/postman-collection/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "node_modules/postman-collection/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postman-collection/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { - "uuid": "dist/bin/uuid" + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, + "node_modules/postman-collection/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/postman-url-encoder": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-3.0.5.tgz", "integrity": "sha512-jOrdVvzUXBC7C+9gkIkpDJ3HIxOHTIqjpQ4C1EMt1ZGeMvSEpbFCKq23DEfgsj46vMnDgyQf+1ZLp2Wm+bKSsA==", "dependencies": { - "punycode": "^2.1.1" + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/preact": { + "version": "10.11.3", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.11.3.tgz", + "integrity": "sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/preact-render-to-string": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-5.2.3.tgz", + "integrity": "sha512-aPDxUn5o3GhWdtJtW0svRC2SS/l8D9MAgo2+AWml+BhDImb27ALf04Q2d+AHqUUOc6RdSXFIBVa2gxzgMKgtZA==", + "dependencies": { + "pretty-format": "^3.8.0" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "preact": ">=10" } }, + "node_modules/preact-render-to-string/node_modules/pretty-format": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-3.8.0.tgz", + "integrity": "sha512-WuxUnVtlWL1OfZFQFuqvnvs6MiAGk9UNsBostyBOB0Is9wb5uRESevA6rnl/rkksXaGX3GzZhPup5d6Vp1nFew==" + }, "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", "optional": true, "dependencies": { "detect-libc": "^2.0.0", @@ -14391,12 +16602,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, "node_modules/prism-react-renderer": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", @@ -14445,13 +16650,15 @@ "react-is": "^16.13.1" } }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "dependencies": { - "xtend": "^4.0.0" - }, + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -14473,17 +16680,17 @@ } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { "node": ">=6" } }, "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, "funding": [ { @@ -14498,11 +16705,11 @@ "peer": true }, "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "version": "6.12.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.3.tgz", + "integrity": "sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ==", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -14536,19 +16743,34 @@ } ] }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "peer": true, + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/railroad-diagrams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", + "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==", + "peer": true + }, "node_modules/ramda": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.1.tgz", - "integrity": "sha512-OfxIeWzd4xdUNxlWhgFazxsA/nl3mS4/jGZI5n00uWOoSSFRhC1b6gl6xvmzUamgmqELraWp0J/qqVlXYPDPyA==", + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.30.1.tgz", + "integrity": "sha512-tEF5I22zJnuclswcZMc8bDIrwRHRzf+NqVEmqg50ShAZMP7MWeR/RGDthfM/p+BlqvF2fXAzpn8i+SJcYD3alw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/ramda" } }, "node_modules/ramda-adjunct": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ramda-adjunct/-/ramda-adjunct-4.1.1.tgz", - "integrity": "sha512-BnCGsZybQZMDGram9y7RiryoRHS5uwx8YeGuUeDKuZuvK38XO6JJfmK85BwRWAKFA6pZ5nZBO/HBFtExVaf31w==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ramda-adjunct/-/ramda-adjunct-5.0.1.tgz", + "integrity": "sha512-UTQCcWnoiuYH+ua+jGg3GTktcmCSD2W7OO2++tmv8p2Ze+N9VgVACERg4g36rRfIXklVMtqazyBLBWXfoPKgRQ==", "engines": { "node": ">=0.10.3" }, @@ -14557,19 +16779,20 @@ "url": "https://opencollective.com/ramda-adjunct" }, "peerDependencies": { - "ramda": ">= 0.29.0" + "ramda": ">= 0.30.0" } }, "node_modules/randexp": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz", - "integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==", + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", + "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "peer": true, "dependencies": { - "drange": "^1.0.2", - "ret": "^0.2.0" + "discontinuous-range": "1.0.0", + "ret": "~0.1.10" }, "engines": { - "node": ">=4" + "node": ">=0.12" } }, "node_modules/randombytes": { @@ -14605,9 +16828,9 @@ } }, "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dependencies": { "loose-envify": "^1.1.0" }, @@ -14640,15 +16863,15 @@ } }, "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "dependencies": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^18.2.0" + "react": "^18.3.1" } }, "node_modules/react-fast-compare": { @@ -14686,9 +16909,9 @@ } }, "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, "node_modules/react-overflow-list": { "version": "0.5.0", @@ -14730,9 +16953,9 @@ } }, "node_modules/react-redux": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.1.0.tgz", - "integrity": "sha512-6qoDzIO+gbrza8h3hjMA9aq4nwVFCKFtY2iLxCtVT38Swyy2C/dJCGBXHeHLtx6qlg/8qzc2MrhOeduf5K32wQ==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.1.2.tgz", + "integrity": "sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w==", "dependencies": { "@types/use-sync-external-store": "^0.0.3", "use-sync-external-store": "^1.0.0" @@ -14740,16 +16963,12 @@ "peerDependencies": { "@types/react": "^18.2.25", "react": "^18.0", - "react-native": ">=0.69", "redux": "^5.0.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true }, - "react-native": { - "optional": true - }, "redux": { "optional": true } @@ -14803,6 +17022,23 @@ "react-router-dom": ">=4" } }, + "node_modules/react-router/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-shallow-renderer": { + "version": "16.15.0", + "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", + "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", + "dependencies": { + "object-assign": "^4.1.1", + "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-syntax-highlighter": { "version": "15.5.0", "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.5.0.tgz", @@ -14819,23 +17055,15 @@ } }, "node_modules/react-tabs": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-4.3.0.tgz", - "integrity": "sha512-2GfoG+f41kiBIIyd3gF+/GRCCYtamC8/2zlAcD8cqQmqI9Q+YVz7fJLHMmU9pXDVYYHpJeCgUSBJju85vu5q8Q==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-6.0.2.tgz", + "integrity": "sha512-aQXTKolnM28k3KguGDBSAbJvcowOQr23A+CUJdzJtOSDOtTwzEaJA+1U4KwhNL9+Obe+jFS7geuvA7ICQPXOnQ==", "dependencies": { - "clsx": "^1.1.0", + "clsx": "^2.0.0", "prop-types": "^15.5.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-0 || ^18.0.0" - } - }, - "node_modules/react-tabs/node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "engines": { - "node": ">=6" + "react": "^18.0.0" } }, "node_modules/react-transition-group": { @@ -14853,6 +17081,15 @@ "react-dom": ">=16.6.0" } }, + "node_modules/react-transition-group/node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, "node_modules/react-universal-interface": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/react-universal-interface/-/react-universal-interface-0.6.2.tgz", @@ -14863,9 +17100,9 @@ } }, "node_modules/react-use": { - "version": "17.4.1", - "resolved": "https://registry.npmjs.org/react-use/-/react-use-17.4.1.tgz", - "integrity": "sha512-f3EdGM5ea+2EEIkfgggE+Jhza7uEek8aEMTpd1TQnyqGAD4wew3CMVshiXEP6kstjBE4XUGoKVxttqio76ijNw==", + "version": "17.5.0", + "resolved": "https://registry.npmjs.org/react-use/-/react-use-17.5.0.tgz", + "integrity": "sha512-PbfwSPMwp/hoL847rLnm/qkjg3sTRCvn6YhUZiHaUa3FA6/aNoFX79ul5Xt70O1rK+9GxSVqkY0eTwMdsR/bWg==", "dependencies": { "@types/js-cookie": "^2.2.6", "@xobotyi/scrollbar-width": "^1.9.5", @@ -14883,8 +17120,8 @@ "tslib": "^2.1.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "*", + "react-dom": "*" } }, "node_modules/read-cache": { @@ -14942,9 +17179,9 @@ } }, "node_modules/redis-semaphore": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/redis-semaphore/-/redis-semaphore-5.5.0.tgz", - "integrity": "sha512-JSoCtkcXRr5hN2Hs7cmP/998bKAkZbJJ6C9T+UYh6BlEhYevWkQ6b5IHPRrZxCepPwwJnt/piacmB3a5UoXIYw==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/redis-semaphore/-/redis-semaphore-5.6.0.tgz", + "integrity": "sha512-HK0Bvt9BTyYoXg/SanwXVbgoDFQ2n4n08nExRM04JWIOz6VsU3mxmZ16jSgEc+7kFsYt7w9SMh6EF4MGZWLMeA==", "dependencies": { "debug": "^4.3.4" }, @@ -14953,33 +17190,39 @@ }, "peerDependencies": { "ioredis": "^4.1.0 || ^5" + }, + "peerDependenciesMeta": { + "ioredis": { + "optional": true + } } }, "node_modules/redoc": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/redoc/-/redoc-2.1.3.tgz", - "integrity": "sha512-d7F9qLLxaiFW4GC03VkwlX9wuRIpx9aiIIf3o6mzMnqPfhxrn2IRKGndrkJeVdItgCfmg9jXZiFEowm60f1meQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/redoc/-/redoc-2.1.5.tgz", + "integrity": "sha512-POSbVg+7WLf+/5/c6GWLxL7+9t2D+1WlZdLN0a6qaCQc+ih3XYzteRBkXEN5kjrYrRNjdspfxTZkDLN5WV3Tzg==", "dependencies": { - "@redocly/openapi-core": "^1.0.0-rc.2", - "classnames": "^2.3.1", + "@cfaester/enzyme-adapter-react-18": "^0.8.0", + "@redocly/openapi-core": "^1.4.0", + "classnames": "^2.3.2", "decko": "^1.2.0", - "dompurify": "^2.2.8", - "eventemitter3": "^4.0.7", + "dompurify": "^3.0.6", + "eventemitter3": "^5.0.1", "json-pointer": "^0.6.2", "lunr": "^2.3.9", "mark.js": "^8.11.1", - "marked": "^4.0.15", - "mobx-react": "^7.2.0", - "openapi-sampler": "^1.3.1", + "marked": "^4.3.0", + "mobx-react": "^9.1.1", + "openapi-sampler": "^1.5.0", "path-browserify": "^1.0.1", "perfect-scrollbar": "^1.5.5", - "polished": "^4.1.3", - "prismjs": "^1.27.0", - "prop-types": "^15.7.2", - "react-tabs": "^4.3.0", + "polished": "^4.2.2", + "prismjs": "^1.29.0", + "prop-types": "^15.8.1", + "react-tabs": "^6.0.2", "slugify": "~1.4.7", "stickyfill": "^1.1.1", - "swagger2openapi": "^7.0.6", + "swagger2openapi": "^7.0.8", "url-template": "^2.0.8" }, "engines": { @@ -14994,11 +17237,6 @@ "styled-components": "^4.1.1 || ^5.1.1 || ^6.0.5" } }, - "node_modules/redoc/node_modules/dompurify": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.7.tgz", - "integrity": "sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ==" - }, "node_modules/redux": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", @@ -15013,15 +17251,16 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", - "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" }, @@ -15046,6 +17285,40 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/refractor/node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/refractor/node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/refractor/node_modules/hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/refractor/node_modules/prismjs": { "version": "1.27.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", @@ -15054,6 +17327,27 @@ "node": ">=6" } }, + "node_modules/refractor/node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/refractor/node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/reftools": { "version": "1.1.9", "resolved": "https://registry.npmjs.org/reftools/-/reftools-1.1.9.tgz", @@ -15063,19 +17357,19 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", - "dev": true, + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -15158,9 +17452,9 @@ } }, "node_modules/remove-accents": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", - "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", + "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==" }, "node_modules/repeat-string": { "version": "1.6.1", @@ -15192,9 +17486,9 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "node_modules/reselect": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.0.tgz", - "integrity": "sha512-aw7jcGLDpSgNDyWBQLv2cedml85qd95/iszJjN988zX1t7AVRJi19d9kto5+W7oCfQ94gyo40dVbT6g2k4/kXg==" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", + "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==" }, "node_modules/resize-observer-polyfill": { "version": "1.5.1", @@ -15202,9 +17496,9 @@ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" }, "node_modules/resolve": { - "version": "1.22.6", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz", - "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -15273,11 +17567,12 @@ } }, "node_modules/ret": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", - "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "peer": true, "engines": { - "node": ">=4" + "node": ">=0.12" } }, "node_modules/reusify": { @@ -15294,6 +17589,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dependencies": { "glob": "^7.1.3" }, @@ -15304,6 +17600,56 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/rst-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", + "integrity": "sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA==", + "peer": true, + "dependencies": { + "lodash.flattendeep": "^4.4.0", + "nearley": "^2.7.10" + } + }, "node_modules/rtl-css-js": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz", @@ -15336,13 +17682,12 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", - "dev": true, + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -15373,15 +17718,17 @@ ] }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -15397,9 +17744,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dependencies": { "loose-envify": "^1.1.0" } @@ -15416,12 +17763,9 @@ } }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "bin": { "semver": "bin/semver.js" }, @@ -15443,15 +17787,42 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", - "dev": true, + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -15502,9 +17873,9 @@ } }, "node_modules/short-unique-id": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/short-unique-id/-/short-unique-id-5.0.3.tgz", - "integrity": "sha512-yhniEILouC0s4lpH0h7rJsfylZdca10W9mDJRAFh3EpcSUanCHGb0R7kcFOIUCZYSAPo0PUD5ZxWQdW0T4xaug==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/short-unique-id/-/short-unique-id-5.2.0.tgz", + "integrity": "sha512-cMGfwNyfDZ/nzJ2k2M+ClthBIh//GlZl1JEf47Uoa9XR11bz8Pa2T2wQO4bVrRdH48LrIDWJahQziKo3MjhsWg==", "bin": { "short-unique-id": "bin/short-unique-id", "suid": "bin/short-unique-id" @@ -15559,24 +17930,32 @@ "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==" }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "peer": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/simple-concat": { "version": "1.0.1", @@ -15648,17 +18027,17 @@ } }, "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } @@ -15674,15 +18053,34 @@ "source-map": "^0.6.0" } }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -15749,11 +18147,6 @@ "stacktrace-gps": "^3.0.4" } }, - "node_modules/stampit": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/stampit/-/stampit-4.3.2.tgz", - "integrity": "sha512-pE2org1+ZWQBnIxRPrBM2gVupkuDD0TTNIo1H6GdT/vO82NXli2z8lRE8cu/nBIHrcOCXFBAHpb9ZldrB2/qOA==" - }, "node_modules/standard-as-callback": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", @@ -15764,6 +18157,18 @@ "resolved": "https://registry.npmjs.org/stickyfill/-/stickyfill-1.1.1.tgz", "integrity": "sha512-GCp7vHAfpao+Qh/3Flh9DXEJ/qSi0KJwJw6zYlZOtRYXWUIpMM6mC2rIep/dK8RQqwW0KxGJIllmjPIBOGN8AA==" }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -15796,6 +18201,23 @@ } }, "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", @@ -15808,40 +18230,91 @@ "node": ">=8" } }, - "node_modules/string-width/node_modules/emoji-regex": { + "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/string.prototype.includes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz", + "integrity": "sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.matchall": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", - "side-channel": "^1.0.4" + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -15851,28 +18324,29 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", - "dev": true, + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", - "dev": true, + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -15902,13 +18376,26 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, + "peer": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/strip-final-newline": { @@ -15942,19 +18429,19 @@ } }, "node_modules/styled-components": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.1.tgz", - "integrity": "sha512-cpZZP5RrKRIClBW5Eby4JM1wElLVP4NQrJbJ0h10TidTyJf4SIIwa3zLXOoPb4gJi8MsJ8mjq5mu2IrEhZIAcQ==", + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.11.tgz", + "integrity": "sha512-Ui0jXPzbp1phYij90h12ksljKGqF8ncGx+pjrNPsSPhbUUjWT2tD1FwGo2LF6USCnbrsIhNngDfodhxbegfEOA==", "dependencies": { - "@emotion/is-prop-valid": "^1.2.1", - "@emotion/unitless": "^0.8.0", - "@types/stylis": "^4.0.2", - "css-to-react-native": "^3.2.0", - "csstype": "^3.1.2", - "postcss": "^8.4.31", - "shallowequal": "^1.1.0", - "stylis": "^4.3.0", - "tslib": "^2.5.0" + "@emotion/is-prop-valid": "1.2.2", + "@emotion/unitless": "0.8.1", + "@types/stylis": "4.2.5", + "css-to-react-native": "3.2.0", + "csstype": "3.1.3", + "postcss": "8.4.38", + "shallowequal": "1.1.0", + "stylis": "4.3.2", + "tslib": "2.6.2" }, "engines": { "node": ">= 16" @@ -15968,10 +18455,42 @@ "react-dom": ">= 16.8.0" } }, + "node_modules/styled-components/node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/styled-components/node_modules/stylis": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", - "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", + "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==" + }, + "node_modules/styled-components/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, "node_modules/styled-jsx": { "version": "5.1.1", @@ -16001,14 +18520,14 @@ "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" }, "node_modules/sucrase": { - "version": "3.34.0", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", - "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", - "glob": "7.1.6", + "glob": "^10.3.10", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", @@ -16019,38 +18538,27 @@ "sucrase-node": "bin/sucrase-node" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/sucrase/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 6" } }, "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -16065,45 +18573,46 @@ } }, "node_modules/swagger-client": { - "version": "3.25.3", - "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.25.3.tgz", - "integrity": "sha512-DUQ1zBgs+SDRTL+w2F2KDoneA9rkwpq9oF2Gex0HzGdlWP/4mEClFgp6ulMgcdSS2mC+B7thnvuT6aF1AwKbqw==", + "version": "3.28.2", + "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.28.2.tgz", + "integrity": "sha512-g30KCdSVyZlMulWOJnheNo7Ea+L06OZebl0oRU6zHd5Zf5AZKHTqurKRdNOLsMWA3l3bWJiEh7s3JlzFJHRmoQ==", "dependencies": { "@babel/runtime-corejs3": "^7.22.15", - "@swagger-api/apidom-core": ">=0.90.0 <1.0.0", - "@swagger-api/apidom-error": ">=0.90.0 <1.0.0", - "@swagger-api/apidom-json-pointer": ">=0.90.0 <1.0.0", - "@swagger-api/apidom-ns-openapi-3-1": ">=0.90.0 <1.0.0", - "@swagger-api/apidom-reference": ">=0.90.0 <1.0.0", + "@swagger-api/apidom-core": ">=1.0.0-alpha.5 <1.0.0-beta.0", + "@swagger-api/apidom-error": ">=1.0.0-alpha.5 <1.0.0-beta.0", + "@swagger-api/apidom-json-pointer": ">=1.0.0-alpha.5 <1.0.0-beta.0", + "@swagger-api/apidom-ns-openapi-3-1": ">=1.0.0-alpha.5 <1.0.0-beta.0", + "@swagger-api/apidom-reference": ">=1.0.0-alpha.5 <1.0.0-beta.0", "cookie": "~0.6.0", "deepmerge": "~4.3.0", "fast-json-patch": "^3.0.0-1", - "is-plain-object": "^5.0.0", "js-yaml": "^4.1.0", "node-abort-controller": "^3.1.1", "node-fetch-commonjs": "^3.3.2", + "openapi-path-templating": "^1.5.1", + "openapi-server-url-templating": "^1.0.0", "qs": "^6.10.2", - "traverse": "~0.6.6" + "ramda-adjunct": "^5.0.0", + "traverse": "=0.6.8" } }, "node_modules/swagger-ui-react": { - "version": "5.11.7", - "resolved": "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-5.11.7.tgz", - "integrity": "sha512-zhk3WpYq4fcauQ93Tbn3KmNS3vbBsi/zMqG7iHrMpNdSjEOeSJBWSdPMpCcQY48uTJxB/uD1g6wFE68liYK9+Q==", + "version": "5.17.14", + "resolved": "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-5.17.14.tgz", + "integrity": "sha512-mCXerZrbcn4ftPYifUF0+iKIRTHoVCv0HcJc/sXl9nCe3oeWdsjmOWVqKabzzAkAa0NwsbKNJFv2UL/Ivnf6VQ==", "dependencies": { - "@babel/runtime-corejs3": "^7.23.9", - "@braintree/sanitize-url": "=7.0.0", + "@babel/runtime-corejs3": "^7.24.5", + "@braintree/sanitize-url": "=7.0.2", "base64-js": "^1.5.1", "classnames": "^2.5.1", "css.escape": "1.5.1", "deep-extend": "0.6.0", - "dompurify": "=3.0.8", + "dompurify": "=3.1.4", "ieee754": "^1.2.1", "immutable": "^3.x.x", "js-file-download": "^0.4.12", "js-yaml": "=4.1.0", "lodash": "^4.17.21", - "patch-package": "^8.0.0", "prop-types": "^15.8.1", "randexp": "^0.5.3", "randombytes": "^2.1.0", @@ -16112,7 +18621,7 @@ "react-immutable-proptypes": "2.2.0", "react-immutable-pure-component": "^2.2.0", "react-inspector": "^6.0.1", - "react-redux": "^9.1.0", + "react-redux": "^9.1.2", "react-syntax-highlighter": "^15.5.0", "redux": "^5.0.1", "redux-immutable": "^4.0.0", @@ -16120,7 +18629,7 @@ "reselect": "^5.1.0", "serialize-error": "^8.1.0", "sha.js": "^2.4.11", - "swagger-client": "^3.25.0", + "swagger-client": "^3.28.1", "url-parse": "^1.5.10", "xml": "=1.0.1", "xml-but-prettier": "^1.0.1", @@ -16131,6 +18640,31 @@ "react-dom": ">=16.8.0 <19" } }, + "node_modules/swagger-ui-react/node_modules/dompurify": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.4.tgz", + "integrity": "sha512-2gnshi6OshmuKil8rMZuQCGiUF3cUxHY3NGDzUAdUx/NPEe5DVnO8BDoAQouvgwnx0R/+a6jUn36Z0FSdq8vww==" + }, + "node_modules/swagger-ui-react/node_modules/randexp": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz", + "integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==", + "dependencies": { + "drange": "^1.0.2", + "ret": "^0.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/swagger-ui-react/node_modules/ret": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", + "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", + "engines": { + "node": ">=4" + } + }, "node_modules/swagger2openapi": { "version": "7.0.8", "resolved": "https://registry.npmjs.org/swagger2openapi/-/swagger2openapi-7.0.8.tgz", @@ -16166,9 +18700,9 @@ } }, "node_modules/swr": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.4.tgz", - "integrity": "sha512-njiZ/4RiIhoOlAaLYDqwz5qH/KZXVilRLvomrx83HjzCWTfa+InyfAjv05PSFxnmLzZkNO9ZfvgoqzAaEI4sGQ==", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.5.tgz", + "integrity": "sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==", "dependencies": { "client-only": "^0.0.1", "use-sync-external-store": "^1.2.0" @@ -16177,15 +18711,10 @@ "react": "^16.11.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/tabbable": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" - }, "node_modules/tailwindcss": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz", - "integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==", + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz", + "integrity": "sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==", "dev": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", @@ -16196,7 +18725,7 @@ "fast-glob": "^3.3.0", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.19.1", + "jiti": "^1.21.0", "lilconfig": "^2.1.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", @@ -16271,11 +18800,56 @@ "node": ">=8" } }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "node_modules/thenify": { "version": "3.3.1", @@ -16307,26 +18881,15 @@ } }, "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" }, "node_modules/tiny-warning": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -16346,6 +18909,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -16415,12 +18979,12 @@ } }, "node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, "engines": { - "node": ">=16.13.0" + "node": ">=16" }, "peerDependencies": { "typescript": ">=4.2.0" @@ -16438,12 +19002,13 @@ "dev": true }, "node_modules/ts-jest": { - "version": "29.1.1", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", - "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", + "version": "29.2.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.2.tgz", + "integrity": "sha512-sSW7OooaKT34AAngP6k1VS669a0HdLxkQZnlC7T76sckGCokXFnvJ3yRlQZGRTAoV5K19HfSgCiSwWOSIfcYlg==", "dev": true, "dependencies": { "bs-logger": "0.x", + "ejs": "^3.0.0", "fast-json-stable-stringify": "2.x", "jest-util": "^29.0.0", "json5": "^2.2.3", @@ -16456,10 +19021,11 @@ "ts-jest": "cli.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0", "@jest/types": "^29.0.0", "babel-jest": "^29.0.0", "jest": "^29.0.0", @@ -16469,6 +19035,9 @@ "@babel/core": { "optional": true }, + "@jest/transform": { + "optional": true + }, "@jest/types": { "optional": true }, @@ -16480,18 +19049,6 @@ } } }, - "node_modules/ts-jest/node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/ts-keycode-enum": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/ts-keycode-enum/-/ts-keycode-enum-1.0.6.tgz", @@ -16508,9 +19065,9 @@ "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==" }, "node_modules/tsconfig-paths": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", - "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", @@ -16519,10 +19076,31 @@ "strip-bom": "^3.0.0" } }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" }, "node_modules/tunnel-agent": { "version": "0.6.0", @@ -16559,9 +19137,11 @@ } }, "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -16582,29 +19162,28 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", - "dev": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", - "dev": true, + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -16614,16 +19193,16 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", - "dev": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -16633,31 +19212,36 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/types-ramda": { - "version": "0.29.8", - "resolved": "https://registry.npmjs.org/types-ramda/-/types-ramda-0.29.8.tgz", - "integrity": "sha512-+RTOlcwl1hEdNV1xfug3ofG6rny0hqQsFuBmS88vD4Lrh8Iys14IPlUH9QaGjCY46iCZgEDuCTLMLH/pOOsGKg==", + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/types-ramda/-/types-ramda-0.30.1.tgz", + "integrity": "sha512-1HTsf5/QVRmLzcGfldPFvkVsAdi1db1BBKzi7iW3KBUlOICg/nKnFS+jGqDJS3YD8VsWbAh7JiHeBvbsw8RPxA==", "dependencies": { "ts-toolbelt": "^9.6.0" } }, "node_modules/typescript": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz", - "integrity": "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", + "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -16671,7 +19255,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -16826,26 +19409,18 @@ } }, "node_modules/universal-github-app-jwt": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", - "integrity": "sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.2.tgz", + "integrity": "sha512-t1iB2FmLFE+yyJY9+3wMx0ejB+MQpEVkH0gQv7dR6FZyltyq+ZZO0uDpbopxhrZ3SLEO4dCEkIujOMldEQ2iOA==", "dependencies": { "@types/jsonwebtoken": "^9.0.0", - "jsonwebtoken": "^9.0.0" + "jsonwebtoken": "^9.0.2" } }, "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==" }, "node_modules/unload": { "version": "2.2.0", @@ -16862,9 +19437,9 @@ "integrity": "sha512-08/DA66UF65OlpUDIQtbJyrqTR0jTAlJ+jsnkQ4jxR7+K5g5YG1APZKQSMCE1vqqmD+2pv6+IdEjmopFatacvg==" }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "devOptional": true, "funding": [ { @@ -16881,8 +19456,8 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -16904,11 +19479,6 @@ "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==" }, - "node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==" - }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -16936,24 +19506,25 @@ } }, "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", + "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/usehooks-ts": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-2.9.1.tgz", - "integrity": "sha512-2FAuSIGHlY+apM9FVlj8/oNhd+1y+Uwv5QNkMQz1oSfdHk4PXo1qoCw9I5M7j0vpH8CSWFJwXbVPeYDjLCx9PA==", + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-2.16.0.tgz", + "integrity": "sha512-bez95WqYujxp6hFdM/CpRDiVPirZPxlMzOH2QB8yopoKQMXpscyZoxOjpEdaxvV+CAWUDSM62cWnqHE0E/MZ7w==", + "dependencies": { + "lodash.debounce": "^4.0.8" + }, "engines": { - "node": ">=16.15.0", - "npm": ">=8" + "node": ">=16.15.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17 || ^18" } }, "node_modules/util": { @@ -16975,29 +19546,25 @@ "devOptional": true }, "node_modules/utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", + "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", "engines": { "node": ">= 4" } }, "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/v8-to-istanbul": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", - "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, "peer": true, "dependencies": { @@ -17009,6 +19576,13 @@ "node": ">=10.12.0" } }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "peer": true + }, "node_modules/validate.io-array": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", @@ -17137,18 +19711,6 @@ "makeerror": "1.0.12" } }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/web-namespaces": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", @@ -17159,11 +19721,11 @@ } }, "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", "engines": { - "node": ">= 8" + "node": ">= 14" } }, "node_modules/web-tree-sitter": { @@ -17178,9 +19740,9 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/whatwg-fetch": { - "version": "3.6.19", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", - "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==" + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" }, "node_modules/whatwg-url": { "version": "5.0.0", @@ -17209,7 +19771,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -17248,30 +19809,33 @@ } }, "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -17285,7 +19849,33 @@ "resolved": "https://registry.npmjs.org/wolfy87-eventemitter/-/wolfy87-eventemitter-5.2.9.tgz", "integrity": "sha512-P+6vtWyuDw+MB01X7UeF8TaHBvbCovf4HPEMF/SV7BdDc1SMTiBy13SRD71lQh4ExFTG1d/WNzDGDCyOKSMblw==" }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", @@ -17301,6 +19891,90 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -17310,8 +19984,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "peer": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -17320,6 +19992,11 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, "node_modules/xml": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", @@ -17369,14 +20046,19 @@ } }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "devOptional": true, + "peer": true }, "node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } @@ -17411,6 +20093,24 @@ "node": ">=12" } }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -17429,9 +20129,9 @@ "integrity": "sha512-jEA1znR7b4C/NnaycInCU6h/d15ZzCd1jmsruqOKnZP6WXQSMH3W2GL+OXbkruslU4h+Tzuos0HdswzRUk/Vgg==" }, "node_modules/zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index fbfd4958..61ae805a 100644 --- a/package.json +++ b/package.json @@ -11,56 +11,61 @@ "build": "next build", "start": "next start", "lint": "next lint --max-warnings=0", - "test": "jest" + "test": "jest", + "testwatch": "jest --watch" }, "dependencies": { - "@auth0/nextjs-auth0": "^3.3.0", - "@emotion/react": "^11.11.1", - "@emotion/styled": "^11.11.0", - "@fortawesome/fontawesome-svg-core": "^6.4.2", - "@fortawesome/free-solid-svg-icons": "^6.4.2", - "@fortawesome/react-fontawesome": "^0.2.0", - "@mui/icons-material": "^5.15.10", - "@mui/material": "^5.14.18", - "@octokit/auth-app": "^6.0.1", - "@octokit/core": "^5.1.0", - "@octokit/webhooks": "^12.0.3", - "@stoplight/elements": "^7.15.3", - "auth0": "^4.1.0", - "core-js": "^3.33.3", + "@emotion/react": "^11.11.4", + "@emotion/styled": "^11.11.5", + "@fortawesome/fontawesome-svg-core": "^6.5.2", + "@fortawesome/free-solid-svg-icons": "^6.5.2", + "@fortawesome/react-fontawesome": "^0.2.2", + "@mui/icons-material": "^5.16.1", + "@mui/material": "^5.16.1", + "@octokit/auth-app": "^6.1.1", + "@octokit/core": "^5.2.0", + "@octokit/webhooks": "^12.2.0", + "@stoplight/elements": "^8.3.3", + "core-js": "^3.37.1", "encoding": "^0.1.13", "figma-squircle": "^0.3.1", "install": "^0.13.0", - "ioredis": "^5.3.2", - "mobx": "^6.12.0", - "next": "14.0.2", - "npm": "^10.2.4", - "octokit": "^3.1.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "redis-semaphore": "^5.5.0", - "redoc": "^2.1.3", - "styled-components": "^6.1.1", - "swagger-ui-react": "^5.11.7", - "swr": "^2.2.4", - "usehooks-ts": "^2.9.1", - "yaml": "^2.3.4", - "zod": "^3.22.4" + "ioredis": "^5.4.1", + "mobx": "^6.13.0", + "next": "^14.2.5", + "next-auth": "^5.0.0-beta.19", + "nodemailer": "^6.9.14", + "npm": "^10.8.2", + "octokit": "^3.2.1", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "redis-semaphore": "^5.6.0", + "redoc": "^2.1.5", + "styled-components": "^6.1.11", + "swagger-ui-react": "^5.17.14", + "swr": "^2.2.5", + "usehooks-ts": "^2.16.0", + "yaml": "^2.4.5", + "zod": "^3.23.8" }, "devDependencies": { - "@types/jest": "^29.5.8", - "@types/node": "^20.9.2", - "@types/react": "^18", - "@types/react-dom": "^18", - "@types/swagger-ui-react": "^4.18.2", - "@typescript-eslint/eslint-plugin": "^7.0.0", - "@typescript-eslint/parser": "^6.9.1", - "autoprefixer": "^10", - "eslint": "^8.56.0", - "eslint-config-next": "14.0.3", - "postcss": "^8", - "tailwindcss": "^3", - "ts-jest": "^29.1.1", - "typescript": "^5.3.2" + "@auth/pg-adapter": "^0.5.3", + "@types/jest": "^29.5.12", + "@types/node": "^20.14.10", + "@types/nodemailer": "^6.4.15", + "@types/pg": "^8.11.6", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@types/swagger-ui-react": "^4.18.3", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "autoprefixer": "^10.4.19", + "eslint": "^8.57.0", + "eslint-config-next": "^14.2.5", + "pg": "^8.12.0", + "postcss": "^8.4.39", + "tailwindcss": "^3.4.4", + "ts-jest": "^29.2.2", + "typescript": "^5.5.3" } } diff --git a/public/images/duck.png b/public/images/duck.png deleted file mode 100644 index 9895edf6..00000000 Binary files a/public/images/duck.png and /dev/null differ diff --git a/public/duck.png b/public/images/logo.png similarity index 100% rename from public/duck.png rename to public/images/logo.png diff --git a/public/images/shape-logo-text.png b/public/images/shape-logo-text.png deleted file mode 100644 index 0b6acc33..00000000 Binary files a/public/images/shape-logo-text.png and /dev/null differ diff --git a/public/images/shape-logo.png b/public/images/shape-logo.png deleted file mode 100644 index 913f770d..00000000 Binary files a/public/images/shape-logo.png and /dev/null differ diff --git a/src/app/[...slug]/page.tsx b/src/app/[...slug]/page.tsx deleted file mode 100644 index 76b93de3..00000000 --- a/src/app/[...slug]/page.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import SessionBarrier from "@/features/auth/view/SessionBarrier" -import ProjectsPage from "@/features/projects/view/ProjectsPage" -import { projectRepository } from "@/composition" - -type PageParams = { slug: string | string[] } - -export default async function Page({ params }: { params: PageParams }) { - return ( - - - - ) -} - -function getPath(slug: string | string[]) { - if (typeof slug === "string") { - return "/" + slug - } else { - return slug.reduce((e, acc) => `${e}/${acc}`, "") - } -} diff --git a/src/app/[[...slug]]/page.tsx b/src/app/[[...slug]]/page.tsx new file mode 100644 index 00000000..092f7f40 --- /dev/null +++ b/src/app/[[...slug]]/page.tsx @@ -0,0 +1,37 @@ +import { redirect } from "next/navigation" +import { SessionProvider } from "next-auth/react" +import { session, projectRepository } from "@/composition" +import ErrorHandler from "@/common/errors/client/ErrorHandler" +import SessionBarrier from "@/features/auth/view/SessionBarrier" +import ProjectsPage from "@/features/projects/view/ProjectsPage" + +type PageParams = { slug: string | string[] } + +export default async function Page({ params }: { params: PageParams }) { + const isAuthenticated = await session.getIsAuthenticated() + if (!isAuthenticated) { + return redirect("/api/auth/signin") + } + return ( + + + + + + + + ) +} + +function getPath(slug: string | string[] | undefined) { + if (slug === undefined) { + return "/" + } else if (typeof slug === "string") { + return "/" + slug + } else { + return slug.reduce((e, acc) => `${e}/${acc}`, "") + } +} diff --git a/src/app/api/auth/[...nextauth]/route.ts b/src/app/api/auth/[...nextauth]/route.ts new file mode 100644 index 00000000..1d38a1d9 --- /dev/null +++ b/src/app/api/auth/[...nextauth]/route.ts @@ -0,0 +1,3 @@ +import { auth } from "@/composition" + +export const { GET, POST } = auth.handlers diff --git a/src/app/api/auth/[auth0]/route.ts b/src/app/api/auth/[auth0]/route.ts deleted file mode 100644 index 2023b606..00000000 --- a/src/app/api/auth/[auth0]/route.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { NextResponse } from "next/server" -import { - handleAuth, - handleCallback, - handleLogout, - AfterCallbackAppRoute, - NextAppRouterHandler, - AppRouterOnError -} from "@auth0/nextjs-auth0" -import { logInHandler, logOutHandler } from "@/composition" - -const { SHAPE_DOCS_BASE_URL } = process.env - -const afterCallback: AfterCallbackAppRoute = async (_req, session) => { - await logInHandler.handleLogIn(session.user.sub) - return session -} - -const onError: AppRouterOnError = async (_req, error) => { - console.error(error) - const url = new URL(SHAPE_DOCS_BASE_URL + "/api/auth/forceLogout") - return NextResponse.redirect(url) -} - -const onLogout: NextAppRouterHandler = async (req, ctx) => { - await logOutHandler.handleLogOut() - return await handleLogout(req, ctx) -} - -export const GET = handleAuth({ - callback: handleCallback({ afterCallback }), - logout: onLogout, - onError -}) diff --git a/src/app/api/auth/forceLogout/route.ts b/src/app/api/auth/forceLogout/route.ts deleted file mode 100644 index bc902b44..00000000 --- a/src/app/api/auth/forceLogout/route.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { NextRequest, NextResponse } from "next/server" - -const { - AUTH0_ISSUER_BASE_URL -} = process.env - -export async function GET(req: NextRequest) { - // If we encounter an error during login then we force the user - // to logout using Auth0's /oidc/logout endpoint as documented here: - // https://auth0.com/docs/authenticate/login/logout/log-users-out-of-auth0 - // While the documentation states that an id_token_hint or logout_hint - // should be provided that is not needed as the user is not fully logged - // in at this point. - const url = new URL(AUTH0_ISSUER_BASE_URL + "/oidc/logout") - const host = req.headers.get('host') - const redirectURI = req.nextUrl.protocol + "//" + host - url.searchParams.append("post_logout_redirect_uri", redirectURI) - - const response = NextResponse.redirect(url) - response.cookies.delete("appSession") - return response -} diff --git a/src/app/api/blob/[owner]/[repository]/[...path]/route.ts b/src/app/api/blob/[owner]/[repository]/[...path]/route.ts index 2dd2d532..ad91bf3d 100644 --- a/src/app/api/blob/[owner]/[repository]/[...path]/route.ts +++ b/src/app/api/blob/[owner]/[repository]/[...path]/route.ts @@ -1,5 +1,6 @@ import { NextRequest, NextResponse } from "next/server" -import { userGitHubClient } from "@/composition" +import { session, userGitHubClient } from "@/composition" +import { makeUnauthenticatedAPIErrorResponse } from "@/common" interface GetBlobParams { owner: string @@ -8,6 +9,10 @@ interface GetBlobParams { } export async function GET(req: NextRequest, { params }: { params: GetBlobParams }) { + const isAuthenticated = await session.getIsAuthenticated() + if (!isAuthenticated) { + return makeUnauthenticatedAPIErrorResponse() + } const path = params.path.join("/") const item = await userGitHubClient.getRepositoryContent({ repositoryOwner: params.owner, diff --git a/src/app/api/hooks/github/route.ts b/src/app/api/hooks/github/route.ts index d1fd0b6e..6f359950 100644 --- a/src/app/api/hooks/github/route.ts +++ b/src/app/api/hooks/github/route.ts @@ -1,49 +1,7 @@ import { NextRequest, NextResponse } from "next/server" -import { - GitHubHookHandler, - GitHubPullRequestCommentRepository -} from "@/features/hooks/data" -import { - PostCommentPullRequestEventHandler, - RepositoryNameCheckingPullRequestEventHandler, - ExistingCommentCheckingPullRequestEventHandler -} from "@/features/hooks/domain" -import { gitHubClient } from "@/composition" - -const { - SHAPE_DOCS_BASE_URL, - GITHUB_WEBHOOK_SECRET, - GITHUB_WEBHOK_REPOSITORY_ALLOWLIST, - GITHUB_WEBHOK_REPOSITORY_DISALLOWLIST -} = process.env - -const listFromCommaSeparatedString = (str?: string) => { - if (!str) { - return [] - } - return str.split(",").map(e => e.trim()) -} - -const allowedRepositoryNames = listFromCommaSeparatedString(GITHUB_WEBHOK_REPOSITORY_ALLOWLIST) -const disallowedRepositoryNames = listFromCommaSeparatedString(GITHUB_WEBHOK_REPOSITORY_DISALLOWLIST) - -const hookHandler = new GitHubHookHandler({ - secret: GITHUB_WEBHOOK_SECRET, - pullRequestEventHandler: new RepositoryNameCheckingPullRequestEventHandler( - new ExistingCommentCheckingPullRequestEventHandler( - new PostCommentPullRequestEventHandler( - new GitHubPullRequestCommentRepository(gitHubClient), - SHAPE_DOCS_BASE_URL - ), - new GitHubPullRequestCommentRepository(gitHubClient), - SHAPE_DOCS_BASE_URL - ), - allowedRepositoryNames, - disallowedRepositoryNames - ) -}) +import { gitHubHookHandler } from "@/composition" export const POST = async (req: NextRequest): Promise => { - await hookHandler.handle(req) + await gitHubHookHandler.handle(req) return NextResponse.json({ status: "OK" }) } diff --git a/src/app/api/proxy/route.ts b/src/app/api/proxy/route.ts index 7245898c..22226634 100644 --- a/src/app/api/proxy/route.ts +++ b/src/app/api/proxy/route.ts @@ -1,7 +1,12 @@ import { NextRequest, NextResponse } from "next/server" -import { makeAPIErrorResponse } from "@/common" +import { makeAPIErrorResponse, makeUnauthenticatedAPIErrorResponse } from "@/common" +import { session } from "@/composition" export async function GET(req: NextRequest) { + const isAuthenticated = await session.getIsAuthenticated() + if (!isAuthenticated) { + return makeUnauthenticatedAPIErrorResponse() + } const rawURL = req.nextUrl.searchParams.get("url") if (!rawURL) { return makeAPIErrorResponse(400, "Missing \"url\" query parameter.") diff --git a/src/app/api/user/projects/route.ts b/src/app/api/user/projects/route.ts index 8adfab66..53b0876d 100644 --- a/src/app/api/user/projects/route.ts +++ b/src/app/api/user/projects/route.ts @@ -1,8 +1,16 @@ import { NextResponse } from "next/server" -import { makeAPIErrorResponse, UnauthorizedError } from "../../../../common" -import { projectDataSource } from "@/composition" +import { + makeAPIErrorResponse, + UnauthorizedError, + makeUnauthenticatedAPIErrorResponse +} from "@/common" +import { session, projectDataSource } from "@/composition" export async function GET() { + const isAuthenticated = await session.getIsAuthenticated() + if (!isAuthenticated) { + return makeUnauthenticatedAPIErrorResponse() + } try { const projects = await projectDataSource.getProjects() return NextResponse.json({projects}) diff --git a/src/app/api/user/repository-access/route.ts b/src/app/api/user/repository-access/route.ts deleted file mode 100644 index 697d4ee0..00000000 --- a/src/app/api/user/repository-access/route.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { NextResponse } from "next/server" -import { makeAPIErrorResponse } from "@/common" -import { session, guestRepositoryAccessReader } from "@/composition" - -export async function GET() { - let userId: string - try { - userId = await session.getUserId() - } catch { - return makeAPIErrorResponse(401, "Unauthorized") - } - try { - const repositoryNames = await guestRepositoryAccessReader.getRepositoryNames(userId) - return NextResponse.json({repositories: repositoryNames}) - /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ - } catch (error: any) { - if (error.message) { - return makeAPIErrorResponse(500, error.message) - } else { - return makeAPIErrorResponse(500, "Unknown error") - } - } -} diff --git a/src/app/api/user/session-validity/route.ts b/src/app/api/user/session-validity/route.ts deleted file mode 100644 index aa5d2e97..00000000 --- a/src/app/api/user/session-validity/route.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { NextResponse } from "next/server" -import { makeAPIErrorResponse } from "@/common" -import { session, delayedSessionValidator } from "@/composition" - -export async function GET() { - try { - await session.getUserId() - } catch { - return makeAPIErrorResponse(401, "Unauthorized") - } - try { - const sessionValidity = await delayedSessionValidator.validateSession() - return NextResponse.json({sessionValidity}) - /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ - } catch (error: any) { - if (error.message) { - return makeAPIErrorResponse(500, error.message) - } else { - return makeAPIErrorResponse(500, "Unknown error") - } - } -} \ No newline at end of file diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 48ad9fee..a22f3c64 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,31 +1,26 @@ import "./globals.css" import type { Metadata } from "next" -import { UserProvider } from "@auth0/nextjs-auth0/client" import { config as fontAwesomeConfig } from "@fortawesome/fontawesome-svg-core" import { CssBaseline } from "@mui/material" -import ThemeRegistry from "../common/theme/ThemeRegistry" -import ErrorHandler from "../common/errors/client/ErrorHandler" +import ThemeRegistry from "@/common/theme/ThemeRegistry" import "@fortawesome/fontawesome-svg-core/styles.css" +import { env } from "@/common" fontAwesomeConfig.autoAddCss = false export const metadata: Metadata = { - title: "Shape Docs", - description: "Documentation for Shape\"s APIs", + title: env.getOrThrow("NEXT_PUBLIC_SHAPE_DOCS_TITLE"), + description: env.getOrThrow("NEXT_PUBLIC_SHAPE_DOCS_DESCRIPTION") } export default function RootLayout({ children }: { children: React.ReactNode }) { return ( - - - - - {children} - - - + + + {children} + ) diff --git a/src/app/page.tsx b/src/app/page.tsx deleted file mode 100644 index 0d97feea..00000000 --- a/src/app/page.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import SessionBarrier from "@/features/auth/view/SessionBarrier" -import ProjectsPage from "@/features/projects/view/ProjectsPage" -import { projectRepository } from "@/composition" - -export default async function Page() { - return ( - - - - ) -} diff --git a/src/common/db/IDB.ts b/src/common/db/IDB.ts new file mode 100644 index 00000000..f2697a91 --- /dev/null +++ b/src/common/db/IDB.ts @@ -0,0 +1,22 @@ +export interface IDBRow { + /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ + readonly [column: string]: any +} + +export interface IDBQueryResult { + readonly rows: T[] +} + +export interface IDBConnection { + /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ + query(query: string, values: any[]): Promise> + query(query: string): Promise> + disconnect(): Promise +} + +export default interface IDB { + connect(): Promise + /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ + query(query: string, values: any[]): Promise> + query(query: string): Promise> +} diff --git a/src/common/db/PostgreSQLDB.ts b/src/common/db/PostgreSQLDB.ts new file mode 100644 index 00000000..02c2da92 --- /dev/null +++ b/src/common/db/PostgreSQLDB.ts @@ -0,0 +1,45 @@ +import { Pool, PoolClient, QueryResult } from "pg" +import IDB, { IDBConnection, IDBQueryResult, IDBRow } from "./IDB" + +export class PostgreSQLDBConnection implements IDBConnection { + private readonly client: PoolClient + + constructor(config: { client: PoolClient }) { + this.client = config.client + } + + async disconnect(): Promise { + this.client.release() + } + + /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ + async query(query: string, values: any[] = []): Promise> { + const result: QueryResult = await this.client.query(query, values) + return { rows: result.rows } + } +} + +interface PostgreSQLDBConfig { + readonly pool: Pool +} + +export default class PostgreSQLDB implements IDB { + private readonly pool: Pool + + constructor(config: PostgreSQLDBConfig) { + this.pool = config.pool + } + + async connect(): Promise { + const client = await this.pool.connect() + return new PostgreSQLDBConnection({ client }) + } + + /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ + async query(query: string, values: any[] = []): Promise> { + const connection = await this.connect() + const result = await connection.query(query, values) + connection.disconnect() + return result + } +} diff --git a/src/common/db/index.ts b/src/common/db/index.ts new file mode 100644 index 00000000..08da8c6a --- /dev/null +++ b/src/common/db/index.ts @@ -0,0 +1,2 @@ +export type { default as IDB, IDBConnection } from "./IDB" +export { default as PostgreSQLDB, PostgreSQLDBConnection } from "./PostgreSQLDB" diff --git a/src/common/errors/client/ErrorHandler.tsx b/src/common/errors/client/ErrorHandler.tsx index 3626459a..7e928289 100644 --- a/src/common/errors/client/ErrorHandler.tsx +++ b/src/common/errors/client/ErrorHandler.tsx @@ -13,7 +13,7 @@ export default function ErrorHandler({ return } if (error.status == 401) { - window.location.href = "/api/auth/logout" + window.location.href = "/api/auth/signout" } } return ( diff --git a/src/common/errors/index.ts b/src/common/errors/index.ts index 8ad94893..0f1a98d8 100644 --- a/src/common/errors/index.ts +++ b/src/common/errors/index.ts @@ -1,2 +1,3 @@ export { default as makeAPIErrorResponse } from "./makeAPIErrorResponse" -export class UnauthorizedError extends Error {} \ No newline at end of file +export { makeUnauthenticatedAPIErrorResponse } from "./makeAPIErrorResponse" +export class UnauthorizedError extends Error {} diff --git a/src/common/errors/makeAPIErrorResponse.ts b/src/common/errors/makeAPIErrorResponse.ts index af62969f..766a5141 100644 --- a/src/common/errors/makeAPIErrorResponse.ts +++ b/src/common/errors/makeAPIErrorResponse.ts @@ -6,3 +6,7 @@ export default function makeAPIErrorResponse( ): NextResponse { return NextResponse.json({ status, message }, { status }) } + +export function makeUnauthenticatedAPIErrorResponse(): NextResponse { + return makeAPIErrorResponse(401, "Unauthenticated") +} diff --git a/src/common/github/GitHubClient.ts b/src/common/github/GitHubClient.ts index cec899e9..3ecf10e1 100644 --- a/src/common/github/GitHubClient.ts +++ b/src/common/github/GitHubClient.ts @@ -5,23 +5,16 @@ import IGitHubClient, { GraphQlQueryResponse, GetRepositoryContentRequest, GetPullRequestCommentsRequest, + GetPullRequestFilesRequest, AddCommentToPullRequestRequest, - GetOrganizationMembershipStatusRequest, - GetOrganizationMembershipStatusRequestResponse, + UpdatePullRequestCommentRequest, RepositoryContent, - PullRequestComment + PullRequestComment, + PullRequestFile } from "./IGitHubClient" -type GitHubClientConfig = { - readonly appId: string - readonly clientId: string - readonly clientSecret: string - readonly privateKey: string - readonly accessTokenReader: IGitHubAccessTokenReader -} - -interface IGitHubAccessTokenReader { - getAccessToken(): Promise +interface IGitHubOAuthTokenDataSource { + getOAuthToken(): Promise<{ accessToken: string }> } type GitHubContentItem = {download_url: string} @@ -29,11 +22,17 @@ type GitHubContentItem = {download_url: string} type InstallationAuthenticator = (installationId: number) => Promise<{token: string}> export default class GitHubClient implements IGitHubClient { - private readonly accessTokenReader: IGitHubAccessTokenReader + private readonly oauthTokenDataSource: IGitHubOAuthTokenDataSource private readonly installationAuthenticator: InstallationAuthenticator - constructor(config: GitHubClientConfig) { - this.accessTokenReader = config.accessTokenReader + constructor(config: { + appId: string + clientId: string + clientSecret: string + privateKey: string + oauthTokenDataSource: IGitHubOAuthTokenDataSource + }) { + this.oauthTokenDataSource = config.oauthTokenDataSource const appAuth = createAppAuth({ appId: config.appId, clientId: config.clientId, @@ -46,14 +45,14 @@ export default class GitHubClient implements IGitHubClient { } async graphql(request: GraphQLQueryRequest): Promise { - const accessToken = await this.accessTokenReader.getAccessToken() - const octokit = new Octokit({ auth: accessToken }) + const oauthToken = await this.oauthTokenDataSource.getOAuthToken() + const octokit = new Octokit({ auth: oauthToken.accessToken }) return await octokit.graphql(request.query, request.variables) } async getRepositoryContent(request: GetRepositoryContentRequest): Promise { - const accessToken = await this.accessTokenReader.getAccessToken() - const octokit = new Octokit({ auth: accessToken }) + const oauthToken = await this.oauthTokenDataSource.getOAuthToken() + const octokit = new Octokit({ auth: oauthToken.accessToken }) const response = await octokit.rest.repos.getContent({ owner: request.repositoryOwner, repo: request.repositoryName, @@ -64,6 +63,19 @@ export default class GitHubClient implements IGitHubClient { return { downloadURL: item.download_url } } + async getPullRequestFiles(request: GetPullRequestFilesRequest): Promise { + const auth = await this.installationAuthenticator(request.appInstallationId) + const octokit = new Octokit({ auth: auth.token }) + const files = await octokit.paginate(octokit.rest.pulls.listFiles, { + owner: request.repositoryOwner, + repo: request.repositoryName, + pull_number: request.pullRequestNumber, + }) + return files.map(file => { + return { filename: file.filename, status: file.status } + }) + } + async getPullRequestComments(request: GetPullRequestCommentsRequest): Promise { const auth = await this.installationAuthenticator(request.appInstallationId) const octokit = new Octokit({ auth: auth.token }) @@ -74,10 +86,14 @@ export default class GitHubClient implements IGitHubClient { }) const result: PullRequestComment[] = [] for await (const comment of comments) { - result.push({ - body: comment.body || "", - isFromBot: comment.user?.type == "Bot" - }) + const id = comment.id + const body = comment.body + const isFromBot = comment.user?.type == "Bot" + let gitHubApp: { id: string } | undefined + if (comment.performed_via_github_app) { + gitHubApp = { id: comment.performed_via_github_app.id.toString() } + } + result.push({ id, body, isFromBot, gitHubApp }) } return result } @@ -93,14 +109,14 @@ export default class GitHubClient implements IGitHubClient { }) } - async getOrganizationMembershipStatus( - request: GetOrganizationMembershipStatusRequest - ): Promise { - const accessToken = await this.accessTokenReader.getAccessToken() - const octokit = new Octokit({ auth: accessToken }) - const response = await octokit.rest.orgs.getMembershipForAuthenticatedUser({ - org: request.organizationName + async updatePullRequestComment(request: UpdatePullRequestCommentRequest): Promise { + const auth = await this.installationAuthenticator(request.appInstallationId) + const octokit = new Octokit({ auth: auth.token }) + await octokit.rest.issues.updateComment({ + comment_id: request.commentId, + owner: request.repositoryOwner, + repo: request.repositoryName, + body: request.body }) - return { state: response.data.state } } } diff --git a/src/common/github/IGitHubClient.ts b/src/common/github/IGitHubClient.ts index 1b349fc6..a739f69c 100644 --- a/src/common/github/IGitHubClient.ts +++ b/src/common/github/IGitHubClient.ts @@ -1,11 +1,11 @@ export type GraphQLQueryRequest = { readonly query: string - /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ - readonly variables: {[key: string]: any} + /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ + readonly variables?: {[key: string]: any} } export type GraphQlQueryResponse = { - /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ + /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ readonly [key: string]: any } @@ -13,9 +13,24 @@ export type RepositoryContent = { readonly downloadURL: string } +export type PullRequestFile = { + readonly filename: string + readonly status: "added" + | "removed" + | "modified" + | "renamed" + | "copied" + | "changed" + | "unchanged" +} + export type PullRequestComment = { + readonly id: number + readonly body?: string readonly isFromBot: boolean - readonly body: string + readonly gitHubApp?: { + readonly id: string + } } export type GetRepositoryContentRequest = { @@ -25,6 +40,13 @@ export type GetRepositoryContentRequest = { readonly ref: string | undefined } +export type GetPullRequestFilesRequest = { + readonly appInstallationId: number + readonly repositoryOwner: string + readonly repositoryName: string + readonly pullRequestNumber: number +} + export type GetPullRequestCommentsRequest = { readonly appInstallationId: number readonly repositoryOwner: string @@ -40,18 +62,19 @@ export type AddCommentToPullRequestRequest = { readonly body: string } -export type GetOrganizationMembershipStatusRequest = { - readonly organizationName: string -} - -export type GetOrganizationMembershipStatusRequestResponse = { - readonly state: "active" | "pending" +export type UpdatePullRequestCommentRequest = { + readonly appInstallationId: number + readonly repositoryOwner: string + readonly repositoryName: string + readonly commentId: number + readonly body: string } export default interface IGitHubClient { graphql(request: GraphQLQueryRequest): Promise getRepositoryContent(request: GetRepositoryContentRequest): Promise + getPullRequestFiles(request: GetPullRequestFilesRequest): Promise getPullRequestComments(request: GetPullRequestCommentsRequest): Promise addCommentToPullRequest(request: AddCommentToPullRequestRequest): Promise - getOrganizationMembershipStatus(request: GetOrganizationMembershipStatusRequest): Promise + updatePullRequestComment(request: UpdatePullRequestCommentRequest): Promise } diff --git a/src/common/github/AccessTokenRefreshingGitHubClient.ts b/src/common/github/OAuthTokenRefreshingGitHubClient.ts similarity index 56% rename from src/common/github/AccessTokenRefreshingGitHubClient.ts rename to src/common/github/OAuthTokenRefreshingGitHubClient.ts index 4a250d5c..48b6373e 100644 --- a/src/common/github/AccessTokenRefreshingGitHubClient.ts +++ b/src/common/github/OAuthTokenRefreshingGitHubClient.ts @@ -4,32 +4,41 @@ import IGitHubClient, { GraphQlQueryResponse, GetRepositoryContentRequest, GetPullRequestCommentsRequest, - GetOrganizationMembershipStatusRequest, - GetOrganizationMembershipStatusRequestResponse, AddCommentToPullRequestRequest, + UpdatePullRequestCommentRequest, + GetPullRequestFilesRequest, RepositoryContent, - PullRequestComment + PullRequestComment, + PullRequestFile } from "./IGitHubClient" const HttpErrorSchema = z.object({ status: z.number() }) -interface IGitHubAccessTokenService { - getAccessToken(): Promise - refreshAccessToken(accessToken: string): Promise +type OAuthToken = { accessToken: string, refreshToken?: string } + +interface IGitHubOAuthTokenDataSource { + getOAuthToken(): Promise +} + +interface IGitHubOAuthTokenRefresher { + refreshOAuthToken(oauthToken: OAuthToken): Promise } -export default class AccessTokenRefreshingGitHubClient implements IGitHubClient { - private readonly accessTokenService: IGitHubAccessTokenService +export default class OAuthTokenRefreshingGitHubClient implements IGitHubClient { + private readonly oauthTokenDataSource: IGitHubOAuthTokenDataSource + private readonly oauthTokenRefresher: IGitHubOAuthTokenRefresher private readonly gitHubClient: IGitHubClient - constructor( - accessTokenService: IGitHubAccessTokenService, + constructor(config: { + oauthTokenDataSource: IGitHubOAuthTokenDataSource + oauthTokenRefresher: IGitHubOAuthTokenRefresher gitHubClient: IGitHubClient - ) { - this.accessTokenService = accessTokenService - this.gitHubClient = gitHubClient + }) { + this.oauthTokenDataSource = config.oauthTokenDataSource + this.oauthTokenRefresher = config.oauthTokenRefresher + this.gitHubClient = config.gitHubClient } async graphql(request: GraphQLQueryRequest): Promise { @@ -44,28 +53,32 @@ export default class AccessTokenRefreshingGitHubClient implements IGitHubClient }) } + async getPullRequestFiles(request: GetPullRequestFilesRequest): Promise { + return await this.send(async () => { + return await this.gitHubClient.getPullRequestFiles(request) + }) + } + async getPullRequestComments(request: GetPullRequestCommentsRequest): Promise { return await this.send(async () => { return await this.gitHubClient.getPullRequestComments(request) }) } - async addCommentToPullRequest(request: AddCommentToPullRequestRequest): Promise { + async addCommentToPullRequest(request: AddCommentToPullRequestRequest) { return await this.send(async () => { return await this.gitHubClient.addCommentToPullRequest(request) }) } - async getOrganizationMembershipStatus( - request: GetOrganizationMembershipStatusRequest - ): Promise { + async updatePullRequestComment(request: UpdatePullRequestCommentRequest) { return await this.send(async () => { - return await this.gitHubClient.getOrganizationMembershipStatus(request) + return await this.gitHubClient.updatePullRequestComment(request) }) } private async send(fn: () => Promise): Promise { - const accessToken = await this.accessTokenService.getAccessToken() + const oauthToken = await this.oauthTokenDataSource.getOAuthToken() try { return await fn() } catch (e) { @@ -73,7 +86,7 @@ export default class AccessTokenRefreshingGitHubClient implements IGitHubClient const error = HttpErrorSchema.parse(e) if (error.status == 401) { // Refresh access token and try the request one last time. - await this.accessTokenService.refreshAccessToken(accessToken) + await this.oauthTokenRefresher.refreshOAuthToken(oauthToken) return await fn() } else { // Not an error we can handle so forward it. diff --git a/src/common/github/index.ts b/src/common/github/index.ts index da9c21f3..44efbb31 100644 --- a/src/common/github/index.ts +++ b/src/common/github/index.ts @@ -1,3 +1,4 @@ -export { default as AccessTokenRefreshingGitHubClient } from "./AccessTokenRefreshingGitHubClient" +export { default as OAuthTokenRefreshingGitHubClient } from "./OAuthTokenRefreshingGitHubClient" export { default as GitHubClient } from "./GitHubClient" export type { default as IGitHubClient } from "./IGitHubClient" +export * from "./IGitHubClient" diff --git a/src/common/images/base64EncodedLogo.ts b/src/common/images/base64EncodedLogo.ts new file mode 100644 index 00000000..888a5ef1 --- /dev/null +++ b/src/common/images/base64EncodedLogo.ts @@ -0,0 +1,7 @@ +import fs from "fs" + +let str = "unavailable" +if (process.env.NODE_ENV !== "test") { + str = fs.readFileSync("public/images/logo.png", "base64") +} +export default str diff --git a/src/common/index.ts b/src/common/index.ts index c7086817..fdb90059 100644 --- a/src/common/index.ts +++ b/src/common/index.ts @@ -1,7 +1,8 @@ +export * from "./db" export * from "./errors" export * from "./github" -export * from "./keyValueStore" +export * from "./key-value-store" export * from "./mutex" export * from "./session" -export * from "./userData" +export * from "./user-data" export * from "./utils" diff --git a/src/common/keyValueStore/IKeyValueStore.ts b/src/common/key-value-store/IKeyValueStore.ts similarity index 100% rename from src/common/keyValueStore/IKeyValueStore.ts rename to src/common/key-value-store/IKeyValueStore.ts diff --git a/src/common/keyValueStore/RedisKeyValueStore.ts b/src/common/key-value-store/RedisKeyValueStore.ts similarity index 71% rename from src/common/keyValueStore/RedisKeyValueStore.ts rename to src/common/key-value-store/RedisKeyValueStore.ts index 8c4c5401..0dd56cd5 100644 --- a/src/common/keyValueStore/RedisKeyValueStore.ts +++ b/src/common/key-value-store/RedisKeyValueStore.ts @@ -2,10 +2,11 @@ import IKeyValueStore from "./IKeyValueStore" import Redis from "ioredis" export default class RedisKeyValueStore implements IKeyValueStore { - private readonly redis: Redis + private readonly url: string + private _redis: Redis | undefined constructor(url: string) { - this.redis = new Redis(url) + this.url = url } async get(key: string): Promise { @@ -27,4 +28,13 @@ export default class RedisKeyValueStore implements IKeyValueStore { async delete(key: string): Promise { await this.redis.del(key) } + + private get redis(): Redis { + if (this._redis) { + return this._redis + } + const redis = new Redis(this.url) + this._redis = redis + return redis + } } diff --git a/src/common/keyValueStore/index.ts b/src/common/key-value-store/index.ts similarity index 100% rename from src/common/keyValueStore/index.ts rename to src/common/key-value-store/index.ts diff --git a/src/common/mutex/RedisKeyedMutexFactory.ts b/src/common/mutex/RedisKeyedMutexFactory.ts index f4fae94f..5605126e 100644 --- a/src/common/mutex/RedisKeyedMutexFactory.ts +++ b/src/common/mutex/RedisKeyedMutexFactory.ts @@ -20,13 +20,23 @@ class RedisMutex implements IMutex { } export default class RedisKeyedMutexFactory implements IKeyedMutexFactory { - private readonly redis: Redis + private readonly url: string + private _redis: Redis | undefined constructor(url: string) { - this.redis = new Redis(url) + this.url = url } makeMutex(key: string): IMutex { return new RedisMutex(this.redis, key) } + + private get redis(): Redis { + if (this._redis) { + return this._redis + } + const redis = new Redis(this.url) + this._redis = redis + return redis + } } diff --git a/src/common/mutex/SessionMutexFactory.ts b/src/common/mutex/SessionMutexFactory.ts index c84b02de..67010c4a 100644 --- a/src/common/mutex/SessionMutexFactory.ts +++ b/src/common/mutex/SessionMutexFactory.ts @@ -1,25 +1,28 @@ import IKeyedMutexFactory from "./IKeyedMutexFactory" import IMutex from "./IMutex" import IMutexFactory from "./IMutexFactory" -import { ISession } from "@/common" + +interface IUserIDReader { + getUserId(): Promise +} export default class SessionMutexFactory implements IMutexFactory { private readonly mutexFactory: IKeyedMutexFactory - private readonly session: ISession + private readonly userIdReader: IUserIDReader private readonly baseKey: string - constructor( + constructor(config: { + userIdReader: IUserIDReader, mutexFactory: IKeyedMutexFactory, - session: ISession, baseKey: string - ) { - this.session = session - this.baseKey = baseKey - this.mutexFactory = mutexFactory + }) { + this.userIdReader = config.userIdReader + this.baseKey = config.baseKey + this.mutexFactory = config.mutexFactory } async makeMutex(): Promise { - const userId = await this.session.getUserId() + const userId = await this.userIdReader.getUserId() const key = `${this.baseKey}[${userId}]` return this.mutexFactory.makeMutex(key) } diff --git a/src/common/session/Auth0Session.ts b/src/common/session/Auth0Session.ts deleted file mode 100644 index 10c9e02c..00000000 --- a/src/common/session/Auth0Session.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { getSession } from "@auth0/nextjs-auth0" -import { UnauthorizedError } from "../../common" -import ISession from "./ISession" -import IIsUserGuestReader from "@/features/auth/domain/userIdentityProvider/IsUserGuestReader" - -export type Auth0SessionConfig = { - readonly isUserGuestReader: IIsUserGuestReader -} - -export default class Auth0Session implements ISession { - private readonly isUserGuestReader: IIsUserGuestReader - - constructor(config: Auth0SessionConfig) { - this.isUserGuestReader = config.isUserGuestReader - } - - async getUserId(): Promise { - const session = await getSession() - if (!session) { - throw new UnauthorizedError("User ID is unavailable because the user is not authenticated.") - } - return session.user.sub - } - - async getIsGuest(): Promise { - const userId = await this.getUserId() - return await this.isUserGuestReader.getIsUserGuest(userId) - } -} diff --git a/src/common/session/AuthjsSession.ts b/src/common/session/AuthjsSession.ts new file mode 100644 index 00000000..5d3ff360 --- /dev/null +++ b/src/common/session/AuthjsSession.ts @@ -0,0 +1,26 @@ +import { NextAuthResult } from "next-auth" +import { UnauthorizedError } from "@/common" +import ISession from "./ISession" + +export default class AuthjsSession implements ISession { + private readonly auth: NextAuthResult + + constructor(config: { auth: NextAuthResult }) { + this.auth = config.auth + } + + async getIsAuthenticated(): Promise { + const { auth } = this.auth + const session = await auth() + return session != null + } + + async getUserId(): Promise { + const { auth } = this.auth + const session = await auth() + if (!session || !session.user || !session.user.id) { + throw new UnauthorizedError("User ID is unavailable because the user is not authenticated.") + } + return session.user.id + } +} diff --git a/src/common/session/ISession.ts b/src/common/session/ISession.ts index 2496223f..ad7410e2 100644 --- a/src/common/session/ISession.ts +++ b/src/common/session/ISession.ts @@ -1,4 +1,4 @@ export default interface ISession { + getIsAuthenticated(): Promise getUserId(): Promise - getIsGuest(): Promise } diff --git a/src/common/session/index.ts b/src/common/session/index.ts index bf010ed7..5ba5fb15 100644 --- a/src/common/session/index.ts +++ b/src/common/session/index.ts @@ -1 +1,2 @@ +export { default as AuthjsSession } from "./AuthjsSession" export type { default as ISession } from "./ISession" diff --git a/src/common/userData/IUserDataRepository.ts b/src/common/user-data/IUserDataRepository.ts similarity index 100% rename from src/common/userData/IUserDataRepository.ts rename to src/common/user-data/IUserDataRepository.ts diff --git a/src/common/userData/KeyValueUserDataRepository.ts b/src/common/user-data/KeyValueUserDataRepository.ts similarity index 80% rename from src/common/userData/KeyValueUserDataRepository.ts rename to src/common/user-data/KeyValueUserDataRepository.ts index b6318099..081854b2 100644 --- a/src/common/userData/KeyValueUserDataRepository.ts +++ b/src/common/user-data/KeyValueUserDataRepository.ts @@ -1,13 +1,13 @@ -import IKeyValueStore from "../keyValueStore/IKeyValueStore" +import IKeyValueStore from "../key-value-store/IKeyValueStore" import IUserDataRepository from "./IUserDataRepository" export default class KeyValueUserDataRepository implements IUserDataRepository { private readonly store: IKeyValueStore private readonly baseKey: string - constructor(store: IKeyValueStore, baseKey: string) { - this.store = store - this.baseKey = baseKey + constructor(config: { store: IKeyValueStore, baseKey: string }) { + this.store = config.store + this.baseKey = config.baseKey } async get(userId: string): Promise { diff --git a/src/common/userData/index.ts b/src/common/user-data/index.ts similarity index 100% rename from src/common/userData/index.ts rename to src/common/user-data/index.ts diff --git a/src/common/utils/ZodJSONCoder.ts b/src/common/utils/ZodJSONCoder.ts index bb9a1e5f..588ae58f 100644 --- a/src/common/utils/ZodJSONCoder.ts +++ b/src/common/utils/ZodJSONCoder.ts @@ -7,7 +7,7 @@ export default class ZodJSONCoder { } static decode(schema: Schema, string: string): T { - /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ + /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ let obj: any | undefined try { obj = JSON.parse(string) diff --git a/src/common/utils/env.ts b/src/common/utils/env.ts new file mode 100644 index 00000000..f864ebaf --- /dev/null +++ b/src/common/utils/env.ts @@ -0,0 +1,34 @@ +type EnvMethods = { + get(key: string): string | undefined, + getOrThrow(key: string): string +} + +type EnvObject = EnvMethods & { + [key: string]: string | undefined +} + +const base: EnvMethods = { + get(key: string): string | undefined { + return process.env[key] + }, + getOrThrow(key: string): string { + const value = process.env[key] + if (!value || value.length === 0) { + throw new Error(`Environment variable "${key}" is not set`) + } + console.log(`${key}=${value}`) + return value + } +} + +const env = new Proxy(base, { + get(target, prop: string) { + if (prop in target) { + /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ + return (target as any)[prop] + } + return target.get(prop) + } +}) as EnvObject + +export default env diff --git a/src/common/utils/fetcher.ts b/src/common/utils/fetcher.ts index 4d296810..70229a78 100644 --- a/src/common/utils/fetcher.ts +++ b/src/common/utils/fetcher.ts @@ -7,7 +7,7 @@ } } - /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ + /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ export default async function fetcher( input: RequestInfo, init?: RequestInit diff --git a/src/common/utils/index.ts b/src/common/utils/index.ts index 0b808be9..4b6ec76d 100644 --- a/src/common/utils/index.ts +++ b/src/common/utils/index.ts @@ -1,3 +1,5 @@ export * from "./fetcher" export { default as fetcher } from "./fetcher" export { default as ZodJSONCoder } from "./ZodJSONCoder" +export { default as listFromCommaSeparatedString } from "./listFromCommaSeparatedString" +export { default as env } from "./env" diff --git a/src/common/utils/listFromCommaSeparatedString.ts b/src/common/utils/listFromCommaSeparatedString.ts new file mode 100644 index 00000000..18e692a0 --- /dev/null +++ b/src/common/utils/listFromCommaSeparatedString.ts @@ -0,0 +1,8 @@ +const listFromCommaSeparatedString = (str?: string) => { + if (!str) { + return [] + } + return str.split(",").map(e => e.trim()) +} + +export default listFromCommaSeparatedString diff --git a/src/common/utils/saneParseInt.ts b/src/common/utils/saneParseInt.ts new file mode 100644 index 00000000..42f58f27 --- /dev/null +++ b/src/common/utils/saneParseInt.ts @@ -0,0 +1,10 @@ +const saneParseInt = (str: string) => { + const forcedString = `${str}` + const num = parseInt(forcedString, 10) + if (isNaN(num) || forcedString.trim() !== num.toString()) { + return undefined + } + return num +} + +export default saneParseInt diff --git a/src/composition.ts b/src/composition.ts index 926d2396..0fdeb7e0 100644 --- a/src/composition.ts +++ b/src/composition.ts @@ -1,226 +1,195 @@ -import Auth0Session from "@/common/session/Auth0Session" +import { Pool } from "pg" +import NextAuth from "next-auth" +import GithubProvider from "next-auth/providers/github" +import PostgresAdapter from "@auth/pg-adapter" import RedisKeyedMutexFactory from "@/common/mutex/RedisKeyedMutexFactory" -import RedisKeyValueStore from "@/common/keyValueStore/RedisKeyValueStore" +import RedisKeyValueStore from "@/common/key-value-store/RedisKeyValueStore" import { - AccessTokenRefreshingGitHubClient, + AuthjsSession, + env, GitHubClient, + ISession, KeyValueUserDataRepository, - SessionMutexFactory + OAuthTokenRefreshingGitHubClient, + PostgreSQLDB, + SessionMutexFactory, + listFromCommaSeparatedString } from "@/common" import { - GitHubProjectDataSource, - GitHubProjectRepositoryDataSource + GitHubLoginDataSource, + GitHubProjectDataSource } from "@/features/projects/data" import { CachingProjectDataSource, ProjectRepository } from "@/features/projects/domain" import { - GitHubOAuthTokenRefresher, - GitHubInstallationAccessTokenDataSource, - Auth0MetadataUpdater, - Auth0RefreshTokenReader, - Auth0RepositoryAccessReader, - Auth0UserIdentityProviderReader + GitHubOAuthTokenRefresher } from "@/features/auth/data" import { - AccessTokenService, - AccessTokenSessionValidator, - CachingRepositoryAccessReader, - CachingUserIdentityProviderReader, - CompositeLogInHandler, + AuthjsAccountsOAuthTokenRepository, CompositeLogOutHandler, - CredentialsTransferringLogInHandler, ErrorIgnoringLogOutHandler, - GitHubOrganizationSessionValidator, - GuestAccessTokenRepository, - GuestAccessTokenService, - GuestCredentialsTransferrer, - HostAccessTokenService, - HostCredentialsTransferrer, - HostOnlySessionValidator, - IsUserGuestReader, - LockingAccessTokenService, + FallbackOAuthTokenRepository, + LockingOAuthTokenRefresher, + LogInHandler, + OAuthTokenDataSource, OAuthTokenRepository, - OnlyStaleRefreshingAccessTokenService, - RemoveInvitedFlagLogInHandler, - RepositoryRestrictingAccessTokenDataSource, + OAuthTokenSessionValidator, + PersistingOAuthTokenRefresher, UserDataCleanUpLogOutHandler } from "@/features/auth/domain" - -const { - AUTH0_MANAGEMENT_DOMAIN, - AUTH0_MANAGEMENT_CLIENT_ID, - AUTH0_MANAGEMENT_CLIENT_SECRET, - GITHUB_APP_ID, - GITHUB_CLIENT_ID, - GITHUB_CLIENT_SECRET, - GITHUB_PRIVATE_KEY_BASE_64, - GITHUB_ORGANIZATION_NAME, - REDIS_URL -} = process.env - -const auth0ManagementCredentials = { - domain: AUTH0_MANAGEMENT_DOMAIN, - clientId: AUTH0_MANAGEMENT_CLIENT_ID, - clientSecret: AUTH0_MANAGEMENT_CLIENT_SECRET -} +import { + GitHubHookHandler +} from "@/features/hooks/data" +import { + PostCommentPullRequestEventHandler, + FilteringPullRequestEventHandler, + RepositoryNameEventFilter, + PullRequestCommenter +} from "@/features/hooks/domain" const gitHubAppCredentials = { - appId: GITHUB_APP_ID, - clientId: GITHUB_CLIENT_ID, - clientSecret: GITHUB_CLIENT_SECRET, + appId: env.getOrThrow("GITHUB_APP_ID"), + clientId: env.getOrThrow("GITHUB_CLIENT_ID"), + clientSecret: env.getOrThrow("GITHUB_CLIENT_SECRET"), privateKey: Buffer - .from(GITHUB_PRIVATE_KEY_BASE_64, "base64") + .from(env.getOrThrow("GITHUB_PRIVATE_KEY_BASE_64"), "base64") .toString("utf-8") } -const userIdentityProviderRepository = new KeyValueUserDataRepository( - new RedisKeyValueStore(REDIS_URL), - "userIdentityProvider" -) - -export const userIdentityProviderReader = new CachingUserIdentityProviderReader( - userIdentityProviderRepository, - new Auth0UserIdentityProviderReader(auth0ManagementCredentials) -) - -export const session = new Auth0Session({ - isUserGuestReader: new IsUserGuestReader(userIdentityProviderReader) +const pool = new Pool({ + host: env.getOrThrow("POSTGRESQL_HOST"), + user: env.getOrThrow("POSTGRESQL_USER"), + password: env.get("POSTGRESQL_PASSWORD"), + database: env.getOrThrow("POSTGRESQL_DB"), + max: 20, + idleTimeoutMillis: 30000, + connectionTimeoutMillis: 2000 }) -const oAuthTokenRepository = new OAuthTokenRepository( - new KeyValueUserDataRepository( - new RedisKeyValueStore(REDIS_URL), - "authToken" - ) -) +const db = new PostgreSQLDB({ pool }) -const gitHubOAuthTokenRefresher = new GitHubOAuthTokenRefresher({ - clientId: gitHubAppCredentials.clientId, - clientSecret: gitHubAppCredentials.clientSecret +const oauthTokenRepository = new FallbackOAuthTokenRepository({ + primaryRepository: new OAuthTokenRepository({ db, provider: "github" }), + secondaryRepository: new AuthjsAccountsOAuthTokenRepository({ db, provider: "github" }) }) -const guestAccessTokenRepository = new GuestAccessTokenRepository( - new KeyValueUserDataRepository( - new RedisKeyValueStore(REDIS_URL), - "accessToken" - ) -) +const logInHandler = new LogInHandler({ oauthTokenRepository }) + +export const auth = NextAuth({ + adapter: PostgresAdapter(pool), + secret: env.getOrThrow("NEXTAUTH_SECRET"), + theme: { + logo: "/images/logo.png", + colorScheme: "light", + brandColor: "black" + }, + providers: [ + GithubProvider({ + clientId: env.getOrThrow("GITHUB_CLIENT_ID"), + clientSecret: env.getOrThrow("GITHUB_CLIENT_SECRET"), + authorization: { + params: { + scope: "repo" + } + } + }) + ], + session: { + strategy: "database" + }, + callbacks: { + async signIn({ user, account }) { + return await logInHandler.handleLogIn({ user, account }) + }, + async session({ session, user }) { + session.user.id = user.id + return session + } + } +}) -const guestRepositoryAccessRepository = new KeyValueUserDataRepository( - new RedisKeyValueStore(REDIS_URL), - "guestRepositoryAccess" -) +export const session: ISession = new AuthjsSession({ auth }) -export const guestRepositoryAccessReader = new CachingRepositoryAccessReader({ - repository: guestRepositoryAccessRepository, - repositoryAccessReader: new Auth0RepositoryAccessReader({ - ...auth0ManagementCredentials - }) +const oauthTokenDataSource = new OAuthTokenDataSource({ + session, + repository: oauthTokenRepository }) -const guestAccessTokenDataSource = new RepositoryRestrictingAccessTokenDataSource({ - repositoryAccessReader: guestRepositoryAccessReader, - dataSource: new GitHubInstallationAccessTokenDataSource({ - ...gitHubAppCredentials, - organization: GITHUB_ORGANIZATION_NAME +const oauthTokenRefresher = new LockingOAuthTokenRefresher({ + mutexFactory: new SessionMutexFactory({ + baseKey: "mutexLockingOAuthTokenRefresher", + mutexFactory: new RedisKeyedMutexFactory(env.getOrThrow("REDIS_URL")), + userIdReader: session + }), + oauthTokenRefresher: new PersistingOAuthTokenRefresher({ + userIdReader: session, + oauthTokenRepository, + oauthTokenRefresher: new GitHubOAuthTokenRefresher(gitHubAppCredentials) }) }) -export const accessTokenService = new LockingAccessTokenService( - new SessionMutexFactory( - new RedisKeyedMutexFactory(REDIS_URL), - session, - "mutexAccessToken" - ), - new OnlyStaleRefreshingAccessTokenService( - new AccessTokenService({ - isGuestReader: session, - guestAccessTokenService: new GuestAccessTokenService({ - userIdReader: session, - repository: guestAccessTokenRepository, - dataSource: guestAccessTokenDataSource - }), - hostAccessTokenService: new HostAccessTokenService({ - userIdReader: session, - repository: oAuthTokenRepository, - refresher: gitHubOAuthTokenRefresher - }) - }) - ) -) - export const gitHubClient = new GitHubClient({ ...gitHubAppCredentials, - accessTokenReader: accessTokenService + oauthTokenDataSource }) -export const userGitHubClient = new AccessTokenRefreshingGitHubClient( - accessTokenService, - gitHubClient -) - -export const blockingSessionValidator = new AccessTokenSessionValidator({ - accessTokenService: accessTokenService +export const userGitHubClient = new OAuthTokenRefreshingGitHubClient({ + gitHubClient, + oauthTokenDataSource, + oauthTokenRefresher }) -export const delayedSessionValidator = new HostOnlySessionValidator({ - isGuestReader: session, - sessionValidator: new GitHubOrganizationSessionValidator({ - acceptedOrganization: GITHUB_ORGANIZATION_NAME, - organizationMembershipStatusReader: userGitHubClient - }) + +export const blockingSessionValidator = new OAuthTokenSessionValidator({ + oauthTokenDataSource }) -const projectUserDataRepository = new KeyValueUserDataRepository( - new RedisKeyValueStore(REDIS_URL), - "projects" -) +const projectUserDataRepository = new KeyValueUserDataRepository({ + store: new RedisKeyValueStore(env.getOrThrow("REDIS_URL")), + baseKey: "projects" +}) -export const projectRepository = new ProjectRepository( - session, - projectUserDataRepository -) +export const projectRepository = new ProjectRepository({ + userIDReader: session, + repository: projectUserDataRepository +}) export const projectDataSource = new CachingProjectDataSource({ dataSource: new GitHubProjectDataSource({ - dataSource: new GitHubProjectRepositoryDataSource({ - graphQlClient: userGitHubClient, - organizationName: GITHUB_ORGANIZATION_NAME - }) + loginsDataSource: new GitHubLoginDataSource({ + graphQlClient: userGitHubClient + }), + graphQlClient: userGitHubClient, + repositoryNameSuffix: env.getOrThrow("REPOSITORY_NAME_SUFFIX"), + projectConfigurationFilename: env.getOrThrow("SHAPE_DOCS_PROJECT_CONFIGURATION_FILENAME") }), repository: projectRepository }) -export const logInHandler = new CompositeLogInHandler([ - new CredentialsTransferringLogInHandler({ - isUserGuestReader: new IsUserGuestReader( - userIdentityProviderReader - ), - guestCredentialsTransferrer: new GuestCredentialsTransferrer({ - dataSource: guestAccessTokenDataSource, - repository: guestAccessTokenRepository - }), - hostCredentialsTransferrer: new HostCredentialsTransferrer({ - refreshTokenReader: new Auth0RefreshTokenReader({ - ...auth0ManagementCredentials, - connection: "github" - }), - oAuthTokenRefresher: gitHubOAuthTokenRefresher, - oAuthTokenRepository: oAuthTokenRepository - }) - }), - new RemoveInvitedFlagLogInHandler( - new Auth0MetadataUpdater({ ...auth0ManagementCredentials }) - ) -]) - export const logOutHandler = new ErrorIgnoringLogOutHandler( new CompositeLogOutHandler([ - new UserDataCleanUpLogOutHandler(session, projectUserDataRepository), - new UserDataCleanUpLogOutHandler(session, userIdentityProviderRepository), - new UserDataCleanUpLogOutHandler(session, guestRepositoryAccessRepository), - new UserDataCleanUpLogOutHandler(session, oAuthTokenRepository), - new UserDataCleanUpLogOutHandler(session, guestAccessTokenRepository) + new UserDataCleanUpLogOutHandler(session, projectUserDataRepository) ]) ) + +export const gitHubHookHandler = new GitHubHookHandler({ + secret: env.getOrThrow("GITHUB_WEBHOOK_SECRET"), + pullRequestEventHandler: new FilteringPullRequestEventHandler({ + filter: new RepositoryNameEventFilter({ + repositoryNameSuffix: env.getOrThrow("REPOSITORY_NAME_SUFFIX"), + allowlist: listFromCommaSeparatedString(env.get("GITHUB_WEBHOK_REPOSITORY_ALLOWLIST")), + disallowlist: listFromCommaSeparatedString(env.get("GITHUB_WEBHOK_REPOSITORY_DISALLOWLIST")) + }), + eventHandler: new PostCommentPullRequestEventHandler({ + pullRequestCommenter: new PullRequestCommenter({ + siteName: env.getOrThrow("NEXT_PUBLIC_SHAPE_DOCS_TITLE"), + domain: env.getOrThrow("SHAPE_DOCS_BASE_URL"), + repositoryNameSuffix: env.getOrThrow("REPOSITORY_NAME_SUFFIX"), + projectConfigurationFilename: env.getOrThrow("SHAPE_DOCS_PROJECT_CONFIGURATION_FILENAME"), + gitHubAppId: env.getOrThrow("GITHUB_APP_ID"), + gitHubClient: gitHubClient + }) + }) + }) +}) \ No newline at end of file diff --git a/src/features/auth/data/Auth0MetadataUpdater.ts b/src/features/auth/data/Auth0MetadataUpdater.ts deleted file mode 100644 index 88ffb524..00000000 --- a/src/features/auth/data/Auth0MetadataUpdater.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { ManagementClient } from "auth0" - -type Auth0MetadataUpdaterConfig = { - readonly domain: string - readonly clientId: string - readonly clientSecret: string -} - -export default class Auth0MetadataUpdater { - private readonly managementClient: ManagementClient - - constructor(config: Auth0MetadataUpdaterConfig) { - this.managementClient = new ManagementClient({ - domain: config.domain, - clientId: config.clientId, - clientSecret: config.clientSecret - }) - } - - /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ - async updateMetadata(userId: string, metadata: {[key: string]: any}): Promise { - await this.managementClient.users.update({ - id: userId - }, { - app_metadata: metadata - }) - } -} diff --git a/src/features/auth/data/Auth0RefreshTokenReader.ts b/src/features/auth/data/Auth0RefreshTokenReader.ts deleted file mode 100644 index cafe3edc..00000000 --- a/src/features/auth/data/Auth0RefreshTokenReader.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { ManagementClient } from "auth0" -import { UnauthorizedError } from "@/common" - -interface Auth0RefreshTokenReaderConfig { - readonly domain: string - readonly clientId: string - readonly clientSecret: string - readonly connection: string -} - -export default class Auth0RefreshTokenReader { - private readonly managementClient: ManagementClient - private readonly connection: string - - constructor(config: Auth0RefreshTokenReaderConfig) { - this.connection = config.connection - this.managementClient = new ManagementClient({ - domain: config.domain, - clientId: config.clientId, - clientSecret: config.clientSecret - }) - } - - async getRefreshToken(userId: string): Promise { - const userResponse = await this.managementClient.users.get({ id: userId }) - const identity = userResponse.data.identities.find(identity => { - return identity.connection.toLowerCase() == this.connection.toLowerCase() - }) - if (!identity) { - throw new UnauthorizedError(`No identity found for connection "${this.connection}"`) - } - return identity.refresh_token - } -} diff --git a/src/features/auth/data/Auth0RepositoryAccessReader.ts b/src/features/auth/data/Auth0RepositoryAccessReader.ts deleted file mode 100644 index 1d923d61..00000000 --- a/src/features/auth/data/Auth0RepositoryAccessReader.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { ManagementClient } from "auth0" - -type Auth0RepositoryAccessReaderConfig = { - readonly domain: string - readonly clientId: string - readonly clientSecret: string -} - -export default class Auth0RepositoryAccessReader { - private readonly managementClient: ManagementClient - - constructor(config: Auth0RepositoryAccessReaderConfig) { - this.managementClient = new ManagementClient({ - domain: config.domain, - clientId: config.clientId, - clientSecret: config.clientSecret - }) - } - - async getRepositoryNames(userId: string): Promise { - const response = await this.managementClient.users.getRoles({ id: userId }) - return response.data.map(e => e.name) - } -} diff --git a/src/features/auth/data/Auth0UserIdentityProviderReader.ts b/src/features/auth/data/Auth0UserIdentityProviderReader.ts deleted file mode 100644 index dfd56b98..00000000 --- a/src/features/auth/data/Auth0UserIdentityProviderReader.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { ManagementClient } from "auth0" -import UserIdentityProvider from "../domain/userIdentityProvider/UserIdentityProvider" -import IUserIdentityProviderReader from "../domain/userIdentityProvider/IUserIdentityProviderReader" -import { UnauthorizedError } from "@/common" - -interface Auth0UserIdentityProviderReaderConfig { - readonly domain: string - readonly clientId: string - readonly clientSecret: string -} - -export default class Auth0UserIdentityProviderReader implements IUserIdentityProviderReader { - private readonly managementClient: ManagementClient - - constructor(config: Auth0UserIdentityProviderReaderConfig) { - this.managementClient = new ManagementClient({ - domain: config.domain, - clientId: config.clientId, - clientSecret: config.clientSecret - }) - } - - async getUserIdentityProvider(userId: string): Promise { - const response = await this.managementClient.users.get({ id: userId }) - const identities = response.data.identities - const gitHubIdentity = identities.find(e => { - return e.connection.toLowerCase() === "github" - }) - const usernamePasswordIdentity = identities.find(e => { - return e.connection.toLowerCase() === "username-password-authentication" - }) - if (gitHubIdentity) { - return UserIdentityProvider.GITHUB - } else if (usernamePasswordIdentity) { - return UserIdentityProvider.USERNAME_PASSWORD - } else { - throw new UnauthorizedError() - } - } -} diff --git a/src/features/auth/data/GitHubInstallationAccessTokenDataSource.ts b/src/features/auth/data/GitHubInstallationAccessTokenDataSource.ts deleted file mode 100644 index b82c2112..00000000 --- a/src/features/auth/data/GitHubInstallationAccessTokenDataSource.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { Octokit } from "octokit" -import { createAppAuth } from "@octokit/auth-app" - -type GitHubInstallationAccessTokenRefresherConfig = { - readonly appId: string - readonly clientId: string - readonly clientSecret: string - readonly privateKey: string - readonly organization: string -} - -export default class GitHubInstallationAccessTokenRefresher { - private readonly config: GitHubInstallationAccessTokenRefresherConfig - - constructor(config: GitHubInstallationAccessTokenRefresherConfig) { - this.config = config - } - - async getAccessToken(repositoryNames: string[]): Promise { - if (repositoryNames.length == 0) { - throw new Error("Must provide at least one repository name when creating a GitHub installation access token.") - } - const auth = createAppAuth({ - appId: this.config.appId, - clientId: this.config.clientId, - clientSecret: this.config.clientSecret, - privateKey: this.config.privateKey - }) - const appAuth = await auth({ type: "app" }) - const octokit = new Octokit({ auth: appAuth.token }) - const response = await octokit.rest.apps.getOrgInstallation({ - org: this.config.organization - }) - const installation = response.data - try { - const installationAuth = await auth({ - type: "installation", - installationId: installation.id, - repositoryNames: repositoryNames - }) - return installationAuth.token - /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ - } catch (error: any) { - if (error.status && error.status == 422) { - // One or more of the repositories do not exist. We log the error - // and create an access token with access to know repositories. - console.error("Cannot log in user as one or more repositories do not exist: " + repositoryNames.join(", ")) - console.error(error) - } - throw error - } - } -} diff --git a/src/features/auth/data/GitHubOAuthTokenRefresher.ts b/src/features/auth/data/GitHubOAuthTokenRefresher.ts index 08a2a998..32a7276e 100644 --- a/src/features/auth/data/GitHubOAuthTokenRefresher.ts +++ b/src/features/auth/data/GitHubOAuthTokenRefresher.ts @@ -1,4 +1,4 @@ -import { UnauthorizedError } from "@/common/errors" +import { UnauthorizedError } from "@/common" import { OAuthToken, IOAuthTokenRefresher } from "../domain" export interface GitHubOAuthTokenRefresherConfig { @@ -13,8 +13,11 @@ export default class GitHubOAuthTokenRefresher implements IOAuthTokenRefresher { this.config = config } - async refreshOAuthToken(oldRefreshToken: string): Promise { - const url = this.getAccessTokenURL(oldRefreshToken) + async refreshOAuthToken(oldOAuthToken: OAuthToken): Promise { + if (!oldOAuthToken.refreshToken) { + throw new Error("Cannot refresh OAuth token as it has no refresh token") + } + const url = this.getAccessTokenURL(oldOAuthToken.refreshToken) const response = await fetch(url, { method: "POST" }) if (response.status != 200) { throw new UnauthorizedError( diff --git a/src/features/auth/data/index.ts b/src/features/auth/data/index.ts index 8090466b..a1b0236b 100644 --- a/src/features/auth/data/index.ts +++ b/src/features/auth/data/index.ts @@ -1,6 +1 @@ -export { default as Auth0MetadataUpdater } from "./Auth0MetadataUpdater" -export { default as Auth0RefreshTokenReader } from "./Auth0RefreshTokenReader" -export { default as Auth0RepositoryAccessReader } from "./Auth0RepositoryAccessReader" -export { default as Auth0UserIdentityProviderReader } from "./Auth0UserIdentityProviderReader" -export { default as GitHubInstallationAccessTokenDataSource } from "./GitHubInstallationAccessTokenDataSource" export { default as GitHubOAuthTokenRefresher } from "./GitHubOAuthTokenRefresher" diff --git a/src/features/auth/domain/accessToken/AccessTokenService.ts b/src/features/auth/domain/accessToken/AccessTokenService.ts deleted file mode 100644 index 095aef31..00000000 --- a/src/features/auth/domain/accessToken/AccessTokenService.ts +++ /dev/null @@ -1,42 +0,0 @@ -import IAccessTokenService from "./IAccessTokenService" - -export interface IIsGuestReader { - getIsGuest(): Promise -} - -interface AccessTokenServiceConfig { - readonly isGuestReader: IIsGuestReader - readonly guestAccessTokenService: IAccessTokenService - readonly hostAccessTokenService: IAccessTokenService -} - -export default class AccessTokenService implements IAccessTokenService { - private readonly isGuestReader: IIsGuestReader - private readonly guestAccessTokenService: IAccessTokenService - private readonly hostAccessTokenService: IAccessTokenService - - constructor(config: AccessTokenServiceConfig) { - this.isGuestReader = config.isGuestReader - this.guestAccessTokenService = config.guestAccessTokenService - this.hostAccessTokenService = config.hostAccessTokenService - } - - async getAccessToken(): Promise { - const service = await this.getService() - return await service.getAccessToken() - } - - async refreshAccessToken(accessToken: string): Promise { - const service = await this.getService() - return await service.refreshAccessToken(accessToken) - } - - private async getService() { - const isGuest = await this.isGuestReader.getIsGuest() - if (isGuest) { - return this.guestAccessTokenService - } else { - return this.hostAccessTokenService - } - } -} \ No newline at end of file diff --git a/src/features/auth/domain/accessToken/GuestAccessTokenRepository.ts b/src/features/auth/domain/accessToken/GuestAccessTokenRepository.ts deleted file mode 100644 index 7a93cef0..00000000 --- a/src/features/auth/domain/accessToken/GuestAccessTokenRepository.ts +++ /dev/null @@ -1,25 +0,0 @@ -export interface IRepository { - get(userId: string): Promise - setExpiring(userId: string, token: string, timeToLive: number): Promise - delete(userId: string): Promise -} - -export default class GuestAccessTokenRepository { - private readonly repository: IRepository - - constructor(repository: IRepository) { - this.repository = repository - } - - async get(userId: string): Promise { - return await this.repository.get(userId) - } - - async set(userId: string, accessToken: string): Promise { - await this.repository.setExpiring(userId, accessToken, 7 * 24 * 3600) - } - - async delete(userId: string): Promise { - await this.repository.delete(userId) - } -} \ No newline at end of file diff --git a/src/features/auth/domain/accessToken/GuestAccessTokenService.ts b/src/features/auth/domain/accessToken/GuestAccessTokenService.ts deleted file mode 100644 index 6ac68c0c..00000000 --- a/src/features/auth/domain/accessToken/GuestAccessTokenService.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { UnauthorizedError } from "../../../../common" -import IAccessTokenService from "./IAccessTokenService" - -export interface IUserIDReader { - getUserId(): Promise -} - -export interface Repository { - get(userId: string): Promise - set(userId: string, token: string): Promise -} - -export interface DataSource { - getAccessToken(userId: string): Promise -} - -export type GuestAccessTokenServiceConfig = { - readonly userIdReader: IUserIDReader - readonly repository: Repository - readonly dataSource: DataSource -} - -export default class GuestAccessTokenService implements IAccessTokenService { - private readonly userIdReader: IUserIDReader - private readonly repository: Repository - private readonly dataSource: DataSource - - constructor(config: GuestAccessTokenServiceConfig) { - this.userIdReader = config.userIdReader - this.repository = config.repository - this.dataSource = config.dataSource - } - - async getAccessToken(): Promise { - const userId = await this.userIdReader.getUserId() - const accessToken = await this.repository.get(userId) - if (!accessToken) { - throw new UnauthorizedError(`No access token stored for user with ID ${userId}.`) - } - return accessToken - } - - async refreshAccessToken(_accessToken: string): Promise { - const userId = await this.userIdReader.getUserId() - const newAccessToken = await this.dataSource.getAccessToken(userId) - await this.repository.set(userId, newAccessToken) - return newAccessToken - } -} \ No newline at end of file diff --git a/src/features/auth/domain/accessToken/HostAccessTokenService.ts b/src/features/auth/domain/accessToken/HostAccessTokenService.ts deleted file mode 100644 index 7b400082..00000000 --- a/src/features/auth/domain/accessToken/HostAccessTokenService.ts +++ /dev/null @@ -1,39 +0,0 @@ -import IAccessTokenService from "./IAccessTokenService" -import IOAuthTokenRepository from "../oAuthToken/IOAuthTokenRepository" -import IOAuthTokenRefresher from "../oAuthToken/IOAuthTokenRefresher" - -export interface IUserIDReader { - getUserId(): Promise -} - -type HostAccessTokenServiceConfig = { - readonly userIdReader: IUserIDReader - readonly repository: IOAuthTokenRepository - readonly refresher: IOAuthTokenRefresher -} - -export default class HostAccessTokenService implements IAccessTokenService { - private readonly userIdReader: IUserIDReader - private readonly repository: IOAuthTokenRepository - private readonly refresher: IOAuthTokenRefresher - - constructor(config: HostAccessTokenServiceConfig) { - this.userIdReader = config.userIdReader - this.repository = config.repository - this.refresher = config.refresher - } - - async getAccessToken(): Promise { - const userId = await this.userIdReader.getUserId() - const oAuthToken = await this.repository.get(userId) - return oAuthToken.accessToken - } - - async refreshAccessToken(_accessToken: string): Promise { - const userId = await this.userIdReader.getUserId() - const oAuthToken = await this.repository.get(userId) - const newOAuthToken = await this.refresher.refreshOAuthToken(oAuthToken.refreshToken) - await this.repository.set(userId, newOAuthToken) - return newOAuthToken.accessToken - } -} \ No newline at end of file diff --git a/src/features/auth/domain/accessToken/IAccessTokenService.ts b/src/features/auth/domain/accessToken/IAccessTokenService.ts deleted file mode 100644 index 579211c1..00000000 --- a/src/features/auth/domain/accessToken/IAccessTokenService.ts +++ /dev/null @@ -1,4 +0,0 @@ -export default interface IAccessTokenService { - getAccessToken(): Promise - refreshAccessToken(accessToken: string): Promise -} diff --git a/src/features/auth/domain/accessToken/LockingAccessTokenService.ts b/src/features/auth/domain/accessToken/LockingAccessTokenService.ts deleted file mode 100644 index 5717bdcc..00000000 --- a/src/features/auth/domain/accessToken/LockingAccessTokenService.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { IMutexFactory } from "@/common" -import IAccessTokenService from "./IAccessTokenService" -import withMutex from "../../../../common/mutex/withMutex" - -export default class LockingAccessTokenService implements IAccessTokenService { - private readonly mutexFactory: IMutexFactory - private readonly accessTokenService: IAccessTokenService - - constructor( - mutexFactory: IMutexFactory, - accessTokenService: IAccessTokenService - ) { - this.mutexFactory = mutexFactory - this.accessTokenService = accessTokenService - } - - async getAccessToken(): Promise { - return await this.accessTokenService.getAccessToken() - } - - async refreshAccessToken(accessToken: string): Promise { - const mutex = await this.mutexFactory.makeMutex() - return await withMutex(mutex, async () => { - return await this.accessTokenService.refreshAccessToken(accessToken) - }) - } -} diff --git a/src/features/auth/domain/accessToken/OnlyStaleRefreshingAccessTokenService.ts b/src/features/auth/domain/accessToken/OnlyStaleRefreshingAccessTokenService.ts deleted file mode 100644 index 9b3aabce..00000000 --- a/src/features/auth/domain/accessToken/OnlyStaleRefreshingAccessTokenService.ts +++ /dev/null @@ -1,23 +0,0 @@ -import IAccessTokenService from "./IAccessTokenService" - -export default class OnlyStaleRefreshingAccessTokenService implements IAccessTokenService { - private readonly service: IAccessTokenService - - constructor(service: IAccessTokenService) { - this.service = service - } - - async getAccessToken(): Promise { - return await this.service.getAccessToken() - } - - async refreshAccessToken(accessToken: string): Promise { - const storedAccessToken = await this.getAccessToken() - if (accessToken != storedAccessToken) { - // Given access token is outdated so we use our stored access token. - return storedAccessToken - } - // Given access token is stale so we refresh it. - return await this.service.refreshAccessToken(accessToken) - } -} \ No newline at end of file diff --git a/src/features/auth/domain/accessToken/index.ts b/src/features/auth/domain/accessToken/index.ts deleted file mode 100644 index b575dda2..00000000 --- a/src/features/auth/domain/accessToken/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -export { default as GuestAccessTokenRepository } from "./GuestAccessTokenRepository" -export { default as GuestAccessTokenService } from "./GuestAccessTokenService" -export { default as HostAccessTokenService } from "./HostAccessTokenService" -export { default as LockingAccessTokenService } from "./LockingAccessTokenService" -export { default as OnlyStaleRefreshingAccessTokenService } from "./OnlyStaleRefreshingAccessTokenService" -export { default as AccessTokenService } from "./AccessTokenService" diff --git a/src/features/auth/domain/credentialsTransfer/GuestCredentialsTransferrer.ts b/src/features/auth/domain/credentialsTransfer/GuestCredentialsTransferrer.ts deleted file mode 100644 index 05a39f7f..00000000 --- a/src/features/auth/domain/credentialsTransfer/GuestCredentialsTransferrer.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ICredentialsTransferrer from "./ICredentialsTransferrer" - -export interface IDataSource { - getAccessToken(userId: string): Promise -} - -export interface IRepository { - set(userId: string, token: string): Promise -} - -export type GuestCredentialsTransferrerConfig = { - readonly dataSource: IDataSource - readonly repository: IRepository -} - -export default class GuestCredentialsTransferrer implements ICredentialsTransferrer { - private readonly dataSource: IDataSource - private readonly repository: IRepository - - constructor(config: GuestCredentialsTransferrerConfig) { - this.dataSource = config.dataSource - this.repository = config.repository - } - - async transferCredentials(userId: string): Promise { - const newAccessToken = await this.dataSource.getAccessToken(userId) - await this.repository.set(userId, newAccessToken) - } -} diff --git a/src/features/auth/domain/credentialsTransfer/HostCredentialsTransferrer.ts b/src/features/auth/domain/credentialsTransfer/HostCredentialsTransferrer.ts deleted file mode 100644 index d66a0534..00000000 --- a/src/features/auth/domain/credentialsTransfer/HostCredentialsTransferrer.ts +++ /dev/null @@ -1,31 +0,0 @@ -import IOAuthTokenRefresher from "../oAuthToken/IOAuthTokenRefresher" -import IOAuthTokenRepository from "../oAuthToken/IOAuthTokenRepository" -import ICredentialsTransferrer from "./ICredentialsTransferrer" - -export interface IRefreshTokenReader { - getRefreshToken(userId: string): Promise -} - -type HostCredentialsTransferrerConfig = { - readonly refreshTokenReader: IRefreshTokenReader - readonly oAuthTokenRefresher: IOAuthTokenRefresher - readonly oAuthTokenRepository: IOAuthTokenRepository -} - -export default class HostCredentialsTransferrer implements ICredentialsTransferrer { - private readonly refreshTokenReader: IRefreshTokenReader - private readonly oAuthTokenRefresher: IOAuthTokenRefresher - private readonly oAuthTokenRepository: IOAuthTokenRepository - - constructor(config: HostCredentialsTransferrerConfig) { - this.refreshTokenReader = config.refreshTokenReader - this.oAuthTokenRefresher = config.oAuthTokenRefresher - this.oAuthTokenRepository = config.oAuthTokenRepository - } - - async transferCredentials(userId: string): Promise { - const refreshToken = await this.refreshTokenReader.getRefreshToken(userId) - const authToken = await this.oAuthTokenRefresher.refreshOAuthToken(refreshToken) - await this.oAuthTokenRepository.set(userId, authToken) - } -} diff --git a/src/features/auth/domain/credentialsTransfer/ICredentialsTransferrer.ts b/src/features/auth/domain/credentialsTransfer/ICredentialsTransferrer.ts deleted file mode 100644 index 7bea8973..00000000 --- a/src/features/auth/domain/credentialsTransfer/ICredentialsTransferrer.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default interface ICredentialsTransferrer { - transferCredentials(userId: string): Promise -} diff --git a/src/features/auth/domain/credentialsTransfer/index.ts b/src/features/auth/domain/credentialsTransfer/index.ts deleted file mode 100644 index b07aa4af..00000000 --- a/src/features/auth/domain/credentialsTransfer/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as GuestCredentialsTransferrer } from "./GuestCredentialsTransferrer" -export { default as HostCredentialsTransferrer } from "./HostCredentialsTransferrer" diff --git a/src/features/auth/domain/index.ts b/src/features/auth/domain/index.ts index 1c1961cb..902ad6fe 100644 --- a/src/features/auth/domain/index.ts +++ b/src/features/auth/domain/index.ts @@ -1,8 +1,4 @@ -export * from "./accessToken" -export * from "./credentialsTransfer" -export * from "./logIn" -export * from "./logOut" -export * from "./oAuthToken" -export * from "./repositoryAccess" -export * from "./sessionValidity" -export * from "./userIdentityProvider" +export * from "./log-in" +export * from "./log-out" +export * from "./oauth-token" +export * from "./session-validity" diff --git a/src/features/auth/domain/log-in/ILogInHandler.ts b/src/features/auth/domain/log-in/ILogInHandler.ts new file mode 100644 index 00000000..671bd4fc --- /dev/null +++ b/src/features/auth/domain/log-in/ILogInHandler.ts @@ -0,0 +1,15 @@ +export interface IUser { + readonly id?: string + readonly email?: string | null +} + +export interface IAccount { + readonly provider: string + readonly providerAccountId: string + readonly access_token?: string + readonly refresh_token?: string +} + +export default interface ILogInHandler { + handleLogIn(params: { user: IUser, account: IAccount | null }): Promise +} diff --git a/src/features/auth/domain/log-in/LogInHandler.ts b/src/features/auth/domain/log-in/LogInHandler.ts new file mode 100644 index 00000000..32b26a5f --- /dev/null +++ b/src/features/auth/domain/log-in/LogInHandler.ts @@ -0,0 +1,52 @@ +import { ILogInHandler, IUser, IAccount } from "." +import { IOAuthTokenRepository } from "../oauth-token" +import saneParseInt from "@/common/utils/saneParseInt" + +export default class LogInHandler implements ILogInHandler { + private readonly oauthTokenRepository: IOAuthTokenRepository + + constructor(config: { oauthTokenRepository: IOAuthTokenRepository }) { + this.oauthTokenRepository = config.oauthTokenRepository + } + + async handleLogIn({ user, account }: { user: IUser, account: IAccount | null }) { + if (!account) { + return false + } + if (account.provider === "github") { + return await this.handleLogInForGitHubUser({ user, account }) + } else { + console.error("Unhandled account provider: " + account.provider) + return false + } + } + + private async handleLogInForGitHubUser({ user, account }: { user: IUser, account: IAccount }) { + if (!user.id) { + return false + } + const accessToken = account.access_token + const refreshToken = account.refresh_token + if (!accessToken) { + return false + } + if (!refreshToken) { + return false + } + const userId = saneParseInt(user.id) + if (!userId) { + // We do not have a valid user ID, meaning this is the first time the user logs in. + // When logging in for the first time, the user has a temporary ID that we cannot + // look up in our database, so we rely on Auth.js to persist the access token and + // refresh token. This is intended according to Auth.js' documentation: + // https://authjs.dev/reference/nextjs#signin + return true + } + try { + await this.oauthTokenRepository.set(`${userId}`, { accessToken, refreshToken }) + return true + } catch (error) { + return false + } + } +} diff --git a/src/features/auth/domain/log-in/index.ts b/src/features/auth/domain/log-in/index.ts new file mode 100644 index 00000000..4daa92b0 --- /dev/null +++ b/src/features/auth/domain/log-in/index.ts @@ -0,0 +1,2 @@ +export type { default as ILogInHandler, IUser, IAccount } from "./ILogInHandler" +export { default as LogInHandler } from "./LogInHandler" diff --git a/src/features/auth/domain/logOut/CompositeLogOutHandler.ts b/src/features/auth/domain/log-out/CompositeLogOutHandler.ts similarity index 100% rename from src/features/auth/domain/logOut/CompositeLogOutHandler.ts rename to src/features/auth/domain/log-out/CompositeLogOutHandler.ts diff --git a/src/features/auth/domain/logOut/ErrorIgnoringLogOutHandler.ts b/src/features/auth/domain/log-out/ErrorIgnoringLogOutHandler.ts similarity index 100% rename from src/features/auth/domain/logOut/ErrorIgnoringLogOutHandler.ts rename to src/features/auth/domain/log-out/ErrorIgnoringLogOutHandler.ts diff --git a/src/features/auth/domain/logOut/ILogOutHandler.ts b/src/features/auth/domain/log-out/ILogOutHandler.ts similarity index 100% rename from src/features/auth/domain/logOut/ILogOutHandler.ts rename to src/features/auth/domain/log-out/ILogOutHandler.ts diff --git a/src/features/auth/domain/logOut/UserDataCleanUpLogOutHandler.ts b/src/features/auth/domain/log-out/UserDataCleanUpLogOutHandler.ts similarity index 100% rename from src/features/auth/domain/logOut/UserDataCleanUpLogOutHandler.ts rename to src/features/auth/domain/log-out/UserDataCleanUpLogOutHandler.ts diff --git a/src/features/auth/domain/logOut/index.ts b/src/features/auth/domain/log-out/index.ts similarity index 100% rename from src/features/auth/domain/logOut/index.ts rename to src/features/auth/domain/log-out/index.ts diff --git a/src/features/auth/domain/logIn/CompositeLogInHandler.ts b/src/features/auth/domain/logIn/CompositeLogInHandler.ts deleted file mode 100644 index 169be4c2..00000000 --- a/src/features/auth/domain/logIn/CompositeLogInHandler.ts +++ /dev/null @@ -1,14 +0,0 @@ -import ILogInHandler from "./ILogInHandler" - -export default class CompositeLogInHandler implements ILogInHandler { - private readonly handlers: ILogInHandler[] - - constructor(handlers: ILogInHandler[]) { - this.handlers = handlers - } - - async handleLogIn(userId: string): Promise { - const promises = this.handlers.map(e => e.handleLogIn(userId)) - await Promise.all(promises) - } -} diff --git a/src/features/auth/domain/logIn/CredentialsTransferringLogInHandler.ts b/src/features/auth/domain/logIn/CredentialsTransferringLogInHandler.ts deleted file mode 100644 index 112171ee..00000000 --- a/src/features/auth/domain/logIn/CredentialsTransferringLogInHandler.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ICredentialsTransferrer from "../credentialsTransfer/ICredentialsTransferrer" -import IIsUserGuestReader from "../userIdentityProvider/IIsUserGuestReader" -import ILogInHandler from "./ILogInHandler" - -export interface IRefreshTokenReader { - getRefreshToken(userId: string): Promise -} - -type CredentialsTransferringLogInHandlerConfig = { - readonly isUserGuestReader: IIsUserGuestReader - readonly guestCredentialsTransferrer: ICredentialsTransferrer - readonly hostCredentialsTransferrer: ICredentialsTransferrer -} - -export default class CredentialsTransferringLogInHandler implements ILogInHandler { - private readonly isUserGuestReader: IIsUserGuestReader - private readonly guestCredentialsTransferrer: ICredentialsTransferrer - private readonly hostCredentialsTransferrer: ICredentialsTransferrer - - constructor(config: CredentialsTransferringLogInHandlerConfig) { - this.isUserGuestReader = config.isUserGuestReader - this.guestCredentialsTransferrer = config.guestCredentialsTransferrer - this.hostCredentialsTransferrer = config.hostCredentialsTransferrer - } - - async handleLogIn(userId: string): Promise { - try { - const isGuest = await this.isUserGuestReader.getIsUserGuest(userId) - if (isGuest) { - await this.guestCredentialsTransferrer.transferCredentials(userId) - } else { - await this.hostCredentialsTransferrer.transferCredentials(userId) - } - } catch { - // It is safe to ignore the error. Transferring credentials is a - // "best-case scenario" that will always succeed unless the user - // is not a member of the GitHub organization or a guest user has - // been incorrectly configured. Either way, we allow the user to - // login an rely on the SessionBarrier to show an error later. - } - } -} diff --git a/src/features/auth/domain/logIn/ILogInHandler.ts b/src/features/auth/domain/logIn/ILogInHandler.ts deleted file mode 100644 index b0e0e0f4..00000000 --- a/src/features/auth/domain/logIn/ILogInHandler.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default interface ILogInHandler { - handleLogIn(userId: string): Promise -} diff --git a/src/features/auth/domain/logIn/RemoveInvitedFlagLogInHandler.ts b/src/features/auth/domain/logIn/RemoveInvitedFlagLogInHandler.ts deleted file mode 100644 index c1565e9d..00000000 --- a/src/features/auth/domain/logIn/RemoveInvitedFlagLogInHandler.ts +++ /dev/null @@ -1,20 +0,0 @@ -import ILogInHandler from "./ILogInHandler" - -export interface IMetadataUpdater { - /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ - updateMetadata(userId: string, metadata: {[key: string]: any}): Promise -} - -export default class RemoveInvitedFlagLogInHandler implements ILogInHandler { - private readonly metadataUpdater: IMetadataUpdater - - constructor(metadataUpdater: IMetadataUpdater) { - this.metadataUpdater = metadataUpdater - } - - async handleLogIn(userId: string): Promise { - await this.metadataUpdater.updateMetadata(userId, { - has_pending_invitation: false - }) - } -} diff --git a/src/features/auth/domain/logIn/index.ts b/src/features/auth/domain/logIn/index.ts deleted file mode 100644 index ec771fa7..00000000 --- a/src/features/auth/domain/logIn/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { default as CompositeLogInHandler } from "./CompositeLogInHandler" -export { default as CredentialsTransferringLogInHandler } from "./CredentialsTransferringLogInHandler" -export type { default as ILogInHandler } from "./ILogInHandler" -export { default as RemoveInvitedFlagLogInHandler } from "./RemoveInvitedFlagLogInHandler" diff --git a/src/features/auth/domain/oAuthToken/IOAuthTokenRefresher.ts b/src/features/auth/domain/oAuthToken/IOAuthTokenRefresher.ts deleted file mode 100644 index bd1b371a..00000000 --- a/src/features/auth/domain/oAuthToken/IOAuthTokenRefresher.ts +++ /dev/null @@ -1,5 +0,0 @@ -import OAuthToken from "./OAuthToken" - -export default interface IOAuthTokenRefresher { - refreshOAuthToken(refreshToken: string): Promise -} diff --git a/src/features/auth/domain/oAuthToken/OAuthTokenRepository.ts b/src/features/auth/domain/oAuthToken/OAuthTokenRepository.ts deleted file mode 100644 index 678f83bd..00000000 --- a/src/features/auth/domain/oAuthToken/OAuthTokenRepository.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { IUserDataRepository, UnauthorizedError, ZodJSONCoder } from "../../../../common" -import IOAuthTokenRepository from "./IOAuthTokenRepository" -import OAuthToken, { OAuthTokenSchema } from "./OAuthToken" - -export default class OAuthTokenRepository implements IOAuthTokenRepository { - private readonly repository: IUserDataRepository - - constructor(repository: IUserDataRepository) { - this.repository = repository - } - - async get(userId: string): Promise { - const string = await this.repository.get(userId) - if (!string) { - throw new UnauthorizedError(`No OAuthToken stored for user with ID ${userId}.`) - } - return ZodJSONCoder.decode(OAuthTokenSchema, string) - } - - async set(userId: string, token: OAuthToken): Promise { - const string = ZodJSONCoder.encode(OAuthTokenSchema, token) - await this.repository.setExpiring(userId, string, 6 * 30 * 24 * 3600) - } - - async delete(userId: string): Promise { - await this.repository.delete(userId) - } -} diff --git a/src/features/auth/domain/oAuthToken/index.ts b/src/features/auth/domain/oAuthToken/index.ts deleted file mode 100644 index 2eae1ad1..00000000 --- a/src/features/auth/domain/oAuthToken/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export type { default as IOAuthTokenRefresher } from "./IOAuthTokenRefresher" -export type { default as IOAuthTokenRepository } from "./IOAuthTokenRepository" -export type { default as OAuthToken } from "./OAuthToken" -export { default as OAuthTokenRepository } from "./OAuthTokenRepository" diff --git a/src/features/auth/domain/oAuthToken/OAuthToken.ts b/src/features/auth/domain/oauth-token/OAuthToken.ts similarity index 100% rename from src/features/auth/domain/oAuthToken/OAuthToken.ts rename to src/features/auth/domain/oauth-token/OAuthToken.ts diff --git a/src/features/auth/domain/oauth-token/data-source/IOAuthTokenDataSource.ts b/src/features/auth/domain/oauth-token/data-source/IOAuthTokenDataSource.ts new file mode 100644 index 00000000..0d3cc916 --- /dev/null +++ b/src/features/auth/domain/oauth-token/data-source/IOAuthTokenDataSource.ts @@ -0,0 +1,5 @@ +import { OAuthToken } from ".." + +export default interface IOAuthTokenDataSource { + getOAuthToken(): Promise +} diff --git a/src/features/auth/domain/oauth-token/data-source/OAuthTokenDataSource.ts b/src/features/auth/domain/oauth-token/data-source/OAuthTokenDataSource.ts new file mode 100644 index 00000000..429bd5fb --- /dev/null +++ b/src/features/auth/domain/oauth-token/data-source/OAuthTokenDataSource.ts @@ -0,0 +1,18 @@ +import { ISession } from "@/common" +import { OAuthToken, IOAuthTokenRepository } from ".." +import IOAuthTokenDataSource from "./IOAuthTokenDataSource" + +export default class PersistingOAuthTokenDataSource implements IOAuthTokenDataSource { + private readonly session: ISession + private readonly repository: IOAuthTokenRepository + + constructor(config: { session: ISession, repository: IOAuthTokenRepository }) { + this.session = config.session + this.repository = config.repository + } + + async getOAuthToken(): Promise { + const userId = await this.session.getUserId() + return await this.repository.get(userId) + } +} diff --git a/src/features/auth/domain/oauth-token/index.ts b/src/features/auth/domain/oauth-token/index.ts new file mode 100644 index 00000000..0717f64c --- /dev/null +++ b/src/features/auth/domain/oauth-token/index.ts @@ -0,0 +1,10 @@ +export type { default as OAuthToken } from "./OAuthToken" +export type { default as IOAuthTokenDataSource } from "./data-source/IOAuthTokenDataSource" +export { default as OAuthTokenDataSource } from "./data-source/OAuthTokenDataSource" +export type { default as IOAuthTokenRefresher } from "./refresher/IOAuthTokenRefresher" +export { default as LockingOAuthTokenRefresher } from "./refresher/LockingOAuthTokenRefresher" +export { default as PersistingOAuthTokenRefresher } from "./refresher/PersistingOAuthTokenRefresher" +export { default as AuthjsAccountsOAuthTokenRepository } from "./repository/AuthjsAccountsOAuthTokenRepository" +export { default as FallbackOAuthTokenRepository } from "./repository/FallbackOAuthTokenRepository" +export type { default as IOAuthTokenRepository } from "./repository/IOAuthTokenRepository" +export { default as OAuthTokenRepository } from "./repository/OAuthTokenRepository" diff --git a/src/features/auth/domain/oauth-token/refresher/IOAuthTokenRefresher.ts b/src/features/auth/domain/oauth-token/refresher/IOAuthTokenRefresher.ts new file mode 100644 index 00000000..b37b79cd --- /dev/null +++ b/src/features/auth/domain/oauth-token/refresher/IOAuthTokenRefresher.ts @@ -0,0 +1,5 @@ +import { OAuthToken } from ".." + +export default interface IOAuthTokenRefresher { + refreshOAuthToken(oauthToken: OAuthToken): Promise +} diff --git a/src/features/auth/domain/oauth-token/refresher/LockingOAuthTokenRefresher.ts b/src/features/auth/domain/oauth-token/refresher/LockingOAuthTokenRefresher.ts new file mode 100644 index 00000000..31323f6f --- /dev/null +++ b/src/features/auth/domain/oauth-token/refresher/LockingOAuthTokenRefresher.ts @@ -0,0 +1,22 @@ +import { IMutexFactory, withMutex } from "@/common" +import { IOAuthTokenRefresher, OAuthToken } from ".." + +export default class LockingOAuthTokenRefresher implements IOAuthTokenRefresher { + private readonly mutexFactory: IMutexFactory + private readonly oauthTokenRefresher: IOAuthTokenRefresher + + constructor(config: { + mutexFactory: IMutexFactory + oauthTokenRefresher: IOAuthTokenRefresher + }) { + this.mutexFactory = config.mutexFactory + this.oauthTokenRefresher = config.oauthTokenRefresher + } + + async refreshOAuthToken(oauthToken: OAuthToken): Promise { + const mutex = await this.mutexFactory.makeMutex() + return await withMutex(mutex, async () => { + return await this.oauthTokenRefresher.refreshOAuthToken(oauthToken) + }) + } +} diff --git a/src/features/auth/domain/oauth-token/refresher/PersistingOAuthTokenRefresher.ts b/src/features/auth/domain/oauth-token/refresher/PersistingOAuthTokenRefresher.ts new file mode 100644 index 00000000..571a52d4 --- /dev/null +++ b/src/features/auth/domain/oauth-token/refresher/PersistingOAuthTokenRefresher.ts @@ -0,0 +1,41 @@ +import { OAuthToken, IOAuthTokenRepository } from ".." +import IOAuthTokenRefresher from "./IOAuthTokenRefresher" + +interface IUserIDReader { + getUserId(): Promise +} + +export default class PersistingOAuthTokenRefresher implements IOAuthTokenRefresher { + private readonly userIdReader: IUserIDReader + private readonly oauthTokenRepository: IOAuthTokenRepository + private readonly oauthTokenRefresher: IOAuthTokenRefresher + + constructor(config: { + userIdReader: IUserIDReader + oauthTokenRepository: IOAuthTokenRepository + oauthTokenRefresher: IOAuthTokenRefresher + }) { + this.userIdReader = config.userIdReader + this.oauthTokenRepository = config.oauthTokenRepository + this.oauthTokenRefresher = config.oauthTokenRefresher + } + + async refreshOAuthToken(oldOAuthToken: OAuthToken): Promise { + const userId = await this.userIdReader.getUserId() + const currentOAuthToken = await this.oauthTokenRepository.get(userId) + if ( + oldOAuthToken.accessToken != currentOAuthToken.accessToken || + oldOAuthToken.refreshToken != currentOAuthToken.refreshToken + ) { + // Given OAuth token is outdated so we use our current OAuth token. + return { + accessToken: currentOAuthToken.accessToken, + refreshToken: currentOAuthToken.refreshToken + } + } + // Given OAuth token is stale so we refresh it. + const newOAuthToken = await this.oauthTokenRefresher.refreshOAuthToken(oldOAuthToken) + await this.oauthTokenRepository.set(userId, newOAuthToken) + return newOAuthToken + } +} diff --git a/src/features/auth/domain/oauth-token/repository/AuthjsAccountsOAuthTokenRepository.ts b/src/features/auth/domain/oauth-token/repository/AuthjsAccountsOAuthTokenRepository.ts new file mode 100644 index 00000000..2e00b4b9 --- /dev/null +++ b/src/features/auth/domain/oauth-token/repository/AuthjsAccountsOAuthTokenRepository.ts @@ -0,0 +1,36 @@ +import { IDB, UnauthorizedError } from "@/common" +import { IOAuthTokenRepository, OAuthToken } from ".." + +export default class AuthjsAccountsOAuthTokenRepository implements IOAuthTokenRepository { + private readonly db: IDB + private readonly provider: string + + constructor(config: { db: IDB, provider: string }) { + this.db = config.db + this.provider = config.provider + } + + async get(userId: string): Promise { + const query = ` + SELECT + access_token, + refresh_token + FROM + accounts + WHERE + provider = $1 AND "userId" = $2; + ` + const result = await this.db.query(query, [this.provider, userId]) + if (result.rows.length == 0) { + throw new UnauthorizedError("The access token was not found. It appears that the user is not authenticated.") + } + const row = result.rows[0] + const accessToken = row.access_token + const refreshToken = row.refresh_token + return { accessToken, refreshToken } + } + + async set(_userId: string, _token: OAuthToken): Promise {} + + async delete(_userId: string): Promise {} +} diff --git a/src/features/auth/domain/oauth-token/repository/FallbackOAuthTokenRepository.ts b/src/features/auth/domain/oauth-token/repository/FallbackOAuthTokenRepository.ts new file mode 100644 index 00000000..d01ee9c7 --- /dev/null +++ b/src/features/auth/domain/oauth-token/repository/FallbackOAuthTokenRepository.ts @@ -0,0 +1,37 @@ +import { IOAuthTokenRepository, OAuthToken } from ".." + +export default class FallbackOAuthTokenRepository implements IOAuthTokenRepository { + private readonly primaryRepository: IOAuthTokenRepository + private readonly secondaryRepository: IOAuthTokenRepository + + constructor(config: { + primaryRepository: IOAuthTokenRepository, + secondaryRepository: IOAuthTokenRepository + }) { + this.primaryRepository = config.primaryRepository + this.secondaryRepository = config.secondaryRepository + } + + async get(userId: string): Promise { + try { + return await this.primaryRepository.get(userId) + } catch { + // Reading from the primary repository failed so we'll try the secondary repository. + // However, we don't know if the error is due to the OAuth token not existing in + // the primary repository or some other error occurred. + // We might consider changing get(_:) on IOAuthTokenRepository to return null in the + // case a token doesn't exist rather than throwing an error. + const oauthToken = await this.secondaryRepository.get(userId) + await this.primaryRepository.set(userId, oauthToken) + return oauthToken + } + } + + async set(userId: string, token: OAuthToken): Promise { + await this.primaryRepository.set(userId, token) + } + + async delete(userId: string): Promise { + await this.primaryRepository.delete(userId) + } +} diff --git a/src/features/auth/domain/oAuthToken/IOAuthTokenRepository.ts b/src/features/auth/domain/oauth-token/repository/IOAuthTokenRepository.ts similarity index 83% rename from src/features/auth/domain/oAuthToken/IOAuthTokenRepository.ts rename to src/features/auth/domain/oauth-token/repository/IOAuthTokenRepository.ts index 745a68c4..7224ca18 100644 --- a/src/features/auth/domain/oAuthToken/IOAuthTokenRepository.ts +++ b/src/features/auth/domain/oauth-token/repository/IOAuthTokenRepository.ts @@ -1,4 +1,4 @@ -import OAuthToken from "./OAuthToken" +import { OAuthToken } from ".." export default interface IOAuthTokenRepository { get(userId: string): Promise diff --git a/src/features/auth/domain/oauth-token/repository/OAuthTokenRepository.ts b/src/features/auth/domain/oauth-token/repository/OAuthTokenRepository.ts new file mode 100644 index 00000000..74f78f99 --- /dev/null +++ b/src/features/auth/domain/oauth-token/repository/OAuthTokenRepository.ts @@ -0,0 +1,57 @@ +import { IDB, UnauthorizedError } from "@/common" +import { IOAuthTokenRepository, OAuthToken } from ".." + +export default class OAuthTokenRepository implements IOAuthTokenRepository { + private readonly db: IDB + private readonly provider: string + + constructor(config: { db: IDB, provider: string }) { + this.db = config.db + this.provider = config.provider + } + + async get(userId: string): Promise { + const query = ` + SELECT + access_token, + refresh_token + FROM + oauth_tokens + WHERE + provider = $1 AND user_id = $2; + ` + const result = await this.db.query(query, [this.provider, userId]) + if (result.rows.length == 0) { + throw new UnauthorizedError("The access token was not found. It appears that the user is not authenticated.") + } + const row = result.rows[0] + const accessToken = row.access_token + const refreshToken = row.refresh_token + return { accessToken, refreshToken } + } + + async set(userId: string, token: OAuthToken): Promise { + const query = ` + INSERT INTO oauth_tokens ( + provider, + user_id, + access_token, + refresh_token + ) + VALUES ($1, $2, $3, $4) + ON CONFLICT (user_id, provider) + DO UPDATE SET access_token = $3, refresh_token = $4, last_updated_at = NOW(); + ` + try { + await this.db.query(query, [this.provider, userId, token.accessToken, token.refreshToken]) + } catch (error) { + console.error(error) + throw error + } + } + + async delete(userId: string): Promise { + const query = `DELETE FROM oauth_tokens WHERE provider = $1 AND user_id = $2` + await this.db.query(query, [this.provider, userId]) + } +} diff --git a/src/features/auth/domain/repositoryAccess/CachingRepositoryAccessReader.ts b/src/features/auth/domain/repositoryAccess/CachingRepositoryAccessReader.ts deleted file mode 100644 index 02405b43..00000000 --- a/src/features/auth/domain/repositoryAccess/CachingRepositoryAccessReader.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { z } from "zod" -import { ZodJSONCoder, IUserDataRepository } from "../../../../common" - -export const RepositoryNamesContainerSchema = z.string().array() - -interface IRepositoryAccessReader { - getRepositoryNames(userId: string): Promise -} - -type CachingRepositoryAccessReaderConfig = { - readonly repository: IRepositoryNameRepository - readonly repositoryAccessReader: IRepositoryAccessReader -} - -type IRepositoryNameRepository = IUserDataRepository - -export default class CachingRepositoryAccessReader { - private readonly repository: IRepositoryNameRepository - private readonly repositoryAccessReader: IRepositoryAccessReader - - constructor(config: CachingRepositoryAccessReaderConfig) { - this.repository = config.repository - this.repositoryAccessReader = config.repositoryAccessReader - } - - async getRepositoryNames(userId: string): Promise { - const cachedValue = await this.getCachedRepositoryNames(userId) - if (cachedValue) { - return cachedValue - } - return await this.refreshRepositoryNames(userId) - } - - private async getCachedRepositoryNames(userId: string): Promise { - const str = await this.repository.get(userId) - if (!str) { - return null - } - try { - return ZodJSONCoder.decode(RepositoryNamesContainerSchema, str) - } catch (error: unknown) { - console.error(error) - return null - } - } - - private async refreshRepositoryNames(userId: string): Promise { - const repositoryNames = await this.repositoryAccessReader.getRepositoryNames(userId) - try { - const str = ZodJSONCoder.encode(RepositoryNamesContainerSchema, repositoryNames) - await this.repository.setExpiring(userId, str, 7 * 24 * 3600) - } catch (error: unknown) { - console.error(error) - } - return repositoryNames - } -} diff --git a/src/features/auth/domain/repositoryAccess/RepositoryRestrictingAccessTokenDataSource.ts b/src/features/auth/domain/repositoryAccess/RepositoryRestrictingAccessTokenDataSource.ts deleted file mode 100644 index 0bb4b4d2..00000000 --- a/src/features/auth/domain/repositoryAccess/RepositoryRestrictingAccessTokenDataSource.ts +++ /dev/null @@ -1,27 +0,0 @@ -interface IRepositoryAccessReader { - getRepositoryNames(userId: string): Promise -} - -interface IAccessTokenDataSource { - getAccessToken(repositoryNames: string[]): Promise -} - -type RepositoryRestrictingAccessTokenDataSourceConfig = { - readonly repositoryAccessReader: IRepositoryAccessReader - readonly dataSource: IAccessTokenDataSource -} - -export default class RepositoryRestrictingAccessTokenDataSource { - private readonly repositoryAccessReader: IRepositoryAccessReader - private readonly dataSource: IAccessTokenDataSource - - constructor(config: RepositoryRestrictingAccessTokenDataSourceConfig) { - this.repositoryAccessReader = config.repositoryAccessReader - this.dataSource = config.dataSource - } - - async getAccessToken(userId: string): Promise { - const repositoryNames = await this.repositoryAccessReader.getRepositoryNames(userId) - return await this.dataSource.getAccessToken(repositoryNames) - } -} diff --git a/src/features/auth/domain/repositoryAccess/index.ts b/src/features/auth/domain/repositoryAccess/index.ts deleted file mode 100644 index 1224c7b8..00000000 --- a/src/features/auth/domain/repositoryAccess/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as CachingRepositoryAccessReader } from "./CachingRepositoryAccessReader" -export { default as RepositoryRestrictingAccessTokenDataSource } from "./RepositoryRestrictingAccessTokenDataSource" diff --git a/src/features/auth/domain/session-validity/OAuthTokenSessionValidator.ts b/src/features/auth/domain/session-validity/OAuthTokenSessionValidator.ts new file mode 100644 index 00000000..77256d55 --- /dev/null +++ b/src/features/auth/domain/session-validity/OAuthTokenSessionValidator.ts @@ -0,0 +1,19 @@ +import SessionValidity from "./SessionValidity" +import { IOAuthTokenDataSource } from ".." + +export default class OAuthTokenSessionValidator { + private readonly oauthTokenDataSource: IOAuthTokenDataSource + + constructor(config: { oauthTokenDataSource: IOAuthTokenDataSource }) { + this.oauthTokenDataSource = config.oauthTokenDataSource + } + + async validateSession(): Promise { + try { + await this.oauthTokenDataSource.getOAuthToken() + return SessionValidity.VALID + } catch (error) { + return SessionValidity.INVALID_ACCESS_TOKEN + } + } +} diff --git a/src/features/auth/domain/session-validity/SessionValidity.ts b/src/features/auth/domain/session-validity/SessionValidity.ts new file mode 100644 index 00000000..0d2e18ca --- /dev/null +++ b/src/features/auth/domain/session-validity/SessionValidity.ts @@ -0,0 +1,6 @@ +enum SessionValidity { + VALID = "valid", + INVALID_ACCESS_TOKEN = "invalid_access_token" +} + +export default SessionValidity diff --git a/src/features/auth/domain/session-validity/index.ts b/src/features/auth/domain/session-validity/index.ts new file mode 100644 index 00000000..0d39e2d3 --- /dev/null +++ b/src/features/auth/domain/session-validity/index.ts @@ -0,0 +1,3 @@ +export { default as OAuthTokenSessionValidator } from "./OAuthTokenSessionValidator" +export { default as SessionValidity } from "./SessionValidity" +export * from "./SessionValidity" diff --git a/src/features/auth/domain/sessionValidity/AccessTokenSessionValidator.ts b/src/features/auth/domain/sessionValidity/AccessTokenSessionValidator.ts deleted file mode 100644 index 05ef4dc4..00000000 --- a/src/features/auth/domain/sessionValidity/AccessTokenSessionValidator.ts +++ /dev/null @@ -1,26 +0,0 @@ -import SessionValidity from "./SessionValidity" - -interface IAccessTokenService { - getAccessToken(): Promise -} - -type AccessTokenSessionValidatorConfig = { - readonly accessTokenService: IAccessTokenService -} - -export default class AccessTokenSessionValidator { - private readonly accessTokenService: IAccessTokenService - - constructor(config: AccessTokenSessionValidatorConfig) { - this.accessTokenService = config.accessTokenService - } - - async validateSession(): Promise { - try { - await this.accessTokenService.getAccessToken() - return SessionValidity.VALID - } catch { - return SessionValidity.INVALID_ACCESS_TOKEN - } - } -} diff --git a/src/features/auth/domain/sessionValidity/GitHubOrganizationSessionValidator.ts b/src/features/auth/domain/sessionValidity/GitHubOrganizationSessionValidator.ts deleted file mode 100644 index 7f8aba6b..00000000 --- a/src/features/auth/domain/sessionValidity/GitHubOrganizationSessionValidator.ts +++ /dev/null @@ -1,52 +0,0 @@ -import SessionValidity from "./SessionValidity" - -type OrganizationMembershipStatus = { - readonly state: "active" | "pending" -} - -interface IOrganizationMembershipStatusReader { - getOrganizationMembershipStatus( - request: { organizationName: string } - ): Promise -} - -type GitHubOrganizationSessionValidatorConfig = { - readonly acceptedOrganization: string - readonly organizationMembershipStatusReader: IOrganizationMembershipStatusReader -} - -export default class GitHubOrganizationSessionValidator { - private readonly acceptedOrganization: string - private readonly organizationMembershipStatusReader: IOrganizationMembershipStatusReader - - constructor(config: GitHubOrganizationSessionValidatorConfig) { - this.acceptedOrganization = config.acceptedOrganization - this.organizationMembershipStatusReader = config.organizationMembershipStatusReader - } - - async validateSession(): Promise { - try { - const response = await this.organizationMembershipStatusReader.getOrganizationMembershipStatus({ - organizationName: this.acceptedOrganization - }) - if (response.state == "active") { - return SessionValidity.VALID - } else { - return SessionValidity.OUTSIDE_GITHUB_ORGANIZATION - } - /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ - } catch (error: any) { - if (error.status) { - if (error.status == 404) { - return SessionValidity.OUTSIDE_GITHUB_ORGANIZATION - } else if (error.status == 403) { - return SessionValidity.GITHUB_APP_BLOCKED - } else { - throw error - } - } else { - throw error - } - } - } -} diff --git a/src/features/auth/domain/sessionValidity/HostOnlySessionValidator.ts b/src/features/auth/domain/sessionValidity/HostOnlySessionValidator.ts deleted file mode 100644 index 08220a67..00000000 --- a/src/features/auth/domain/sessionValidity/HostOnlySessionValidator.ts +++ /dev/null @@ -1,33 +0,0 @@ -import SessionValidity from "./SessionValidity" - -interface IIsGuestReader { - getIsGuest(): Promise -} - -interface ISessionValidator { - validateSession(): Promise -} - -type HostOnlySessionValidatorConfig = { - readonly isGuestReader: IIsGuestReader - readonly sessionValidator: ISessionValidator -} - -export default class HostOnlySessionValidator { - private readonly isGuestReader: IIsGuestReader - private readonly sessionValidator: ISessionValidator - - constructor(config: HostOnlySessionValidatorConfig) { - this.isGuestReader = config.isGuestReader - this.sessionValidator = config.sessionValidator - } - - async validateSession(): Promise { - const isGuest = await this.isGuestReader.getIsGuest() - if (!isGuest) { - return await this.sessionValidator.validateSession() - } else { - return SessionValidity.VALID - } - } -} diff --git a/src/features/auth/domain/sessionValidity/SessionValidity.ts b/src/features/auth/domain/sessionValidity/SessionValidity.ts deleted file mode 100644 index ba461768..00000000 --- a/src/features/auth/domain/sessionValidity/SessionValidity.ts +++ /dev/null @@ -1,21 +0,0 @@ -enum SessionValidity { - VALID = "valid", - INVALID_ACCESS_TOKEN = "invalid_access_token", - OUTSIDE_GITHUB_ORGANIZATION = "outside_github_organization", - GITHUB_APP_BLOCKED = "github_app_blocked" -} - -export default SessionValidity - -export function mergeSessionValidity( - lhs: SessionValidity, - rhs: SessionValidity -): SessionValidity { - if (lhs != SessionValidity.VALID) { - return lhs - } else if (rhs != SessionValidity.VALID) { - return rhs - } else { - return SessionValidity.VALID - } -} diff --git a/src/features/auth/domain/sessionValidity/index.ts b/src/features/auth/domain/sessionValidity/index.ts deleted file mode 100644 index de4d2dde..00000000 --- a/src/features/auth/domain/sessionValidity/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -export { default as AccessTokenSessionValidator } from "./AccessTokenSessionValidator" -export { default as GitHubOrganizationSessionValidator } from "./GitHubOrganizationSessionValidator" -export { default as HostOnlySessionValidator } from "./HostOnlySessionValidator" -export { default as SessionValidity } from "./SessionValidity" -export * from "./SessionValidity" -export { default as useRepositoryAccess } from "./useRepositoryAccess" -export { default as useSessionValidity } from "./useSessionValidity" diff --git a/src/features/auth/domain/sessionValidity/useRepositoryAccess.ts b/src/features/auth/domain/sessionValidity/useRepositoryAccess.ts deleted file mode 100644 index c98d6b03..00000000 --- a/src/features/auth/domain/sessionValidity/useRepositoryAccess.ts +++ /dev/null @@ -1,18 +0,0 @@ -"use client" - -import useSWR from "swr" -import { fetcher } from "../../../../common" - -type RepositoriesContainer = { repositories: string[] } - -export default function useRepositoryAccess() { - const { data, error, isLoading } = useSWR( - "/api/user/repository-access", - fetcher - ) - return { - repositories: data?.repositories || [], - isLoading, - error - } -} diff --git a/src/features/auth/domain/sessionValidity/useSessionValidity.ts b/src/features/auth/domain/sessionValidity/useSessionValidity.ts deleted file mode 100644 index ce5d62ec..00000000 --- a/src/features/auth/domain/sessionValidity/useSessionValidity.ts +++ /dev/null @@ -1,19 +0,0 @@ -"use client" - -import useSWR from "swr" -import { fetcher } from "../../../../common" -import SessionValidity from "./SessionValidity" - -type SessionValidityContainer = { sessionValidity: SessionValidity } - -export default function useSessionValidity() { - const { data, error, isLoading } = useSWR( - "/api/user/session-validity", - fetcher - ) - return { - sessionValidity: data?.sessionValidity || SessionValidity.VALID, - isLoading, - error - } -} diff --git a/src/features/auth/domain/userIdentityProvider/CachingUserIdentityProviderReader.ts b/src/features/auth/domain/userIdentityProvider/CachingUserIdentityProviderReader.ts deleted file mode 100644 index 86456036..00000000 --- a/src/features/auth/domain/userIdentityProvider/CachingUserIdentityProviderReader.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { IUserDataRepository } from "@/common" -import IUserIdentityProviderReader from "./IUserIdentityProviderReader" -import UserIdentityProvider from "./UserIdentityProvider" - -type Repository = IUserDataRepository - -export default class CachingUserIdentityProviderReader implements IUserIdentityProviderReader { - private readonly repository: Repository - private readonly reader: IUserIdentityProviderReader - - constructor(repository: Repository, reader: IUserIdentityProviderReader) { - this.repository = repository - this.reader = reader - } - - async getUserIdentityProvider(userId: string): Promise { - const cachedValue = await this.repository.get(userId) - if (cachedValue) { - return cachedValue as UserIdentityProvider - } else { - const userIdentity = await this.reader.getUserIdentityProvider(userId) - await this.repository.setExpiring(userId, userIdentity.toString(), 7 * 24 * 3600) - return userIdentity - } - } -} diff --git a/src/features/auth/domain/userIdentityProvider/IIsUserGuestReader.ts b/src/features/auth/domain/userIdentityProvider/IIsUserGuestReader.ts deleted file mode 100644 index da34aa0d..00000000 --- a/src/features/auth/domain/userIdentityProvider/IIsUserGuestReader.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default interface IIsUserGuestReader { - getIsUserGuest(userId: string): Promise -} \ No newline at end of file diff --git a/src/features/auth/domain/userIdentityProvider/IUserIdentityProviderReader.ts b/src/features/auth/domain/userIdentityProvider/IUserIdentityProviderReader.ts deleted file mode 100644 index 7b70ffec..00000000 --- a/src/features/auth/domain/userIdentityProvider/IUserIdentityProviderReader.ts +++ /dev/null @@ -1,5 +0,0 @@ -import UserIdentityProvider from "./UserIdentityProvider" - -export default interface IUserIdentityProviderReader { - getUserIdentityProvider(userId: string): Promise -} diff --git a/src/features/auth/domain/userIdentityProvider/IsUserGuestReader.ts b/src/features/auth/domain/userIdentityProvider/IsUserGuestReader.ts deleted file mode 100644 index d2e00648..00000000 --- a/src/features/auth/domain/userIdentityProvider/IsUserGuestReader.ts +++ /dev/null @@ -1,16 +0,0 @@ -import IIsUserGuestReader from "./IIsUserGuestReader" -import IUserIdentityProviderReader from "./IUserIdentityProviderReader" -import UserIdentityProvider from "./UserIdentityProvider" - -export default class IsUserGuestReader implements IIsUserGuestReader { - private readonly userIdentityProviderReader: IUserIdentityProviderReader - - constructor(userIdentityProviderReader: IUserIdentityProviderReader) { - this.userIdentityProviderReader = userIdentityProviderReader - } - - async getIsUserGuest(userId: string): Promise { - const userIdentityProvider = await this.userIdentityProviderReader.getUserIdentityProvider(userId) - return userIdentityProvider == UserIdentityProvider.USERNAME_PASSWORD - } -} \ No newline at end of file diff --git a/src/features/auth/domain/userIdentityProvider/UserIdentityProvider.ts b/src/features/auth/domain/userIdentityProvider/UserIdentityProvider.ts deleted file mode 100644 index 394cafa4..00000000 --- a/src/features/auth/domain/userIdentityProvider/UserIdentityProvider.ts +++ /dev/null @@ -1,6 +0,0 @@ -enum UserIdentityProvider { - GITHUB = "github", - USERNAME_PASSWORD = "username_password" -} - -export default UserIdentityProvider diff --git a/src/features/auth/domain/userIdentityProvider/index.ts b/src/features/auth/domain/userIdentityProvider/index.ts deleted file mode 100644 index 74b56b57..00000000 --- a/src/features/auth/domain/userIdentityProvider/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { default as CachingUserIdentityProviderReader } from "./CachingUserIdentityProviderReader" -export { default as IsUserGuestReader } from "./IsUserGuestReader" -export { default as UserIdentityProvider } from "./UserIdentityProvider" diff --git a/src/features/auth/view/SessionBarrier.tsx b/src/features/auth/view/SessionBarrier.tsx index 15211ce9..8f1fdf0d 100644 --- a/src/features/auth/view/SessionBarrier.tsx +++ b/src/features/auth/view/SessionBarrier.tsx @@ -1,34 +1,15 @@ import { ReactNode } from "react" -import { session, blockingSessionValidator } from "@/composition" +import { blockingSessionValidator } from "@/composition" import ClientSessionBarrier from "./client/SessionBarrier" -const { - NEXT_PUBLIC_SHAPE_DOCS_TITLE, - GITHUB_ORGANIZATION_NAME -} = process.env - export default async function SessionBarrier({ children }: { children: ReactNode }) { - const getIsGuest = async () => { - try { - return await session.getIsGuest() - } catch { - // We assume it's a guest. - return true - } - } - const isGuest = await getIsGuest() const sessionValidity = await blockingSessionValidator.validateSession() return ( - + {children} ) diff --git a/src/features/auth/view/client/GuestAccessTokenInvalidPage.tsx b/src/features/auth/view/client/GuestAccessTokenInvalidPage.tsx deleted file mode 100644 index 65daa3a0..00000000 --- a/src/features/auth/view/client/GuestAccessTokenInvalidPage.tsx +++ /dev/null @@ -1,54 +0,0 @@ -"use client" - -import InvalidSessionPage from "./InvalidSessionPage" -import LoadingIndicator from "@/common/loading/DelayedLoadingIndicator" -import { useRepositoryAccess } from "../../domain" - -export default function GuestAccessTokenInvalidPage({ - organizationName -}: { - organizationName: string -}) { - const {repositories, isLoading, error} = useRepositoryAccess() - if (isLoading) { - return ( - - - - ) - } - if (error) { - return ( - - It was not possible to obtain access to the projects on the {organizationName} organization on GitHub. - - ) - } - if (repositories.length == 0) { - return ( - - Your account does not have access to any projects. - - ) - } - const repositoryNamesHTML = makeRepositoryNamesHTML(repositories) - const html = `It was not possible to obtain access to ${repositoryNamesHTML}.` - return ( - -
- - ) -} - -function makeRepositoryNamesHTML(repositories: string[]): string { - const copiedRepositories = [...repositories] - if (copiedRepositories.length == 1) { - return `${copiedRepositories[0]}` - } else { - const last = copiedRepositories.pop() - return copiedRepositories - .map(e => `${e}`) - .join(", ") - + `, and ${last}` - } -} \ No newline at end of file diff --git a/src/features/auth/view/client/SessionBarrier.tsx b/src/features/auth/view/client/SessionBarrier.tsx index 3913e2fa..55408cfd 100644 --- a/src/features/auth/view/client/SessionBarrier.tsx +++ b/src/features/auth/view/client/SessionBarrier.tsx @@ -1,50 +1,23 @@ "use client" import { ReactNode } from "react" -import GuestAccessTokenInvalidPage from "./GuestAccessTokenInvalidPage" +import { SessionValidity } from "../../domain" import InvalidSessionPage from "./InvalidSessionPage" -import { - SessionValidity, - mergeSessionValidity, - useSessionValidity -} from "../../domain" export default function SessionBarrier({ - isGuest, - siteName, - organizationName, - sessionValidity: fastSessionValidity, + sessionValidity, children }: { - isGuest: boolean - siteName: string - organizationName: string sessionValidity: SessionValidity children: ReactNode }) { - const { sessionValidity: delayedSessionValidity } = useSessionValidity() - const sessionValidity = mergeSessionValidity( - fastSessionValidity, - delayedSessionValidity - ) switch (sessionValidity) { case SessionValidity.VALID: return <>{children} case SessionValidity.INVALID_ACCESS_TOKEN: - if (isGuest) { - return - } else { - return ( - - It was not possible to obtain access to the projects on the {organizationName} organization on GitHub. - - ) - } - case SessionValidity.OUTSIDE_GITHUB_ORGANIZATION: - case SessionValidity.GITHUB_APP_BLOCKED: return ( - - Access to {siteName} requires that your account is an active member of the {organizationName} organization on GitHub. + + It was not possible to obtain access to the repositories on GitHub. ) } diff --git a/src/features/auth/view/client/SessionProvider.tsx b/src/features/auth/view/client/SessionProvider.tsx new file mode 100644 index 00000000..37c3aee7 --- /dev/null +++ b/src/features/auth/view/client/SessionProvider.tsx @@ -0,0 +1,15 @@ +"use client" + +import { SessionProvider as NextAuthSessionProvider } from "next-auth/react" + +export default function SessionProvider({ + children +}: { + children: React.ReactNode +}) { + return ( + + {children} + + ) +} diff --git a/src/features/docs/view/Swagger.tsx b/src/features/docs/view/Swagger.tsx index ad06d1da..98f9838a 100644 --- a/src/features/docs/view/Swagger.tsx +++ b/src/features/docs/view/Swagger.tsx @@ -7,7 +7,7 @@ const Swagger = ({ url }: { url: string }) => { const [isLoading, setLoading] = useState(true) return ( - setLoading(false)} deepLinking persistAuthorization /> + setLoading(false)} deepLinking /> ) } diff --git a/src/features/hooks/data/GitHubHookHandler.ts b/src/features/hooks/data/GitHubHookHandler.ts index 16ff71b7..22ee0005 100644 --- a/src/features/hooks/data/GitHubHookHandler.ts +++ b/src/features/hooks/data/GitHubHookHandler.ts @@ -1,13 +1,14 @@ import { NextRequest } from "next/server" -import { Webhooks, EmitterWebhookEventName } from "@octokit/webhooks" +import { Webhooks } from "@octokit/webhooks" import { IPullRequestEventHandler } from "../domain" +import { WebhookEventName } from "@octokit/webhooks/dist-types/types" interface GitHubHookHandlerConfig { readonly secret: string readonly pullRequestEventHandler: IPullRequestEventHandler } -class GitHubHookHandler { +export default class GitHubHookHandler { private readonly webhooks: Webhooks private readonly pullRequestEventHandler: IPullRequestEventHandler @@ -19,10 +20,10 @@ class GitHubHookHandler { async handle(req: NextRequest): Promise { await this.webhooks.verifyAndReceive({ - id: req.headers.get('X-GitHub-Delivery') as string, - name: req.headers.get('X-GitHub-Event') as EmitterWebhookEventName, + id: req.headers.get("X-GitHub-Delivery") as string, + name: req.headers.get("X-GitHub-Event") as WebhookEventName, payload: await req.text(), - signature: req.headers.get('X-Hub-Signature') as string, + signature: req.headers.get("X-Hub-Signature") as string, }).catch((error) => { console.error(`Error: ${error.message}`) return false @@ -46,7 +47,19 @@ class GitHubHookHandler { if (!payload.installation) { throw new Error("Payload does not contain information about the app installation.") } - await this.pullRequestEventHandler.pullRequestOpened({ + await this.pullRequestEventHandler.pullRequestReopened({ + appInstallationId: payload.installation.id, + repositoryOwner: payload.repository.owner.login, + repositoryName: payload.repository.name, + ref: payload.pull_request.head.ref, + pullRequestNumber: payload.pull_request.number + }) + }) + this.webhooks.on("pull_request.synchronize", async ({ payload }) => { + if (!payload.installation) { + throw new Error("Payload does not contain information about the app installation.") + } + await this.pullRequestEventHandler.pullRequestSynchronized({ appInstallationId: payload.installation.id, repositoryOwner: payload.repository.owner.login, repositoryName: payload.repository.name, @@ -56,5 +69,3 @@ class GitHubHookHandler { }) } } - -export default GitHubHookHandler diff --git a/src/features/hooks/data/GitHubPullRequestCommentRepository.ts b/src/features/hooks/data/GitHubPullRequestCommentRepository.ts deleted file mode 100644 index 3e074d59..00000000 --- a/src/features/hooks/data/GitHubPullRequestCommentRepository.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { IGitHubClient } from "@/common" -import IPullRequestCommentRepository, { - GetPullRequestCommentsOperation, - AddPullRequestCommentOperation, - PullRequestComment -} from "../domain/IPullRequestCommentRepository" - -export default class GitHubPullRequestCommentRepository implements IPullRequestCommentRepository { - readonly gitHubClient: IGitHubClient - - constructor(gitHubClient: IGitHubClient) { - this.gitHubClient = gitHubClient - } - - async getComments( - operation: GetPullRequestCommentsOperation - ): Promise { - return await this.gitHubClient.getPullRequestComments({ - appInstallationId: operation.appInstallationId, - repositoryOwner: operation.repositoryOwner, - repositoryName: operation.repositoryName, - pullRequestNumber: operation.pullRequestNumber, - }) - } - - async addComment(operation: AddPullRequestCommentOperation): Promise { - await this.gitHubClient.addCommentToPullRequest({ - appInstallationId: operation.appInstallationId, - repositoryOwner: operation.repositoryOwner, - repositoryName: operation.repositoryName, - pullRequestNumber: operation.pullRequestNumber, - body: operation.body - }) - } -} diff --git a/src/features/hooks/data/index.ts b/src/features/hooks/data/index.ts index 3e641922..bc0ca6aa 100644 --- a/src/features/hooks/data/index.ts +++ b/src/features/hooks/data/index.ts @@ -1,2 +1 @@ export { default as GitHubHookHandler } from "./GitHubHookHandler" -export { default as GitHubPullRequestCommentRepository } from "./GitHubPullRequestCommentRepository" \ No newline at end of file diff --git a/src/features/hooks/domain/ExistingCommentCheckingPullRequestEventHandler.ts b/src/features/hooks/domain/ExistingCommentCheckingPullRequestEventHandler.ts deleted file mode 100644 index 98447c4c..00000000 --- a/src/features/hooks/domain/ExistingCommentCheckingPullRequestEventHandler.ts +++ /dev/null @@ -1,29 +0,0 @@ -import IPullRequestEventHandler, { IPullRequestOpenedEvent } from "./IPullRequestEventHandler" -import IPullRequestCommentRepository from "./IPullRequestCommentRepository" - -export default class ExistingCommentCheckingPullRequestEventHandler implements IPullRequestEventHandler { - private readonly eventHandler: IPullRequestEventHandler - private readonly commentRepository: IPullRequestCommentRepository - private readonly needleDomain: string - - constructor( - eventHandler: IPullRequestEventHandler, - commentRepository: IPullRequestCommentRepository, - needleDomain: string - ) { - this.eventHandler = eventHandler - this.commentRepository = commentRepository - this.needleDomain = needleDomain - } - - async pullRequestOpened(event: IPullRequestOpenedEvent): Promise { - const comments = await this.commentRepository.getComments(event) - const containsOurComment = comments.find(comment => { - return comment.isFromBot && comment.body.includes(this.needleDomain) - }) - if (containsOurComment) { - return - } - await this.eventHandler.pullRequestOpened(event) - } -} diff --git a/src/features/hooks/domain/FilteringPullRequestEventHandler.ts b/src/features/hooks/domain/FilteringPullRequestEventHandler.ts new file mode 100644 index 00000000..9afde828 --- /dev/null +++ b/src/features/hooks/domain/FilteringPullRequestEventHandler.ts @@ -0,0 +1,37 @@ +import IPullRequestEventHandler, { + IPullRequestOpenedEvent, + IPullRequestReopenedEvent, + IPullRequestSynchronizedEvent +} from "./IPullRequestEventHandler" + +interface IFilter { + includeEvent(event: { repositoryOwner: string, repositoryName: string }): boolean +} + +export default class FilteringPullRequestEventHandler implements IPullRequestEventHandler { + private readonly filter: IFilter + private readonly eventHandler: IPullRequestEventHandler + + constructor(config: { filter: IFilter, eventHandler: IPullRequestEventHandler }) { + this.filter = config.filter + this.eventHandler = config.eventHandler + } + + async pullRequestOpened(event: IPullRequestOpenedEvent) { + if (this.filter.includeEvent(event)) { + await this.eventHandler.pullRequestOpened(event) + } + } + + async pullRequestReopened(event: IPullRequestReopenedEvent) { + if (this.filter.includeEvent(event)) { + await this.eventHandler.pullRequestReopened(event) + } + } + + async pullRequestSynchronized(event: IPullRequestSynchronizedEvent) { + if (this.filter.includeEvent(event)) { + await this.eventHandler.pullRequestSynchronized(event) + } + } +} diff --git a/src/features/hooks/domain/GitHubCommentFactory.ts b/src/features/hooks/domain/GitHubCommentFactory.ts deleted file mode 100644 index 27f27f3d..00000000 --- a/src/features/hooks/domain/GitHubCommentFactory.ts +++ /dev/null @@ -1,16 +0,0 @@ -export default class GitHubCommentFactory { - static makeDocumentationPreviewReadyComment(link: string): string { - return `### 📖 Documentation Preview - -These edits are available for preview at [Shape Docs](${link}). - -
- - - - - - -
Status:✅ Ready!
Preview URL:${link}
` - } -} diff --git a/src/features/hooks/domain/IPullRequestCommentRepository.ts b/src/features/hooks/domain/IPullRequestCommentRepository.ts deleted file mode 100644 index 6ed2e534..00000000 --- a/src/features/hooks/domain/IPullRequestCommentRepository.ts +++ /dev/null @@ -1,24 +0,0 @@ -export type PullRequestComment = { - readonly isFromBot: boolean - readonly body: string -} - -export type GetPullRequestCommentsOperation = { - readonly appInstallationId: number - readonly repositoryOwner: string - readonly repositoryName: string - readonly pullRequestNumber: number -} - -export type AddPullRequestCommentOperation = { - readonly appInstallationId: number - readonly repositoryOwner: string - readonly repositoryName: string - readonly pullRequestNumber: number - readonly body: string -} - -export default interface IPullRequestCommentRepository { - getComments(operation: GetPullRequestCommentsOperation): Promise - addComment(operation: AddPullRequestCommentOperation): Promise -} diff --git a/src/features/hooks/domain/IPullRequestEventHandler.ts b/src/features/hooks/domain/IPullRequestEventHandler.ts index 4f9d6490..0b1d3962 100644 --- a/src/features/hooks/domain/IPullRequestEventHandler.ts +++ b/src/features/hooks/domain/IPullRequestEventHandler.ts @@ -6,6 +6,24 @@ export interface IPullRequestOpenedEvent { readonly pullRequestNumber: number } +export interface IPullRequestReopenedEvent { + readonly appInstallationId: number + readonly repositoryOwner: string + readonly repositoryName: string + readonly ref: string + readonly pullRequestNumber: number +} + +export interface IPullRequestSynchronizedEvent { + readonly appInstallationId: number + readonly repositoryOwner: string + readonly repositoryName: string + readonly ref: string + readonly pullRequestNumber: number +} + export default interface IPullRequestEventHandler { pullRequestOpened(event: IPullRequestOpenedEvent): Promise + pullRequestReopened(event: IPullRequestReopenedEvent): Promise + pullRequestSynchronized(event: IPullRequestSynchronizedEvent): Promise } diff --git a/src/features/hooks/domain/PostCommentPullRequestEventHandler.ts b/src/features/hooks/domain/PostCommentPullRequestEventHandler.ts index f7ea34d3..839d6760 100644 --- a/src/features/hooks/domain/PostCommentPullRequestEventHandler.ts +++ b/src/features/hooks/domain/PostCommentPullRequestEventHandler.ts @@ -1,29 +1,35 @@ -import IPullRequestEventHandler, { IPullRequestOpenedEvent } from "./IPullRequestEventHandler" -import IPullRequestCommentRepository from "./IPullRequestCommentRepository" -import GitHubCommentFactory from "./GitHubCommentFactory" +import IPullRequestEventHandler, { + IPullRequestOpenedEvent, + IPullRequestReopenedEvent, + IPullRequestSynchronizedEvent +} from "./IPullRequestEventHandler" + +interface IPullRequestCommenter { + commentPullRequest(request: { + appInstallationId: number + repositoryOwner: string + repositoryName: string + ref: string + pullRequestNumber: number + }): Promise +} export default class PostCommentPullRequestEventHandler implements IPullRequestEventHandler { - private readonly commentRepository: IPullRequestCommentRepository - private readonly domain: string + private readonly pullRequestCommenter: IPullRequestCommenter - constructor( - commentRepository: IPullRequestCommentRepository, - domain: string - ) { - this.commentRepository = commentRepository - this.domain = domain + constructor(config: { pullRequestCommenter: IPullRequestCommenter }) { + this.pullRequestCommenter = config.pullRequestCommenter } async pullRequestOpened(event: IPullRequestOpenedEvent): Promise { - const projectId = event.repositoryName.replace(/-openapi$/, "") - const link = `${this.domain}/${projectId}/${event.ref}` - const commentBody = GitHubCommentFactory.makeDocumentationPreviewReadyComment(link) - await this.commentRepository.addComment({ - appInstallationId: event.appInstallationId, - repositoryOwner: event.repositoryOwner, - repositoryName: event.repositoryName, - pullRequestNumber: event.pullRequestNumber, - body: commentBody - }) + await this.pullRequestCommenter.commentPullRequest(event) } -} + + async pullRequestReopened(event: IPullRequestReopenedEvent) { + await this.pullRequestCommenter.commentPullRequest(event) + } + + async pullRequestSynchronized(event: IPullRequestSynchronizedEvent) { + await this.pullRequestCommenter.commentPullRequest(event) + } +} \ No newline at end of file diff --git a/src/features/hooks/domain/PullRequestCommenter.ts b/src/features/hooks/domain/PullRequestCommenter.ts new file mode 100644 index 00000000..d1d0ca90 --- /dev/null +++ b/src/features/hooks/domain/PullRequestCommenter.ts @@ -0,0 +1,162 @@ +import { IGitHubClient, PullRequestFile } from "@/common" + +export default class PullRequestCommenter { + private readonly domain: string + private readonly siteName: string + private readonly repositoryNameSuffix: string + private readonly projectConfigurationFilename: string + private readonly gitHubAppId: string + private readonly gitHubClient: IGitHubClient + private readonly fileExtensionRegex = /\.ya?ml$/ + + constructor(config: { + domain: string + siteName: string + repositoryNameSuffix: string + projectConfigurationFilename: string + gitHubAppId: string + gitHubClient: IGitHubClient + }) { + this.domain = config.domain + this.siteName = config.siteName + this.repositoryNameSuffix = config.repositoryNameSuffix + this.projectConfigurationFilename = config.projectConfigurationFilename + this.gitHubAppId = config.gitHubAppId + this.gitHubClient = config.gitHubClient + } + + async commentPullRequest(request: { + appInstallationId: number + repositoryOwner: string + repositoryName: string + ref: string + pullRequestNumber: number + }) { + const files = await this.getChangedYamlFiles(request) + const commentBody = this.makeCommentBody({ + files, + owner: request.repositoryOwner, + repositoryName: request.repositoryName, + ref: request.ref + }) + const existingComment = await this.getExistingComment(request) + if (existingComment && existingComment.body !== commentBody) { + await this.gitHubClient.updatePullRequestComment({ + appInstallationId: request.appInstallationId, + commentId: existingComment.id, + repositoryOwner: request.repositoryOwner, + repositoryName: request.repositoryName, + body: commentBody + }) + } else if (!existingComment && files.length > 0) { + await this.gitHubClient.addCommentToPullRequest({ + appInstallationId: request.appInstallationId, + repositoryOwner: request.repositoryOwner, + repositoryName: request.repositoryName, + pullRequestNumber: request.pullRequestNumber, + body: commentBody + }) + } + } + + private async getChangedYamlFiles(request: { + appInstallationId: number, + repositoryOwner: string + repositoryName: string + pullRequestNumber: number + }) { + const files = await this.gitHubClient.getPullRequestFiles({ + appInstallationId: request.appInstallationId, + repositoryOwner: request.repositoryOwner, + repositoryName: request.repositoryName, + pullRequestNumber: request.pullRequestNumber + }) + return files + .filter(file => file.filename.match(this.fileExtensionRegex)) + .filter(file => file.status != "unchanged") + } + + private async getExistingComment(request: { + appInstallationId: number, + repositoryOwner: string + repositoryName: string + pullRequestNumber: number + }) { + const comments = await this.gitHubClient.getPullRequestComments({ + appInstallationId: request.appInstallationId, + repositoryOwner: request.repositoryOwner, + repositoryName: request.repositoryName, + pullRequestNumber: request.pullRequestNumber, + }) + return comments.find(comment => { + return comment.isFromBot && comment.gitHubApp?.id == this.gitHubAppId + }) + } + + private makeCommentBody(params: { + files: PullRequestFile[] + owner: string + repositoryName: string + ref: string + }): string { + const { owner, repositoryName, ref } = params + const projectId = this.getProjectId({ repositoryName }) + const tableHTML = this.makeFileTableHTML(params) + let result = "### 📖 Documentation Preview" + result += "\n\n" + result += `The changes are now ready to previewed on ${this.siteName} 🚀` + if (tableHTML) { + result += "\n\n" + tableHTML + } + return result + } + + private makeFileTableHTML(params: { + files: PullRequestFile[] + owner: string + repositoryName: string + ref: string + }) { + const { files, owner, repositoryName, ref } = params + const rows: { filename: string, status: string, button: string }[] = [] + const projectId = this.getProjectId({ repositoryName }) + // Make sure we don't include the project configuration file. + const baseConfigFilename = this.projectConfigurationFilename.replace(this.fileExtensionRegex, "") + const changedFiles = files.filter(file => file.filename.replace(this.fileExtensionRegex, "") != baseConfigFilename) + // Create rows for each file + for (const file of changedFiles) { + const status = this.getStatusText(file) + let button = "" + if (file.status != "removed") { + const link = `${this.domain}/${owner}/${projectId}/${ref}/${file.filename}` + button = ` Preview` + } + rows.push({ filename: file.filename, status, button }) + } + if (rows.length == 0) { + return undefined + } + const rowsHTML = rows + .map(row => `${row.filename}${row.status}${row.button}`) + .join("\n") + return `${rowsHTML}
` + } + + private getStatusText(file: PullRequestFile) { + if (file.status == "added") { + return "Added" + } else if (file.status == "removed") { + return "Removed" + } else if (file.status == "renamed") { + return "Renamed" + } else if (file.status == "changed" || file.status == "modified") { + return "Changed" + } else { + return "" + } + } + + private getProjectId({ repositoryName }: { repositoryName: string }): string { + return repositoryName.replace(new RegExp(this.repositoryNameSuffix + "$"), "") + } +} diff --git a/src/features/hooks/domain/RepositoryNameCheckingPullRequestEventHandler.ts b/src/features/hooks/domain/RepositoryNameCheckingPullRequestEventHandler.ts deleted file mode 100644 index cf45fa81..00000000 --- a/src/features/hooks/domain/RepositoryNameCheckingPullRequestEventHandler.ts +++ /dev/null @@ -1,45 +0,0 @@ -import IPullRequestEventHandler, { IPullRequestOpenedEvent } from "./IPullRequestEventHandler" - -export default class RepositoryNameCheckingPullRequestEventHandler implements IPullRequestEventHandler { - private readonly eventHandler: IPullRequestEventHandler - private readonly allowedRepositoryNames: string[] - private readonly disallowedRepositoryNames: string[] - - constructor( - eventHandler: IPullRequestEventHandler, - allowedRepositoryNames?: string[], - disallowedRepositoryNames?: string[] - ) { - this.eventHandler = eventHandler - this.allowedRepositoryNames = allowedRepositoryNames || [] - this.disallowedRepositoryNames = disallowedRepositoryNames || [] - } - - async pullRequestOpened(event: IPullRequestOpenedEvent): Promise { - if (!this.repositoryNameHasExpectedSuffix(event.repositoryName)) { - return - } - if (!this.isAllowedRepositoryName(event.repositoryName)) { - return - } - if (this.isDisallowedRepositoryName(event.repositoryName)) { - return - } - return await this.eventHandler.pullRequestOpened(event) - } - - private repositoryNameHasExpectedSuffix(repositoryName: string) { - return repositoryName.match(/-openapi$/) - } - - private isAllowedRepositoryName(repositoryName: string) { - if (this.allowedRepositoryNames.length == 0) { - return true - } - return this.allowedRepositoryNames.includes(repositoryName) - } - - private isDisallowedRepositoryName(repositoryName: string) { - return this.disallowedRepositoryNames.includes(repositoryName) - } -} diff --git a/src/features/hooks/domain/RepositoryNameEventFilter.ts b/src/features/hooks/domain/RepositoryNameEventFilter.ts new file mode 100644 index 00000000..aba2ea46 --- /dev/null +++ b/src/features/hooks/domain/RepositoryNameEventFilter.ts @@ -0,0 +1,44 @@ +export default class RepositoryNameEventFilter { + private readonly repositoryNameSuffix: string + private readonly allowlist: string[] + private readonly disallowlist: string[] + + constructor(config: { + repositoryNameSuffix: string + allowlist: string[] + disallowlist: string[] + }) { + this.repositoryNameSuffix = config.repositoryNameSuffix + this.allowlist = config.allowlist + this.disallowlist = config.disallowlist + } + + includeEvent(event: { repositoryOwner: string, repositoryName: string }) { + const fullRepositoryName = `${event.repositoryOwner}/${event.repositoryName}` + if (!this.repositoryNameHasExpectedSuffix(event.repositoryName)) { + return false + } + if (!this.isAllowedRepositoryName(fullRepositoryName)) { + return false + } + if (this.isDisallowedRepositoryName(fullRepositoryName)) { + return false + } + return true + } + + private repositoryNameHasExpectedSuffix(repositoryName: string) { + return repositoryName.endsWith(this.repositoryNameSuffix) + } + + private isAllowedRepositoryName(repositoryName: string) { + if (this.allowlist.length == 0) { + return true + } + return this.allowlist.includes(repositoryName) + } + + private isDisallowedRepositoryName(repositoryName: string) { + return this.disallowlist.includes(repositoryName) + } +} \ No newline at end of file diff --git a/src/features/hooks/domain/index.ts b/src/features/hooks/domain/index.ts index 5bc8aa4a..2e271bbd 100644 --- a/src/features/hooks/domain/index.ts +++ b/src/features/hooks/domain/index.ts @@ -1,6 +1,5 @@ -export { default as ExistingCommentCheckingPullRequestEventHandler } from "./ExistingCommentCheckingPullRequestEventHandler" -export { default as GitHubCommentFactory } from "./GitHubCommentFactory" -export type { default as IPullRequestCommentRepository } from "./IPullRequestCommentRepository" export type { default as IPullRequestEventHandler } from "./IPullRequestEventHandler" export { default as PostCommentPullRequestEventHandler } from "./PostCommentPullRequestEventHandler" -export { default as RepositoryNameCheckingPullRequestEventHandler } from "./RepositoryNameCheckingPullRequestEventHandler" +export { default as FilteringPullRequestEventHandler } from "./FilteringPullRequestEventHandler" +export { default as RepositoryNameEventFilter } from "./RepositoryNameEventFilter" +export { default as PullRequestCommenter } from "./PullRequestCommenter" diff --git a/src/features/projects/data/GitHubLoginDataSource.ts b/src/features/projects/data/GitHubLoginDataSource.ts new file mode 100644 index 00000000..3d60d1bf --- /dev/null +++ b/src/features/projects/data/GitHubLoginDataSource.ts @@ -0,0 +1,39 @@ +import IGitHubLoginDataSource from "./IGitHubLoginDataSource" +import IGitHubGraphQLClient from "./IGitHubGraphQLClient" + +export default class GitHubLoginDataSource implements IGitHubLoginDataSource { + private readonly graphQlClient: IGitHubGraphQLClient + + constructor(config: { graphQlClient: IGitHubGraphQLClient }) { + this.graphQlClient = config.graphQlClient + } + + async getLogins(): Promise { + const request = { + query: ` + query { + viewer { + login + organizations(first: 100) { + nodes { + login + } + } + } + }` + } + const response = await this.graphQlClient.graphql(request) + if (!response.viewer) { + throw new Error("viewer property not found in response") + } + if (!response.viewer.login) { + throw new Error("login property not found on viewer in response") + } + if (!response.viewer.organizations) { + throw new Error("organizations property not found on viewer in response") + } + const viewer = response.viewer + const organizations = viewer.organizations.nodes.map((e: { login: string }) => e.login) + return [viewer.login].concat(organizations) + } +} diff --git a/src/features/projects/data/GitHubProjectDataSource.ts b/src/features/projects/data/GitHubProjectDataSource.ts index 52580197..848c4859 100644 --- a/src/features/projects/data/GitHubProjectDataSource.ts +++ b/src/features/projects/data/GitHubProjectDataSource.ts @@ -1,32 +1,38 @@ import GitHubProjectRepository, { GitHubProjectRepositoryRef } from "./GitHubProjectRepository" +import IGitHubLoginDataSource from "./IGitHubLoginDataSource" +import IGitHubGraphQLClient from "./IGitHubGraphQLClient" import { Project, Version, IProjectConfig, IProjectDataSource, ProjectConfigParser, - ProjectConfigRemoteVersion, + ProjectConfigRemoteVersion } from "../domain" -interface IGitHubProjectRepositoryDataSource { - getRepositories(): Promise -} - -type GitHubProjectDataSourceConfig = { - readonly dataSource: IGitHubProjectRepositoryDataSource -} - export default class GitHubProjectDataSource implements IProjectDataSource { - private dataSource: IGitHubProjectRepositoryDataSource + private readonly loginsDataSource: IGitHubLoginDataSource + private readonly graphQlClient: IGitHubGraphQLClient + private readonly repositoryNameSuffix: string + private readonly projectConfigurationFilename: string - constructor(config: GitHubProjectDataSourceConfig) { - this.dataSource = config.dataSource + constructor(config: { + loginsDataSource: IGitHubLoginDataSource, + graphQlClient: IGitHubGraphQLClient, + repositoryNameSuffix: string, + projectConfigurationFilename: string + }) { + this.loginsDataSource = config.loginsDataSource + this.graphQlClient = config.graphQlClient + this.repositoryNameSuffix = config.repositoryNameSuffix + this.projectConfigurationFilename = config.projectConfigurationFilename.replace(/\.ya?ml$/, "") } async getProjects(): Promise { - const repositories = await this.dataSource.getRepositories() + const logins = await this.loginsDataSource.getLogins() + const repositories = await this.getRepositories({ logins }) return repositories.map(repository => { return this.mapProject(repository) }) @@ -58,13 +64,15 @@ export default class GitHubProjectDataSource implements IProjectDataSource { ).filter(version => { return version.specifications.length > 0 }) - const defaultName = repository.name.replace(/-openapi$/, "") + const defaultName = repository.name.replace(new RegExp(this.repositoryNameSuffix + "$"), "") return { - id: defaultName, + id: `${repository.owner.login}-${defaultName}`, + owner: repository.owner.login, name: defaultName, displayName: config?.name || defaultName, versions, imageURL: imageURL, + ownerUrl: `https://github.com/${repository.owner.login}`, url: `https://github.com/${repository.owner.login}/${repository.name}` } } @@ -213,4 +221,128 @@ export default class GitHubProjectDataSource implements IProjectDataSource { .replace(/ /g, "-") .replace(/[^A-Za-z0-9-]/g, "") } + + private async getRepositories({ logins }: { logins: string[] }): Promise { + let searchQueries: string[] = [] + // Search for all private repositories the user has access to. This is needed to find + // repositories for external collaborators who do not belong to an organization. + searchQueries.push(`"${this.repositoryNameSuffix}" in:name is:private`) + // Search for public repositories belonging to a user or organization. + searchQueries = searchQueries.concat(logins.map(login => { + return `"${this.repositoryNameSuffix}" in:name user:${login} is:public` + })) + return await Promise.all(searchQueries.map(searchQuery => { + return this.getRepositoriesForSearchQuery({ searchQuery }) + })) + .then(e => e.flat()) + .then(repositories => { + // GitHub's search API does not enable searching for repositories whose name ends with "-openapi", + // only repositories whose names include "openapi" so we filter the results ourselves. + return repositories.filter(repository => { + return repository.name.endsWith(this.repositoryNameSuffix) + }) + }) + .then(repositories => { + // Ensure we don't have duplicates in the resulting repositories. + const uniqueIdentifiers = new Set() + return repositories.filter(repository => { + const identifier = `${repository.owner.login}-${repository.name}` + const alreadyAdded = uniqueIdentifiers.has(identifier) + uniqueIdentifiers.add(identifier) + return !alreadyAdded + }) + }) + } + + private async getRepositoriesForSearchQuery(params: { + searchQuery: string, + cursor?: string + }): Promise { + const { searchQuery, cursor } = params + const request = { + query: ` + query Repositories($searchQuery: String!, $cursor: String) { + search(query: $searchQuery, type: REPOSITORY, first: 100, after: $cursor) { + results: nodes { + ... on Repository { + name + owner { + login + } + defaultBranchRef { + name + target { + ...on Commit { + oid + } + } + } + configYml: object(expression: "HEAD:${this.projectConfigurationFilename}.yml") { + ...ConfigParts + } + configYaml: object(expression: "HEAD:${this.projectConfigurationFilename}.yaml") { + ...ConfigParts + } + branches: refs(refPrefix: "refs/heads/", first: 100) { + ...RefConnectionParts + } + tags: refs(refPrefix: "refs/tags/", first: 100) { + ...RefConnectionParts + } + } + } + + pageInfo { + hasNextPage + endCursor + } + } + } + + fragment RefConnectionParts on RefConnection { + edges { + node { + name + ... on Ref { + name + target { + ... on Commit { + oid + tree { + entries { + name + } + } + } + } + } + } + } + } + + fragment ConfigParts on GitObject { + ... on Blob { + text + } + } + `, + variables: { searchQuery, cursor } + } + const response = await this.graphQlClient.graphql(request) + if (!response.search || !response.search.results) { + return [] + } + const pageInfo = response.search.pageInfo + if (!pageInfo) { + return response.search.results + } + if (!pageInfo.hasNextPage || !pageInfo.endCursor) { + return response.search.results + } + const nextResults = await this.getRepositoriesForSearchQuery({ + searchQuery, + cursor: pageInfo.endCursor + }) + return response.search.results.concat(nextResults) + } } diff --git a/src/features/projects/data/GitHubProjectRepositoryDataSource.ts b/src/features/projects/data/GitHubProjectRepositoryDataSource.ts deleted file mode 100644 index 2373df7a..00000000 --- a/src/features/projects/data/GitHubProjectRepositoryDataSource.ts +++ /dev/null @@ -1,102 +0,0 @@ -import GitHubProjectRepository from "./GitHubProjectRepository" - -export type GitHubGraphQLClientRequest = { - readonly query: string - /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ - readonly variables: {[key: string]: any} -} - -export type GitHubGraphQLClientResponse = { - /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ - readonly [key: string]: any -} - -interface IGitHubGraphQLClient { - graphql(request: GitHubGraphQLClientRequest): Promise -} - -type GitHubProjectRepositoryDataSourceConfig = { - readonly graphQlClient: IGitHubGraphQLClient - readonly organizationName: string -} - -export default class GitHubProjectRepositoryDataSource { - private graphQlClient: IGitHubGraphQLClient - private organizationName: string - - constructor(config: GitHubProjectRepositoryDataSourceConfig) { - this.graphQlClient = config.graphQlClient - this.organizationName = config.organizationName - } - - async getRepositories(): Promise { - const request = { - query: ` - query Repositories($searchQuery: String!) { - search(query: $searchQuery, type: REPOSITORY, first: 100) { - results: nodes { - ... on Repository { - name - owner { - login - } - defaultBranchRef { - name - target { - ...on Commit { - oid - } - } - } - configYml: object(expression: "HEAD:.shape-docs.yml") { - ...ConfigParts - } - configYaml: object(expression: "HEAD:.shape-docs.yaml") { - ...ConfigParts - } - branches: refs(refPrefix: "refs/heads/", first: 100) { - ...RefConnectionParts - } - tags: refs(refPrefix: "refs/tags/", first: 100) { - ...RefConnectionParts - } - } - } - } - } - - fragment RefConnectionParts on RefConnection { - edges { - node { - name - ... on Ref { - name - target { - ... on Commit { - oid - tree { - entries { - name - } - } - } - } - } - } - } - } - - fragment ConfigParts on GitObject { - ... on Blob { - text - } - } - `, - variables: { - searchQuery: `org:${this.organizationName} openapi in:name` - } - } - const response = await this.graphQlClient.graphql(request) - return response.search.results - } -} diff --git a/src/features/projects/data/IGitHubGraphQLClient.ts b/src/features/projects/data/IGitHubGraphQLClient.ts new file mode 100644 index 00000000..6e86d444 --- /dev/null +++ b/src/features/projects/data/IGitHubGraphQLClient.ts @@ -0,0 +1,14 @@ +export type GitHubGraphQLClientRequest = { + readonly query: string + /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ + readonly variables?: {[key: string]: any} +} + +export type GitHubGraphQLClientResponse = { + /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ + readonly [key: string]: any +} + +export default interface IGitHubGraphQLClient { + graphql(request: GitHubGraphQLClientRequest): Promise +} diff --git a/src/features/projects/data/IGitHubLoginDataSource.ts b/src/features/projects/data/IGitHubLoginDataSource.ts new file mode 100644 index 00000000..fa880775 --- /dev/null +++ b/src/features/projects/data/IGitHubLoginDataSource.ts @@ -0,0 +1,3 @@ +export default interface IGitHubLoginDataSource { + getLogins(): Promise +} diff --git a/src/features/projects/data/index.ts b/src/features/projects/data/index.ts index 936a7bd9..cf44de31 100644 --- a/src/features/projects/data/index.ts +++ b/src/features/projects/data/index.ts @@ -1,4 +1,6 @@ export { default as GitHubProjectDataSource } from "./GitHubProjectDataSource" -export { default as GitHubProjectRepositoryDataSource } from "./GitHubProjectRepositoryDataSource" -export * from "./GitHubProjectRepositoryDataSource" +export * from "./GitHubProjectDataSource" export { default as useProjects } from "./useProjects" +export type { default as IGitHubLoginDataSource } from "./IGitHubLoginDataSource" +export { default as GitHubLoginDataSource } from "./GitHubLoginDataSource" +export * from "./IGitHubGraphQLClient" diff --git a/src/features/projects/data/useProjects.ts b/src/features/projects/data/useProjects.ts index 8f1d6f11..a0b2cb16 100644 --- a/src/features/projects/data/useProjects.ts +++ b/src/features/projects/data/useProjects.ts @@ -1,7 +1,7 @@ "use client" import useSWR from "swr" -import { fetcher } from "../../../common" +import { fetcher } from "@/common" import { Project } from "../domain" type ProjectContainer = { projects: Project[] } diff --git a/src/features/projects/domain/CachingProjectDataSource.ts b/src/features/projects/domain/CachingProjectDataSource.ts index f47f4160..48c6fb01 100644 --- a/src/features/projects/domain/CachingProjectDataSource.ts +++ b/src/features/projects/domain/CachingProjectDataSource.ts @@ -2,16 +2,11 @@ import Project from "./Project" import IProjectDataSource from "./IProjectDataSource" import IProjectRepository from "./IProjectRepository" -type CachingProjectDataSourceConfig = { - readonly dataSource: IProjectDataSource - readonly repository: IProjectRepository -} - export default class CachingProjectDataSource implements IProjectDataSource { private dataSource: IProjectDataSource private repository: IProjectRepository - constructor(config: CachingProjectDataSourceConfig) { + constructor(config: { dataSource: IProjectDataSource, repository: IProjectRepository }) { this.dataSource = config.dataSource this.repository = config.repository } diff --git a/src/features/projects/domain/Project.ts b/src/features/projects/domain/Project.ts index fb05e3a1..172d057a 100644 --- a/src/features/projects/domain/Project.ts +++ b/src/features/projects/domain/Project.ts @@ -7,7 +7,9 @@ export const ProjectSchema = z.object({ displayName: z.string(), versions: VersionSchema.array(), imageURL: z.string().optional(), - url: z.string().optional() + url: z.string().optional(), + owner: z.string(), + ownerUrl: z.string() }) type Project = z.infer diff --git a/src/features/projects/domain/ProjectNavigator.ts b/src/features/projects/domain/ProjectNavigator.ts index 1fcd8933..aa87c239 100644 --- a/src/features/projects/domain/ProjectNavigator.ts +++ b/src/features/projects/domain/ProjectNavigator.ts @@ -9,16 +9,11 @@ export interface IRouter { replace(path: string): void } -type ProjectNavigatorConfig = { - readonly pathnameReader: IPathnameReader - readonly router: IRouter -} - export default class ProjectNavigator { private readonly pathnameReader: IPathnameReader private readonly router: IRouter - constructor(config: ProjectNavigatorConfig) { + constructor(config: { pathnameReader: IPathnameReader, router: IRouter }) { this.pathnameReader = config.pathnameReader this.router = config.router } @@ -39,32 +34,32 @@ export default class ProjectNavigator { return e.name == preferredSpecificationName }) if (candidateSpecification) { - this.router.push(`/${project.id}/${newVersion.id}/${candidateSpecification.id}`) + this.router.push(`/${project.owner}/${project.name}/${newVersion.id}/${candidateSpecification.id}`) } else { const firstSpecification = newVersion.specifications[0] - this.router.push(`/${project.id}/${newVersion.id}/${firstSpecification.id}`) + this.router.push(`/${project.owner}/${project.name}/${newVersion.id}/${firstSpecification.id}`) } } navigate( - projectId: string, + projectOwner: string, + projectName: string, versionId: string, specificationId: string ) { - this.router.push(`/${projectId}/${versionId}/${specificationId}`) + this.router.push(`/${projectOwner}/${projectName}/${versionId}/${specificationId}`) } - navigateIfNeeded( - selection: { - projectId?: string, - versionId?: string, - specificationId?: string - } - ) { - if (!selection.projectId || !selection.versionId || !selection.specificationId) { + navigateIfNeeded(selection: { + projectOwner?: string + projectName?: string + versionId?: string + specificationId?: string + }) { + if (!selection.projectOwner || !selection.projectName || !selection.versionId || !selection.specificationId) { return } - const path = `/${selection.projectId}/${selection.versionId}/${selection.specificationId}` + const path = `/${selection.projectOwner}/${selection.projectName}/${selection.versionId}/${selection.specificationId}` if (path !== this.pathnameReader.pathname) { this.router.replace(path) } diff --git a/src/features/projects/domain/ProjectRepository.ts b/src/features/projects/domain/ProjectRepository.ts index c55e9341..75ad4680 100644 --- a/src/features/projects/domain/ProjectRepository.ts +++ b/src/features/projects/domain/ProjectRepository.ts @@ -1,4 +1,4 @@ -import { IUserDataRepository, ZodJSONCoder } from "../../../common" +import { IUserDataRepository, ZodJSONCoder } from "@/common" import IProjectRepository from "./IProjectRepository" import Project, { ProjectSchema } from "./Project" @@ -6,15 +6,13 @@ interface IUserIDReader { getUserId(): Promise } -type Repository = IUserDataRepository - export default class ProjectRepository implements IProjectRepository { private readonly userIDReader: IUserIDReader - private readonly repository: Repository + private readonly repository: IUserDataRepository - constructor(userIDReader: IUserIDReader, repository: Repository) { - this.userIDReader = userIDReader - this.repository = repository + constructor(config: { userIDReader: IUserIDReader, repository: IUserDataRepository }) { + this.userIDReader = config.userIDReader + this.repository = config.repository } async get(): Promise { @@ -23,7 +21,12 @@ export default class ProjectRepository implements IProjectRepository { if (!string) { return undefined } - return ZodJSONCoder.decode(ProjectSchema.array(), string) + try { + return ZodJSONCoder.decode(ProjectSchema.array(), string) + } catch (err) { + console.error(err) + return undefined + } } async set(projects: Project[]): Promise { diff --git a/src/features/projects/domain/getSelection.ts b/src/features/projects/domain/getSelection.ts index b76559ad..087dc6f9 100644 --- a/src/features/projects/domain/getSelection.ts +++ b/src/features/projects/domain/getSelection.ts @@ -16,16 +16,18 @@ export default function getSelection({ if (path.startsWith("/")) { path = path.substring(1) } - const { projectId: _projectId, versionId, specificationId } = guessSelection(path) + const { owner: _owner, projectName: _projectName, versionId, specificationId } = guessSelection(path) // If no project is selected and the user only has a single project then we select that. - let projectId = _projectId - if (!projectId && projects.length == 1) { - projectId = projects[0].id + let owner = _owner + let projectName = _projectName + if (!projectName && projects.length == 1) { + owner = projects[0].owner + projectName = projects[0].name } - if (!projectId) { + if (!projectName) { return {} } - const project = projects.find(e => e.id == projectId) + const project = projects.find(e => e.owner == owner && e.name == projectName) if (!project) { return {} } @@ -34,7 +36,7 @@ export default function getSelection({ if (versionId) { version = project.versions.find(e => e.id == versionId) if (!version && specificationId && !isSpecificationIdFilename(specificationId)) { - // With the introduction of remote versions that are specified in the .shape-docs.yml + // With the introduction of remote versions that are specified in the .yml // configuration file, it has become impossible to tell if the last component in a URL // is the specification ID or if it belongs to the version ID. Previously, we required // specification IDs to end with either ".yml" or ".yaml" but that no longer makes @@ -65,20 +67,20 @@ export default function getSelection({ function guessSelection(pathname: string) { const comps = pathname.split("/") - if (comps.length == 0) { + if (comps.length == 0 || comps.length == 1) { return {} - } else if (comps.length == 1) { - return { projectId: comps[0] } - } else if (comps.length == 2) { - return { - projectId: comps[0], - versionId: comps[1] - } + } + const owner = comps[0] + const projectName = comps[1] + if (comps.length == 2) { + return { owner, projectName } + } else if (comps.length == 3) { + const versionId = comps[2] + return { owner, projectName, versionId } } else { - const projectId = comps[0] - const versionId = comps.slice(1, -1).join("/") + const versionId = comps.slice(2, -1).join("/") const specificationId = comps[comps.length - 1] - return { projectId, versionId, specificationId } + return { owner, projectName, versionId, specificationId } } } diff --git a/src/features/projects/domain/useProjectNavigator.ts b/src/features/projects/domain/useProjectNavigator.ts index e0f5fac9..ae2b5d43 100644 --- a/src/features/projects/domain/useProjectNavigator.ts +++ b/src/features/projects/domain/useProjectNavigator.ts @@ -1,3 +1,4 @@ +"use client" import { useRouter } from "next/navigation" import ProjectNavigator from "./ProjectNavigator" diff --git a/src/features/projects/view/ProjectsPage.tsx b/src/features/projects/view/ProjectsPage.tsx index be16f64c..298920de 100644 --- a/src/features/projects/view/ProjectsPage.tsx +++ b/src/features/projects/view/ProjectsPage.tsx @@ -1,4 +1,3 @@ -import { session } from "@/composition" import { ProjectRepository } from "../domain" import ClientProjectsPage from "./client/ProjectsPage" @@ -9,11 +8,9 @@ export default async function ProjectsPage({ projectRepository: ProjectRepository path: string }) { - const isGuest = await session.getIsGuest() const projects = await projectRepository.get() return ( diff --git a/src/features/projects/view/client/ProjectsPage.tsx b/src/features/projects/view/client/ProjectsPage.tsx index e218a26d..efd27800 100644 --- a/src/features/projects/view/client/ProjectsPage.tsx +++ b/src/features/projects/view/client/ProjectsPage.tsx @@ -18,11 +18,9 @@ import { } from "../../domain" export default function ProjectsPage({ - enableGitHubLinks, projects: serverProjects, path }: { - enableGitHubLinks: boolean projects?: Project[] path: string }) { @@ -33,19 +31,21 @@ export default function ProjectsPage({ const { projects: clientProjects, error, isLoading: isClientLoading } = useProjects() const projects = isClientLoading ? (serverProjects || []) : clientProjects const { project, version, specification } = getSelection({ projects, path }) + const siteName = process.env.NEXT_PUBLIC_SHAPE_DOCS_TITLE || "" useEffect(() => { updateWindowTitle({ storage: document, - defaultTitle: process.env.NEXT_PUBLIC_SHAPE_DOCS_TITLE, + defaultTitle: siteName, project, version, specification }) - }, [project, version, specification]) + }, [project, version, specification, siteName]) useEffect(() => { // Ensure the URL reflects the current selection of project, version, and specification. projectNavigator.navigateIfNeeded({ - projectId: project?.id, + projectOwner: project?.owner, + projectName: project?.name, versionId: version?.id, specificationId: specification?.id }) @@ -62,13 +62,13 @@ export default function ProjectsPage({ } const version = project.versions[0] const specification = version.specifications[0] - projectNavigator.navigate(project.id, version.id, specification.id) + projectNavigator.navigate(project.owner, project.name, version.id, specification.id) } const selectVersion = (versionId: string) => { projectNavigator.navigateToVersion(project!, versionId, specification!.name) } const selectSpecification = (specificationId: string) => { - projectNavigator.navigate(project!.id, version!.id, specificationId) + projectNavigator.navigate(project!.owner, project!.name, version!.id, specificationId) } const canCloseSidebar = project !== undefined const toggleSidebar = (isOpen: boolean) => { @@ -93,7 +93,6 @@ export default function ProjectsPage({ } toolbarTrailingItem={project && version && specification && void, onSelectSpecification: (specificationId: string) => void }) => { - const projectNameURL = enableGitHubLinks ? version.url || project.url : undefined + const projectNameURL = version.url || project.url return ( <> - + + / + - + / + + /> / - {enableGitHubLinks && specification.editURL && + {specification.editURL && - {text} + Test {text} ) } diff --git a/src/features/sidebar/view/SidebarHeader.tsx b/src/features/sidebar/view/SidebarHeader.tsx index 6d046eb3..5bc88a4d 100644 --- a/src/features/sidebar/view/SidebarHeader.tsx +++ b/src/features/sidebar/view/SidebarHeader.tsx @@ -3,6 +3,7 @@ import { Box, Typography } from "@mui/material" import Link from "next/link" export default function SidebarHeader() { + const siteName = process.env.NEXT_PUBLIC_SHAPE_DOCS_TITLE return ( Duck - Shape Docs + {siteName} diff --git a/src/features/user/view/SettingsList.tsx b/src/features/user/view/SettingsList.tsx index 765d9694..93fe7987 100644 --- a/src/features/user/view/SettingsList.tsx +++ b/src/features/user/view/SettingsList.tsx @@ -1,6 +1,21 @@ import { List, Button } from "@mui/material" import ThickDivider from "@/common/ui/ThickDivider" import DocumentationVisualizationPicker from "./DocumentationVisualizationPicker" +import { signOut } from "next-auth/react" + +const SettingsItem = ({ onClick, href, children }: { + onClick?: () => void; + href?: string; + children?: string; +}) => + const SettingsList = () => { return ( @@ -13,15 +28,9 @@ const SettingsList = () => { }}> - + ) } diff --git a/src/features/user/view/UserButton.tsx b/src/features/user/view/UserButton.tsx index f50fdce6..749d8e5a 100644 --- a/src/features/user/view/UserButton.tsx +++ b/src/features/user/view/UserButton.tsx @@ -1,5 +1,5 @@ import { useState } from "react" -import { UserProfile } from "@auth0/nextjs-auth0/client" +import { Session } from "next-auth" import { Avatar, Box, @@ -13,7 +13,7 @@ import { faEllipsis } from "@fortawesome/free-solid-svg-icons" import MenuItemHover from "@/common/ui/MenuItemHover" import SettingsList from "./SettingsList" -const UserButton = ({ user }: { user: UserProfile }) => { +const UserButton = ({ session }: { session: Session }) => { const [popoverAnchorElement, setPopoverAnchorElement] = useState(null) const handlePopoverClick = (event: React.MouseEvent) => { setPopoverAnchorElement(event.currentTarget) @@ -23,6 +23,7 @@ const UserButton = ({ user }: { user: UserProfile }) => { } const isPopoverOpen = Boolean(popoverAnchorElement) const id = isPopoverOpen ? "settings-popover" : undefined + const user = session.user return ( <> { > - {user.picture && - + {user && + } {user && - {user.name} + {user.name || user.email} } diff --git a/src/features/user/view/UserFooter.tsx b/src/features/user/view/UserFooter.tsx index ef69430e..a5b750c6 100644 --- a/src/features/user/view/UserFooter.tsx +++ b/src/features/user/view/UserFooter.tsx @@ -1,14 +1,15 @@ -import { useUser } from "@auth0/nextjs-auth0/client" +import { useSession } from "next-auth/react" import { List, ListItem } from "@mui/material" import UserButton from "./UserButton" import UserSkeleton from "./UserSkeleton" const UserFooter = () => { - const { user, isLoading } = useUser() + const { data: session, status } = useSession() + const isLoading = status == "loading" return ( - {!isLoading && user && } + {!isLoading && session && } {isLoading && } diff --git a/src/middleware.ts b/src/middleware.ts deleted file mode 100644 index 1bd4ede1..00000000 --- a/src/middleware.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { withMiddlewareAuthRequired } from "@auth0/nextjs-auth0/edge" - -export const config = { - matcher: "/((?!api/hooks|api/auth/logout|api/auth/forceLogout|api/health|_next/static|_next/image|images|favicon.ico).*)" -} - -export default withMiddlewareAuthRequired() diff --git a/tsconfig.json b/tsconfig.json index 6bab5d4c..a851ef76 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -13,11 +13,10 @@ "isolatedModules": true, "jsx": "preserve", "incremental": true, - "plugins": [ - { - "name": "next" - } - ], + "plugins": [{ + "name": "next" + }], + "baseUrl": ".", "paths": { "@/*": ["./src/*"] } diff --git a/types/@next-auth.d.ts b/types/@next-auth.d.ts new file mode 100644 index 00000000..e933af28 --- /dev/null +++ b/types/@next-auth.d.ts @@ -0,0 +1,12 @@ +import NextAuth from "next-auth" + +declare module "next-auth" { + interface Session { + readonly user: { + readonly id: string + readonly email: string + readonly name?: string + readonly image?: string + } + } +} diff --git a/types/env.d.ts b/types/env.d.ts deleted file mode 100644 index 290e4fe3..00000000 --- a/types/env.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -namespace NodeJS { - interface ProcessEnv { - NEXT_PUBLIC_SHAPE_DOCS_TITLE: string - SHAPE_DOCS_BASE_URL: string - AUTH0_SECRET: string - AUTH0_BASE_URL: string - AUTH0_ISSUER_BASE_URL: string - AUTH0_CLIENT_ID: string - AUTH0_CLIENT_SECRET: string - AUTH0_MANAGEMENT_DOMAIN: string - AUTH0_MANAGEMENT_CLIENT_ID: string - AUTH0_MANAGEMENT_CLIENT_SECRET: string - GITHUB_CLIENT_ID: string - GITHUB_CLIENT_SECRET: string - GITHUB_APP_ID: string - GITHUB_PRIVATE_KEY_BASE_64: string - GITHUB_WEBHOOK_SECRET: string - GITHUB_WEBHOK_REPOSITORY_ALLOWLIST?: string - GITHUB_WEBHOK_REPOSITORY_DISALLOWLIST?: string - GITHUB_ORGANIZATION_NAME: string - REDIS_URL: string - DATABASE_URL: string - } -} diff --git a/update-github-connection.sh b/update-github-connection.sh deleted file mode 100755 index 4fad95eb..00000000 --- a/update-github-connection.sh +++ /dev/null @@ -1,51 +0,0 @@ -GITHUB_CONNECTION_NAME="github" -GITHUB_CONNECTION_DISPLAY_NAME="GitHub" -GITHUB_CONNECTION_ICON_URL="https://upload.wikimedia.org/wikipedia/commons/thumb/c/c2/GitHub_Invertocat_Logo.svg/400px-GitHub_Invertocat_Logo.svg.png" - -if [ -z ${AUTH0_MANAGEMENT_DOMAIN} ]; then - echo "AUTH0_MANAGEMENT_DOMAIN must be set to the Auth0 domain, e.g. shape-docs.eu.auth0.com" - exit 1 -fi -if [ -z ${AUTH0_MANAGEMENT_CLIENT_ID} ]; then - echo "AUTH0_MANAGEMENT_CLIENT_ID must be to the client ID of the app used to communicate with Auth0's Management API." - exit 1 -fi -if [ -z ${AUTH0_MANAGEMENT_CLIENT_SECRET} ]; then - echo "AUTH0_MANAGEMENT_CLIENT_SECRET must be to the client secret of the app used to communicate with Auth0's Management API." - exit 1 -fi - -# Get an access token for the Management API. -TOKEN_RESPONSE=$( - curl -s --request POST \ - --url "https://${AUTH0_MANAGEMENT_DOMAIN}/oauth/token" \ - --header "Content-Type: application/x-www-form-urlencoded" \ - --data grant_type=client_credentials \ - --data "client_id=${AUTH0_MANAGEMENT_CLIENT_ID}" \ - --data "client_secret=${AUTH0_MANAGEMENT_CLIENT_SECRET}" \ - --data "audience=https://${AUTH0_MANAGEMENT_DOMAIN}/api/v2/" -) -TOKEN=$(echo $TOKEN_RESPONSE | jq -r .access_token) - -# Fetch all connections. -CONNECTIONS_RESPONSE=$( - curl -s --request GET \ - --url "https://${AUTH0_MANAGEMENT_DOMAIN}/api/v2/connections" \ - --header "Authorization: Bearer ${TOKEN}" -) -SAFE_CONNECTIONS_RESPONSE=${CONNECTIONS_RESPONSE//\\n/\\\\n} - -# Modify the GitHub Connection. -GITHUB_CONNECTION_ID=$( - echo $SAFE_CONNECTIONS_RESPONSE | jq -r ".[] | select(.name == \"${GITHUB_CONNECTION_NAME}\") | .id" -) -GITHUB_CONNECTION_OPTIONS=$( - echo $SAFE_CONNECTIONS_RESPONSE | jq -r ".[] | select(.name == \"${GITHUB_CONNECTION_NAME}\") | .options += {\"display_name\": \"${GITHUB_CONNECTION_DISPLAY_NAME}\", \"icon_url\": \"${GITHUB_CONNECTION_ICON_URL}\"} | .options" -) - -# Post the updated options. -curl -s --request PATCH \ - --url "https://${AUTH0_MANAGEMENT_DOMAIN}/api/v2/connections/${GITHUB_CONNECTION_ID}" \ - --header "Content-Type: application/json" \ - --header "Authorization: Bearer ${TOKEN}" \ - --data "{ \"options\": ${GITHUB_CONNECTION_OPTIONS} }"