diff --git a/.decisions/3-Peer-to-Peer-Signaling.md b/.decisions/3-Peer-to-Peer-Signaling.md new file mode 100644 index 0000000..380852a --- /dev/null +++ b/.decisions/3-Peer-to-Peer-Signaling.md @@ -0,0 +1,60 @@ +# Overview + +Communicating across platforms in a decentralized manner + +## Decisions + +- Limit dependency on WebSockets to signaling +- Allow bidirectional communication between peers +- Enforce locality of device? + +## Implementation + +A WebSocket Service should establish the SDP handshake and emit ICE candidates for WebRTC clients. + +This implementation should replace Wallet Connect with the following sequence +```mermaid +sequenceDiagram + participant Website + participant Server + participant Wallet + Note over Website, Wallet: Link devices + Website->>Server: GET Challenge Message + Server->>Website: Send Challenge Message + + Website-->>Website: Display QR Connect Nonce + Website->>Server: Subscribe to 'wss:link' + Wallet->>Website: Scan QR Code + Wallet->>Server: POST Nonce + Signature + Answer + Server-->>Server: Validate Signature + Server-->>Website: HTTPOnly Session + Server->>Wallet: Ok Response + HTTPOnly Session + Server->>Website: Emit to `wss:link` client + Note over Website, Wallet: Passkeys/FIDO2 + Website-->>Website: Continue FIDO2 Flow + Wallet-->>Wallet: Continue FIDO2 Flow + Note over Website, Wallet: Signaling Peer Offer/Answer + Website-->>Server: Subscribe to 'wss:answer-${address}' + Wallet-->>Server: Subscribe to 'wss:offer-${address}' + + Website-->>Website: Create Peer Offer & DataChannel + Website-->>Server: POST Offer + Server-->>Wallet: Emit Offer + + Wallet-->>Wallet: Create Peer Answer with Offer & DataChannel + + Wallet-->>Server: POST Answer + Server-->>Website: Emit Answer + Website-->>Website: Set Remote SDP + Website-->>Website: Discover ICE Candidates + Website->>Server: Emit candidates to `wss:offer-${address}` + Server->>Wallet: Emit candidates to `wss:offer-${address}` + Wallet-->>Wallet: Set Candidates + Wallet-->>Wallet: Discover ICE Candidates + Wallet->>Server: Emit candidates to `wss:answer-${address}` + Server->>Website: Emit to `wss:answer` + Website->>Website: Set Candidates + +``` + +*Note: This process may be deprecated in the future in favor of `libp2p` which allows for an agnostic discovery layer and also supports the WebRTC transport diff --git a/.env.docker b/.env.docker index 3b96aaa..f19032b 100644 --- a/.env.docker +++ b/.env.docker @@ -17,8 +17,8 @@ REDIS_PASSWORD= # FIDO2 RP_NAME=Algorand Foundation FIDO2 Server -HOSTNAME=fido-home.telluric.guru -ORIGIN=https://fido-home.telluric.guru +HOSTNAME=catfish-pro-wolf.ngrok-free.app +ORIGIN=https://catfish-pro-wolf.ngrok-free.app ANDROID_SHA256HASH=47:CC:4E:EE:B9:50:59:A5:8B:E0:19:45:CA:0A:6D:59:16:F9:A9:C2:96:75:F8:F3:64:86:92:46:2B:7D:5D:5C ANDROID_PACKAGENAME=foundation.algorand.demo diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml new file mode 100644 index 0000000..e00b40c --- /dev/null +++ b/.github/workflows/CI.yml @@ -0,0 +1,23 @@ +name: CI +on: [pull_request] +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [ 18.x, 20.x ] + steps: + - name: Checkout + uses: actions/checkout@master + - name: Use Node.js + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - name: Install Dependencies + run: npm install + - name: Run Build + run: npm run build + - name: Lint Codebase + run: npm run lint + - name: Unit Tests with Coverage + run: npm run test:cov diff --git a/.gitignore b/.gitignore index dbb2061..08b11ce 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +swagger-codegen-cli.jar +ngrok.yml + .data .idea diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2cb9cb8..146feaa 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,54 +1,3 @@ -# Overview +# Overview[WIP] This is a guide on how to get the project running and how to contribute - - -## Getting started - -### Prerequisites -- Node.js 20 -- Docker - -#### Clone the project - -```bash -git clone git@github.com:algorandfoundation/liquid-auth.git && cd liquid-auth -``` - -#### Install package dependencies - -```bash -npm install -``` - -#### Start services - -```bash -docker-compose up -d -``` - -WebAuthn requires a secure context (HTTPS) to work and this will not allow you to test the FIDO2 feature in your local machine. - -### NGROK - -Sign up for a free account at [ngrok](https://ngrok.com/) and install the ngrok package. -Configure a Static Domain for your ngrok account and update the [.env](services/liquid-auth-api-js/README.md) file with the following keys with the values from ngrok: - -```bash -HOSTNAME=example-static-domain.ngrok-free.app -ORIGIN=https://example-static-domain.ngrok-free.app -``` - -#### Run the ngrok proxy - -```bash -ngrok http --domain=example-static-domain.ngrok-free.app 3000 -``` - -#### Run the Authentication Service -```bash -npm run dev -``` - -Navigate to the ngrok URL in your browser to test the FIDO2 feature. - diff --git a/Dockerfile b/Dockerfile index 7ca8c1f..6422067 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,14 +8,21 @@ RUN npm run build FROM node:20-alpine +# App Files COPY --from=BUILDER ./node_modules ./node_modules COPY --from=BUILDER ./package.json ./package.json +COPY --from=BUILDER ./package-lock.json ./package-lock.json +# Client Files +COPY --from=BUILDER ./clients ./clients +# Service Files COPY --from=BUILDER ./services/liquid-auth-api-js/assetlinks.json ./services/liquid-auth-api-js/assetlinks.json COPY --from=BUILDER ./services/liquid-auth-api-js/dist ./services/liquid-auth-api-js/dist -COPY --from=BUILDER ./services/liquid-auth-api-js/views ./services/liquid-auth-api-js/views -COPY --from=BUILDER ./services/liquid-auth-api-js/public ./services/liquid-auth-api-js/public +COPY --from=BUILDER ./services/liquid-auth-api-js/bin ./services/liquid-auth-api-js/bin +COPY --from=BUILDER ./services/liquid-auth-api-js/.env.template ./services/liquid-auth-api-js/.env.template COPY --from=BUILDER ./services/liquid-auth-api-js/package.json ./services/liquid-auth-api-js/package.json +RUN npm ci --production + # Expose the port on which the app will run EXPOSE 3000 diff --git a/README.md b/README.md index 2abd806..6b92382 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,66 @@ This project holds the standard FIDO2 api endpoints and the Proof of Knowledge f The api is a stateful session-based architecture with endpoint guards. A user must prove ownership of a private key to associate PublicKeyCredentials +## Getting started + +### Prerequisites +- Node.js 20 +- Docker + +#### Clone the project + +```bash +git clone git@github.com:algorandfoundation/liquid-auth.git && cd liquid-auth +``` + +#### Install package dependencies + +WebAuthn requires a secure context (HTTPS) to work and this will not allow you to test the FIDO2 feature in your local machine. + +### NGROK + +Sign up for a free account at [ngrok](https://ngrok.com/) and install the ngrok package. +Configure a Static Domain for your ngrok account and update the [.env](services/liquid-auth-api-js/README.md) file with the following keys with the values from ngrok: + + +#### Configure NGROK + +Add a `ngrok.yml` configuration to the root directory. + +##### Example Configuration +```yaml +version: 2 +authtoken: +tunnels: + website: + addr: liquid-demo:5173 + proto: http + domain: + +``` +*Make sure to update the `authtoken` and `domain` in the `ngrok.yml` file with your ngrok details.* + +#### Update the Service's .docker.env file + +```bash +HOSTNAME= +ORIGIN=https:// +``` + +### Start services + +Run the following command to start the backend: + +```bash +docker-compose up -d +``` + +Navigate to the ngrok URL in your browser to test the FIDO2 feature. + + ## Using the app -#### Install the [Android client]() to your device and navigate to https://nest-fido2.onrender.com/. +#### Install the [Android client](https://github.com/awesome-algorand/android-authentication-client) to your device. ![Step-1.png](.docs%2FStep-1.png) diff --git a/Vite.Dockerfile b/Vite.Dockerfile new file mode 100644 index 0000000..1a8abe6 --- /dev/null +++ b/Vite.Dockerfile @@ -0,0 +1,12 @@ +FROM node:20-alpine + +ADD . . + +RUN npm install + +RUN npm run build + + +EXPOSE 5173 + +CMD ["npm", "run", "dev:ui"] diff --git a/client-gen.sh b/client-gen.sh new file mode 100755 index 0000000..d32586d --- /dev/null +++ b/client-gen.sh @@ -0,0 +1,12 @@ + + +CODEGEN=swagger-codegen-cli.jar +if [ -f $CODEGEN ]; then + echo "Codegen already exists" +else + echo "Downloading codegen" + wget https://repo1.maven.org/maven2/io/swagger/codegen/v3/swagger-codegen-cli/3.0.52/swagger-codegen-cli-3.0.52.jar -O swagger-codegen-cli.jar +fi + +java -jar swagger-codegen-cli.jar generate -i http://localhost:3000/api-json -l typescript-fetch -o clients/liquid-auth-client-js/src/client +java -jar swagger-codegen-cli.jar generate -i http://localhost:3000/api-json -l kotlin-client -o clients/liquid-auth-client-kotlin diff --git a/clients/README.md b/clients/README.md new file mode 100644 index 0000000..39b6d7f --- /dev/null +++ b/clients/README.md @@ -0,0 +1,59 @@ +# Overview + +Client JSON-RPC interfaces are generated from OpenAPI 3.0 specifications. +All clients should mirror the same interfaces and include the same parameters (as much as possible). + +```typescript +interface SignalClient { + readonly url: string; // Origin of the service + type: "offer" | "answer" // Type of client + peerClient: RTCPeerConnection | PeerClient // Native WebRTC Wrapper/Interface + socket: Socket // The socket to the service + + readonly authenticated: boolean; // State of authentication + readonly requestId?: string; // The current request being signaled + + /** + * Generate a Request ID + */ + generateRequestId(): any; + + /** + * Top level Friendly interface for signaling + * @param args + */ + peer(requestId: any, type: 'offer' | 'answer', config?: RTCConfiguration): Promise; + + /** + * Link a Request ID to this client + * @param args + */ + link(...args: any[]): Promise; + + /** + * Wait for a desciption signal + * @param args + */ + signal(...args: any[]): Promise; + + /** + * Terminate the signaling session + */ + close(): void + + + /** + * Listen to Interface events + * @param args + */ + on(...args: any[]): void; + + /** + * Emit an event to the interface + * @param channel + * @param callback + */ + emit(channel: string, callback: (...args: any[])=>void) + +} +``` diff --git a/clients/liquid-auth-client-js/.eslintrc.json b/clients/liquid-auth-client-js/.eslintrc.json new file mode 100644 index 0000000..14bfcde --- /dev/null +++ b/clients/liquid-auth-client-js/.eslintrc.json @@ -0,0 +1,22 @@ +{ + "env": { + "browser": true, + "es2021": true, + "node": true + }, + "parserOptions": { + "project": "tsconfig.json", + "sourceType": "module" + }, + "plugins": [ + "@typescript-eslint/eslint-plugin", + "eslint-plugin-tsdoc" + ], + "extends": [ + "plugin:@typescript-eslint/recommended", + "plugin:prettier/recommended" + ], + "rules": { + "@typescript-eslint/no-explicit-any": "warn" + } +} diff --git a/clients/liquid-auth-client-js/.gitignore b/clients/liquid-auth-client-js/.gitignore index 8813e9f..e1be502 100644 --- a/clients/liquid-auth-client-js/.gitignore +++ b/clients/liquid-auth-client-js/.gitignore @@ -1,4 +1,5 @@ lib +docs # Logs logs diff --git a/clients/liquid-auth-client-js/.prettierrc b/clients/liquid-auth-client-js/.prettierrc new file mode 100644 index 0000000..dcb7279 --- /dev/null +++ b/clients/liquid-auth-client-js/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "trailingComma": "all" +} \ No newline at end of file diff --git a/clients/liquid-auth-client-js/package.json b/clients/liquid-auth-client-js/package.json index 8601e68..cd5ab60 100644 --- a/clients/liquid-auth-client-js/package.json +++ b/clients/liquid-auth-client-js/package.json @@ -21,29 +21,43 @@ "default": "./lib/connect.js", "types": "./lib/connect.d.ts" }, - "./encoding": { - "default": "./lib/encoding.js", - "types": "./lib/encoding.d.ts" + "./signal": { + "default": "./lib/signal.js", + "types": "./lib/signal.d.ts" + }, + "./errors": { + "default": "./lib/errors.js", + "types": "./lib/errors.d.ts" } }, "scripts": { "dev": "tsc --watch", "build": "tsc", - "preinstall": "npm run build", - "test": "tsc && c8 node --test ./tests/*.test.js" + "build:docs": "typedoc --plugin typedoc-plugin-markdown --out docs src", + "lint": "eslint --fix src", + "test": "tsc && node --test ./tests/*.spec.js", + "test:cov": "tsc && c8 node --test ./tests/*.spec.js" }, "author": "", "license": "MIT", "devDependencies": { "@types/qrcode": "^1.5.5", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^7.6.0", + "algosdk": "^2.7.0", "c8": "^9.1.0", - "typescript": "^5.3.3" + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-tsdoc": "^0.2.17", + "typedoc": "^0.25.13", + "typedoc-plugin-markdown": "^4.0.0-next.55", + "typescript": "^5.4.5" }, "dependencies": { - "qr-code-styling": "^1.6.0-rc.1" - }, - "peerDependencies": { - "algosdk": "^2.7.0", + "@liquid/core": "^1.0.0", + "eventemitter3": "^5.0.1", + "qr-code-styling": "^1.6.0-rc.1", "tweetnacl": "^1.0.3" } } diff --git a/clients/liquid-auth-client-js/public/favicon.svg b/clients/liquid-auth-client-js/public/favicon.svg new file mode 100644 index 0000000..cba5ac1 --- /dev/null +++ b/clients/liquid-auth-client-js/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/clients/liquid-auth-client-js/src/assertion.ts b/clients/liquid-auth-client-js/src/assertion.ts index d58771d..29ac125 100644 --- a/clients/liquid-auth-client-js/src/assertion.ts +++ b/clients/liquid-auth-client-js/src/assertion.ts @@ -1,88 +1,207 @@ -import {fromBase64Url, toBase64URL} from "./encoding.js"; -import {DEFAULT_FETCH_OPTIONS} from './constants.js' +/** + * This module is only for browser and currently not used in the project. + * However, it could be useful for extension wallets or other browser-based wallets. + */ +import { fromBase64Url, toBase64URL } from '@liquid/core/encoding'; +import { DEFAULT_FETCH_OPTIONS } from './constants.js'; +import { + isValidResponse, + INVALID_INPUT_MESSAGE, + CREDENTIAL_ACTION_FAILURE, +} from './errors.js'; -type SerializedAuthenticatorAssertionResponse = { - [k: string]: string - clientDataJSON: string, - authenticatorData: string, - signature: string, - userHandle: string, +export type EncodedPublicKeyCredentialDescriptor = + PublicKeyCredentialDescriptor & { + id: string; + }; +export type EncodedPublicKeyCredentialRequestOptions = + PublicKeyCredentialRequestOptions & { + allowCredentials?: EncodedPublicKeyCredentialDescriptor[]; + challenge: string; + }; +/** + * Fetch Assertion Options + * + * POST Authenticator Selector to the REST API + * to receive the PublicKeyCredentialRequestOptions + * + * @param origin + * @param credId + * @todo: Generate Typed JSON-RPC clients from Swagger/OpenAPI + */ +export async function fetchAssertionRequestOptions( + origin: string, + credId: string, +) { + if (typeof origin !== 'string' || typeof credId !== 'string') { + throw new TypeError(INVALID_INPUT_MESSAGE); + } + return await fetch(`/assertion/request/${credId}`, { + ...DEFAULT_FETCH_OPTIONS, + }).then((r) => { + if (!isValidResponse(r)) { + throw new Error(r.statusText); + } + return r.json() as Promise; + }); } -type SerializedCredential = { - [k: string]: string | SerializedAuthenticatorAssertionResponse - id: string - type: string - response: SerializedAuthenticatorAssertionResponse - rawId: string +/** + * Decode Assertion Request Options + * + * @param options + */ +export function decodeAssertionRequestOptions( + options: EncodedPublicKeyCredentialRequestOptions, +) { + if (typeof options !== 'object' || typeof options.challenge !== 'string') + throw new TypeError(INVALID_INPUT_MESSAGE); + + const decodedOptions: PublicKeyCredentialRequestOptions = { ...options }; + decodedOptions.challenge = fromBase64Url(options.challenge as string); + decodedOptions.allowCredentials = + options.allowCredentials?.map( + (cred: EncodedPublicKeyCredentialDescriptor) => { + return { + ...cred, + id: fromBase64Url(cred.id as string), + } as PublicKeyCredentialDescriptor; + }, + ) || []; + return decodedOptions; } -export async function assertion(credId: string) { - console.log( - `%cFETCHING: %c/assertion/request/${credId}`, - 'color: yellow', - 'color: cyan', - ); - const options = await fetch(`/assertion/request/${credId}`, { - ...DEFAULT_FETCH_OPTIONS, - }).then((r) => r.json()); +export type EncodedAuthenticatorAssertionResponse = { + [k: string]: string; + clientDataJSON: string; + authenticatorData: string; + signature: string; + userHandle: string; +}; +export type EncodedCredential = { + [k: string]: string | EncodedAuthenticatorAssertionResponse; + id: string; + type: string; + response: EncodedAuthenticatorAssertionResponse; + rawId: string; +}; - if (options.allowCredentials.length === 0) { - console.info('No registered credentials found.'); - return Promise.resolve(null); +/** + * Fetch Assertion Response + * + * POST an Authenticator Assertion Response to the REST API + * + * @param origin + * @param credential + * @todo: Generate Typed JSON-RPC clients from Swagger/OpenAPI + */ +export async function fetchAssertionResponse( + origin: string, + credential: EncodedCredential, +) { + if (typeof origin !== 'string' || typeof credential !== 'object') { + // TODO: instance check for SerializedCredential + throw new TypeError(INVALID_INPUT_MESSAGE); + } + return await fetch(`${origin}/assertion/response`, { + ...DEFAULT_FETCH_OPTIONS, + body: JSON.stringify(credential), + }).then((r) => { + if (!isValidResponse(r)) { + throw new Error(r.statusText); } + return r.json(); + }); +} +/** + * + * @param response + */ +export function encodeAuthenticatorAssertionResponse( + response: AuthenticatorAssertionResponse & Record, +) { + return Object.keys( + AuthenticatorAssertionResponse.prototype, + ).reduce( + (prev, curr) => { + prev[curr] = toBase64URL(response[curr]); + return prev; + }, + { + clientDataJSON: toBase64URL(response.clientDataJSON), + } as EncodedAuthenticatorAssertionResponse, + ); +} - options.challenge = fromBase64Url(options.challenge); - - for (const cred of options.allowCredentials) { - cred.id = fromBase64Url(cred.id); - } +/** + * + * @param credential + */ +export function encodeCredential( + credential: PublicKeyCredential, +): EncodedCredential { + if (!credential) throw new Error(INVALID_INPUT_MESSAGE); + const response = credential.response as AuthenticatorAssertionResponse & + Record; + if (!response) throw new Error(CREDENTIAL_ACTION_FAILURE); + return { + id: credential.id, + type: credential.type, + rawId: toBase64URL(credential.rawId), + response: encodeAuthenticatorAssertionResponse(response), + }; +} +/** + * Assert a known credential + * @param origin + * @param credId + * @param debug + */ +export async function assertion( + origin: string, + credId: string, + debug: boolean = false, +) { + if (typeof credId !== 'string') { + throw new TypeError(INVALID_INPUT_MESSAGE); + } + debug && console.log( - '%cGET_CREDENTIAL:%c navigator.credentials.get', - 'color: yellow', - 'color: cyan', - options, + `%cFETCHING: %c/assertion/request/${credId}`, + 'color: yellow', + 'color: cyan', ); - const cred = (await navigator.credentials.get({ - publicKey: options, - })) as PublicKeyCredential; - if(!cred) throw new Error('Could not get credential') - const response = cred.response as AuthenticatorAssertionResponse & {[k: string]: ArrayBuffer} - const credential: SerializedCredential = { - id: cred.id, - type: cred.type, - rawId: toBase64URL(cred.rawId), - response: Object.keys(response).reduce((prev, curr)=>{ - prev[curr] = toBase64URL(response[curr]) - return prev - }, {} as SerializedAuthenticatorAssertionResponse) - }; - credential.id = cred.id; - credential.type = cred.type; - credential.rawId = toBase64URL(cred.rawId); + const options = await fetchAssertionRequestOptions(origin, credId).then( + decodeAssertionRequestOptions, + ); - if (cred.response) { + if (options.allowCredentials.length === 0) { + debug && console.info('No registered credentials found.'); + return null; + } - const clientDataJSON = toBase64URL(response.clientDataJSON); - const authenticatorData = toBase64URL(response.authenticatorData); - const signature = toBase64URL(response.signature); - const userHandle = toBase64URL(response.userHandle || new Uint8Array()); - credential.response = { - clientDataJSON, - authenticatorData, - signature, - userHandle, - }; - } + debug && console.log( - '%cPOSTING: %c/assertion/response', - 'color: yellow', - 'color: cyan', - credential, + '%cGET_CREDENTIAL:%c navigator.credentials.get', + 'color: yellow', + 'color: cyan', + options, ); - return await fetch(`/assertion/response`, { - ...DEFAULT_FETCH_OPTIONS, - body: JSON.stringify(credential), - }); + + const credential = await navigator.credentials + .get({ + publicKey: options, + }) + .then(encodeCredential); + + debug && + console.log( + '%cPOSTING: %c/assertion/response', + 'color: yellow', + 'color: cyan', + credential, + ); + + return fetchAssertionResponse(origin, credential); } diff --git a/clients/liquid-auth-client-js/src/attestation.ts b/clients/liquid-auth-client-js/src/attestation.ts index f51030e..04385af 100644 --- a/clients/liquid-auth-client-js/src/attestation.ts +++ b/clients/liquid-auth-client-js/src/attestation.ts @@ -1,27 +1,32 @@ -import {fromBase64Url, toBase64URL} from "./encoding.js"; -import {DEFAULT_FETCH_OPTIONS} from './constants.js' +/** + * This module is only for browser and currently not used in the project. + * However, it could be useful for extension wallets or other browser-based wallets. + */ +import { fromBase64Url, toBase64URL } from '@liquid/core/encoding'; +import { DEFAULT_FETCH_OPTIONS } from './constants.js'; +import { isValidResponse } from './errors.js'; -const DEFAULT_ATTESTATION_OPTIONS = { - attestationType: 'none', - authenticatorSelection: { - authenticatorAttachment: 'platform', - userVerification: 'required', - requireResidentKey: false, - }, -} -export type EncodedAuthenticatorAttestationResponse = { - [k: string]: string - clientDataJSON: string, - attestationObject: string, - signature?: string, - userHandle?: string, +export const DEFAULT_ATTESTATION_OPTIONS = { + attestationType: 'none', + authenticatorSelection: { + authenticatorAttachment: 'platform', + userVerification: 'required', + requireResidentKey: false, + }, +}; +export interface EncodedAuthenticatorAttestationResponse { + [k: string]: string | undefined; + clientDataJSON: string; + attestationObject: string; + signature?: string; + userHandle?: string; } -export type EncodedAttestationCredential = { - [k: string]: string | EncodedAuthenticatorAttestationResponse - id: string - type: string - response: EncodedAuthenticatorAttestationResponse - rawId: string +export interface EncodedAttestationCredential { + [k: string]: string | EncodedAuthenticatorAttestationResponse; + id: string; + type: string; + response: EncodedAuthenticatorAttestationResponse; + rawId: string; } /** @@ -29,49 +34,33 @@ export type EncodedAttestationCredential = { * * @param credential - PublicKeyCredential from navigator.credentials.create */ -function encodeAttestationCredential(credential: PublicKeyCredential): EncodedAttestationCredential { - const response = credential.response as AuthenticatorAttestationResponse - return { - id: credential.id, - rawId: toBase64URL(credential.rawId), - type: credential.type, - response: { - clientDataJSON: toBase64URL(response.clientDataJSON), - attestationObject: toBase64URL(response.attestationObject) - } - }; -} - -/** - * Decoding an Encoded Attestation Credential - * @param credential - Encoded Attestation Credential - */ -function decodeAttestationCredential(credential: EncodedAttestationCredential){ - return { - id: credential.id, - rawId: fromBase64Url(credential.rawId), - type: credential.type, - response: { - clientDataJSON: fromBase64Url(credential.response.clientDataJSON), - attestationObject: fromBase64Url(credential.response.attestationObject) - } - } +function encodeAttestationCredential( + credential: PublicKeyCredential, +): EncodedAttestationCredential { + const response = credential.response as AuthenticatorAttestationResponse; + return { + id: credential.id, + rawId: toBase64URL(credential.rawId), + type: credential.type, + response: { + clientDataJSON: toBase64URL(response.clientDataJSON), + attestationObject: toBase64URL(response.attestationObject), + }, + }; } -function decodeAttestationOptions(options){ - const attestationOptions = {...options} - attestationOptions.user.id = fromBase64Url(options.user.id); - attestationOptions.challenge = fromBase64Url( - options.challenge, - ); +function decodeAttestationOptions(options) { + const attestationOptions = { ...options }; + attestationOptions.user.id = fromBase64Url(options.user.id); + attestationOptions.challenge = fromBase64Url(options.challenge); - if (attestationOptions.excludeCredentials) { - for (let cred of attestationOptions.excludeCredentials) { - cred.id = fromBase64Url(cred.id); - } + if (attestationOptions.excludeCredentials) { + for (const cred of attestationOptions.excludeCredentials) { + cred.id = fromBase64Url(cred.id); } + } - return attestationOptions + return attestationOptions; } /** @@ -79,12 +68,16 @@ function decodeAttestationOptions(options){ * * @param origin * @param options + * @todo: Generate Typed JSON-RPC clients from Swagger/OpenAPI */ -export async function fetchAttestationRequest(origin: string, options = DEFAULT_ATTESTATION_OPTIONS){ - return fetch(`${origin}/attestation/request`, { - ...DEFAULT_FETCH_OPTIONS, - body: JSON.stringify(options), - }); +export async function fetchAttestationRequest( + origin: string, + options = DEFAULT_ATTESTATION_OPTIONS, +) { + return await fetch(`${origin}/attestation/request`, { + ...DEFAULT_FETCH_OPTIONS, + body: JSON.stringify(options), + }); } /** @@ -92,12 +85,19 @@ export async function fetchAttestationRequest(origin: string, options = DEFAULT_ * * @param origin * @param credential + * @todo: Generate Typed JSON-RPC clients from Swagger/OpenAPI */ -export async function fetchAttestationResponse(origin: string, credential: EncodedAttestationCredential){ - return fetch(`${origin}/attestation/response`, { - ...DEFAULT_FETCH_OPTIONS, - body: JSON.stringify(credential), - }); +export async function fetchAttestationResponse( + origin: string, + credential: EncodedAttestationCredential, +) { + return await fetch(`${origin}/attestation/response`, { + ...DEFAULT_FETCH_OPTIONS, + body: JSON.stringify(credential), + }).then((r) => { + if (!isValidResponse(r)) throw new Error(r.statusText); + return r.json(); + }); } /** @@ -108,24 +108,28 @@ export async function fetchAttestationResponse(origin: string, credential: Encod * - The server creates a challenge and sends it to the client * - The client creates a credential and sends it to the server * - * @return {Promise} */ export async function attestation( - origin: string, - options = DEFAULT_ATTESTATION_OPTIONS, + origin: string, + options = DEFAULT_ATTESTATION_OPTIONS, ) { - const encodedAttestationOptions = await fetchAttestationRequest(origin, options) - .then((r) => r.json()); + const encodedAttestationOptions = await fetchAttestationRequest( + origin, + options, + ).then((r) => { + if (!isValidResponse(r)) throw new Error(r.statusText); + return r.json(); + }); - if (typeof encodedAttestationOptions.error !== 'undefined') { - throw new Error(encodedAttestationOptions.error); - } + if (typeof encodedAttestationOptions.error !== 'undefined') { + throw new Error(encodedAttestationOptions.error); + } - const credential = encodeAttestationCredential( - (await navigator.credentials.create({ - publicKey: decodeAttestationOptions(encodedAttestationOptions), - }) as PublicKeyCredential) - ); + const credential = encodeAttestationCredential( + (await navigator.credentials.create({ + publicKey: decodeAttestationOptions(encodedAttestationOptions), + })) as PublicKeyCredential, + ); - return fetchAttestationResponse(origin, credential); + return await fetchAttestationResponse(origin, credential); } diff --git a/clients/liquid-auth-client-js/src/connect.ts b/clients/liquid-auth-client-js/src/connect.ts index 992e3d0..e72cf38 100644 --- a/clients/liquid-auth-client-js/src/connect.ts +++ b/clients/liquid-auth-client-js/src/connect.ts @@ -1,87 +1,166 @@ -import {DEFAULT_FETCH_OPTIONS} from "./constants.js"; -import type {Account} from 'algosdk' -import {encodeAddress} from "algosdk"; -import nacl from 'tweetnacl' -import {toBase64URL} from './encoding.js' +/** + * This module is deprecated + */ +import { DEFAULT_FETCH_OPTIONS } from './constants.js'; +import type { Account } from 'algosdk'; +import type { SignKeyPair } from 'tweetnacl'; +import nacl from 'tweetnacl'; +import { toBase64URL, encodeAddress } from '@liquid/core/encoding'; +import { + INVALID_INPUT_MESSAGE, + isValidResponse, + UNSIGNED_MESSAGE, +} from './errors.js'; +/** + * @todo: Refactor auth message to FIDO extension + * @deprecated + */ export class Message { - origin: string; - challenge: string; - requestId: number; - wallet?: string; - signature?: string; - constructor(origin: string, challenge: string, requestId: number) { - this.origin = origin - this.challenge = challenge - this.requestId = requestId - } - static async fromResponse(response: Response|Message){ - const msg = response instanceof Response ? await response.json(): response; - return new Message(msg.origin, msg.challenge, msg.requestId) - } + /** + * Origin of the Request + */ + origin: string; + /** + * Challenge to be signed + */ + challenge: string; + /** + * Linking Request ID + */ + requestId: number; + /** + * Label for the remote Service + */ + label?: string; + /** + * Address that signed the message + */ + wallet?: string; + /** + * Signature of the challenge + */ + signature?: string; + constructor( + origin: string, + challenge: string, + requestId: number, + label?: string, + ) { + this.origin = origin; + this.challenge = challenge; + this.requestId = requestId; + this.label = label; + } - /** - * Sign Message with Wallet Key - * - * @param key - */ - sign(key: string | Account | Uint8Array | nacl.SignKeyPair): void{ - const encoder = new TextEncoder() - let keyPair: nacl.SignKeyPair + static async fromResponse(response: Response | Message) { + const msg = response instanceof Response ? await response.json() : response; + return new Message(msg.origin, msg.challenge, msg.requestId); + } - // Seed or Secret Key - if(key instanceof Uint8Array){ - if(key.length === 32){ - keyPair = nacl.sign.keyPair.fromSeed(key) - } else if(key.length === 64){ - keyPair = nacl.sign.keyPair.fromSecretKey(key) - } else { - throw new TypeError('Invalid seed or secret key') - } - } + /** + * Sign Message with Wallet Key + * + * @param key + * @deprecated + */ + sign(key: string | Account | Uint8Array | SignKeyPair): this { + const encoder = new TextEncoder(); + let keyPair: SignKeyPair | null = null; - // Algorand SDK - if(typeof (key as Account).addr !== 'undefined' && typeof (key as Account).addr === 'string'){ - keyPair = nacl.sign.keyPair.fromSecretKey((key as Account).sk) - } + // Seed or Secret Key + if (key instanceof Uint8Array) { + if (key.length === 32) { + keyPair = nacl.sign.keyPair.fromSeed(key); + } else if (key.length === 64) { + keyPair = nacl.sign.keyPair.fromSecretKey(key); + } else { + throw new TypeError('Invalid seed or secret key'); + } + } + + // Algorand SDK + if ( + typeof (key as Account).addr !== 'undefined' && + typeof (key as Account).addr === 'string' + ) { + keyPair = nacl.sign.keyPair.fromSecretKey((key as Account).sk); + } - // NACL - if((key as nacl.SignKeyPair).publicKey instanceof Uint8Array && (key as nacl.SignKeyPair).secretKey instanceof Uint8Array){ - console.log('nacl') - keyPair = key as nacl.SignKeyPair - } - this.signature = toBase64URL(nacl.sign.detached(encoder.encode(this.challenge), keyPair.secretKey)); - this.wallet = encodeAddress(keyPair.publicKey) + // NACL + if ( + (key as SignKeyPair).publicKey instanceof Uint8Array && + (key as SignKeyPair).secretKey instanceof Uint8Array + ) { + console.log('nacl'); + keyPair = key as SignKeyPair; } + if (keyPair === null) { + throw new TypeError('Invalid key'); + } + this.signature = toBase64URL( + nacl.sign.detached(encoder.encode(this.challenge), keyPair.secretKey), + ); + this.wallet = encodeAddress(keyPair.publicKey); + return this; + } + + toString(): string { + const optional: { wallet?: string; signature?: string; label?: string } = + {}; - toString(){ - let optional: {wallet?: string, signature?: string} = {} + if (typeof this.wallet === 'string') { + optional.wallet = this.wallet; + } - if(typeof this.wallet === 'string'){ - optional.wallet = this.wallet; - } + if (typeof this.signature === 'string') { + optional.signature = this.signature; + } - if(typeof this.signature === 'string'){ - optional.signature = this.signature - } - return JSON.stringify({ origin: this.origin, requestId: this.requestId, challenge: this.challenge, ...optional }) + if (typeof this.label === 'string') { + optional.label = this.label; } + + return JSON.stringify({ + origin: this.origin, + requestId: this.requestId, + challenge: this.challenge, + ...optional, + }); + } } -export async function fetchConnectRequest(origin: string, requestId: number){ - return fetch(`${origin}/connect/request`, { - ...DEFAULT_FETCH_OPTIONS, - body: JSON.stringify({ requestId }), - }) +/** + * + * @deprecated + * @param origin + * @param requestId + */ +export async function fetchConnectRequest(origin: string, requestId: number) { + if (typeof origin !== 'string' || typeof requestId !== 'number') + throw new TypeError(INVALID_INPUT_MESSAGE); + return await fetch(`${origin}/connect/request`, { + ...DEFAULT_FETCH_OPTIONS, + body: JSON.stringify({ requestId }), + }); } -export async function fetchConnectResponse(msg: Message){ - if(typeof msg.signature === 'undefined'){ - throw new TypeError('Message must be signed!') - } - return fetch('/connect/response', { - ...DEFAULT_FETCH_OPTIONS, - body: JSON.stringify(msg), - }) + +/** + * @deprecated + * @param msg + */ +export async function fetchConnectResponse(msg: Message) { + if (!(msg instanceof Message)) throw new TypeError(INVALID_INPUT_MESSAGE); + if (typeof msg.signature === 'undefined') { + throw new TypeError(UNSIGNED_MESSAGE); + } + return await fetch('/connect/response', { + ...DEFAULT_FETCH_OPTIONS, + body: JSON.stringify(msg), + }).then((r) => { + if (!isValidResponse(r)) throw new Error(r.statusText); + return r.json(); + }); } /** @@ -89,9 +168,22 @@ export async function fetchConnectResponse(msg: Message){ * @param origin * @param requestId * @param key + * @deprecated */ -export async function connect(origin: string, requestId: number, key: string | Account | Uint8Array | nacl.SignKeyPair){ - const msg = await Message.fromResponse(await fetchConnectRequest(origin, requestId)) - msg.sign(key) - return await fetchConnectResponse(msg) +export async function connect( + origin: string, + requestId: number, + key: string | Account | Uint8Array | SignKeyPair, +) { + if ( + typeof origin !== 'string' || + typeof requestId !== 'number' || + typeof key === 'undefined' + ) + throw new TypeError(INVALID_INPUT_MESSAGE); + const msg = await Message.fromResponse( + await fetchConnectRequest(origin, requestId), + ); + msg.sign(key); + return await fetchConnectResponse(msg); } diff --git a/clients/liquid-auth-client-js/src/constants.ts b/clients/liquid-auth-client-js/src/constants.ts index 40fe56a..c1327e5 100644 --- a/clients/liquid-auth-client-js/src/constants.ts +++ b/clients/liquid-auth-client-js/src/constants.ts @@ -1,6 +1,6 @@ export const DEFAULT_FETCH_OPTIONS = { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, -} + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, +}; diff --git a/clients/liquid-auth-client-js/src/encoding.ts b/clients/liquid-auth-client-js/src/encoding.ts deleted file mode 100644 index e8c9091..0000000 --- a/clients/liquid-auth-client-js/src/encoding.ts +++ /dev/null @@ -1,41 +0,0 @@ -const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; - -/** - * Bytes to Base64URL - * @param {Uint8Array| ArrayBuffer} arr Bytes to convert to URL safe Base64 - */ -export function toBase64URL(arr: Uint8Array | ArrayBuffer): string { - let bytes = arr instanceof Uint8Array ? arr : new Uint8Array(arr); - let len = bytes.length - let base64 = ""; - - for (let i = 0; i < len; i+=3) { - base64 += chars[bytes[i] >> 2]; - base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)]; - base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)]; - base64 += chars[bytes[i + 2] & 63]; - } - - if ((len % 3) === 2) { - base64 = base64.substring(0, base64.length - 1); - } else if (len % 3 === 1) { - base64 = base64.substring(0, base64.length - 2); - } - - return base64; -} - -/** - * Base64URL to Bytes - * @param {string} base64url URL safe Base64 string - */ -export function fromBase64Url(base64url: string): Uint8Array { - if(typeof base64url !== 'string'){ - throw new TypeError('Must be string!') - } - return new Uint8Array( - atob(base64url.replace(/-/g, '+').replace(/_/g, '/').replace(/\s/g, '')) - .split('') - .map((c) => c.charCodeAt(0)), - ); -} diff --git a/clients/liquid-auth-client-js/src/errors.ts b/clients/liquid-auth-client-js/src/errors.ts new file mode 100644 index 0000000..ec7d96c --- /dev/null +++ b/clients/liquid-auth-client-js/src/errors.ts @@ -0,0 +1,9 @@ +export const INVALID_INPUT_MESSAGE = 'Invalid input'; +export const INVALID_RESPONSE_MESSAGE = 'Invalid response'; +export const CREDENTIAL_ACTION_FAILURE = 'Credential action failed'; +export const UNSIGNED_MESSAGE = 'Message must be signed'; +export class ServiceError extends Error {} + +export function isValidResponse(r: Response) { + return r.ok && (r.status === 200 || r.status === 201); +} diff --git a/clients/liquid-auth-client-js/src/index.ts b/clients/liquid-auth-client-js/src/index.ts index c49e070..9cccec6 100644 --- a/clients/liquid-auth-client-js/src/index.ts +++ b/clients/liquid-auth-client-js/src/index.ts @@ -1,4 +1,6 @@ -export * from './assertion.js' -export * from './attestation.js' -export * from './encoding.js' -export * from './connect.js' +export * from './assertion.js'; +export * from './attestation.js'; +export * from './connect.js'; +export * from './constants.js'; +export * from './errors.js'; +export * from './signal.js'; diff --git a/clients/liquid-auth-client-js/src/signal.ts b/clients/liquid-auth-client-js/src/signal.ts new file mode 100644 index 0000000..2324472 --- /dev/null +++ b/clients/liquid-auth-client-js/src/signal.ts @@ -0,0 +1,273 @@ +import { io, ManagerOptions, Socket, SocketOptions } from 'socket.io-client'; +import QRCodeStyling, { Options as QRCodeOptions } from 'qr-code-styling'; +import { EventEmitter } from 'eventemitter3'; +import { toBase64URL } from '@liquid/core'; +import nacl from 'tweetnacl'; + +export type LinkMessage = { + credId?: string; + requestId: string | number; + wallet: string; +}; +export const REQUEST_IS_MISSING_MESSAGE = 'Request id is required'; +export const REQUEST_IN_PROCESS_MESSAGE = 'Request in process'; +export const UNAUTHENTICATED_MESSAGE = 'Not authenticated'; + +export const DEFAULT_QR_CODE_OPTIONS: QRCodeOptions = { + width: 500, + height: 500, + data: 'algorand://', + margin: 25, + imageOptions: { hideBackgroundDots: true, imageSize: 0.4, margin: 15 }, + dotsOptions: { + type: 'extra-rounded', + gradient: { + type: 'radial', + rotation: 0, + colorStops: [ + { offset: 0, color: '#9966ff' }, + { offset: 1, color: '#332257' }, + ], + }, + }, + backgroundOptions: { color: '#ffffff', gradient: null }, + // TODO: Host logo publicly + image: '/logo.png', + cornersSquareOptions: { + color: '#000000', + gradient: { + type: 'linear', + rotation: 0, + colorStops: [ + { offset: 0, color: '#332257' }, + { offset: 1, color: '#040908' }, + ], + }, + }, + cornersDotOptions: { + type: 'dot', + color: '#000000', + gradient: { + type: 'linear', + rotation: 0, + colorStops: [ + { offset: 0, color: '#000000' }, + { offset: 1, color: '#000000' }, + ], + }, + }, +}; + +export async function generateQRCode( + { requestId, url }: { requestId: any; url: string }, + qrCodeOptions: QRCodeOptions = DEFAULT_QR_CODE_OPTIONS, +) { + if (requestId === 'undefined') throw new Error(REQUEST_IS_MISSING_MESSAGE); + // TODO: Serialize data to standard URL for Deep-Links + qrCodeOptions.data = JSON.stringify({ + requestId: requestId, + origin: url, + // TODO: Remove challenge from QR Code + challenge: toBase64URL(nacl.randomBytes(nacl.sign.seedLength)), + }); + + // @ts-expect-error, figure out call signature issue + const qrCode = new QRCodeStyling(qrCodeOptions); + return qrCode.getRawData('png').then((blob) => { + if (!blob) throw new TypeError('Could not get qrcode blob'); + return URL.createObjectURL(blob); + }); +} + +/** + * + */ +export class SignalClient extends EventEmitter { + private url: string; + type: 'offer' | 'answer'; + private authenticated: boolean = false; + private requestId: any | undefined; + peerClient: RTCPeerConnection | undefined; + private qrCodeOptions: QRCodeOptions = DEFAULT_QR_CODE_OPTIONS; + socket: Socket; + + /** + * + * @param url + * @param options + */ + constructor( + url: string, + options: Partial = { autoConnect: true }, + ) { + super(); + this.url = url; + this.socket = io(url, options); + globalThis.socket = this.socket; + this.socket.on('connect', () => { + this.emit('connect', this.socket.id); + }); + + this.socket.on('disconnect', () => { + this.emit('disconnect', this.socket.id); + }); + } + + static generateRequestId() { + //TODO: replace with toBase64URL(nacl.randomBytes(nacl.sign.seedLength) + return Math.random(); + } + + /** + * Create QR Code + */ + async qrCode() { + if (typeof this.requestId === 'undefined') + throw new Error(REQUEST_IS_MISSING_MESSAGE); + // TODO: Serialize data to standard URL for Deep-Links + this.qrCodeOptions.data = JSON.stringify({ + requestId: this.requestId, + origin: this.url, + // TODO: Remove challenge from QR Code + challenge: toBase64URL(nacl.randomBytes(nacl.sign.seedLength)), + }); + return generateQRCode( + { requestId: this.requestId, url: this.url }, + this.qrCodeOptions, + ); + } + + /** + * # Create a peer connection + * + * Send the nonce to the server and listen to a specified type. + * + * ## Offer + * - Will wait for an offer-description from the server + * - Will send an answer-description to the server + * - Will send candidates to the server + * + * ## Answer + * - Will send an offer-description to the server + * - Will wait for an answer-description from the server + * - Will send candidates to the server + * + * @param requestId + * @param type + * @param config + */ + async peer( + requestId: any, + type: 'offer' | 'answer', + config?: RTCConfiguration, + ): Promise { + if (typeof this.requestId !== 'undefined') + throw new Error(REQUEST_IN_PROCESS_MESSAGE); + + return new Promise(async (resolve) => { + // Create Peer Connection + this.peerClient = new RTCPeerConnection(config); + globalThis.peerClient = this.peerClient; + this.type = type === 'offer' ? 'answer' : 'offer'; + // Wait for a link message + await this.link(requestId); + this.socket.disconnect(); + this.socket.connect(); + console.log('linked!'); + // Listen for Local Candidates + this.peerClient.onicecandidate = (event) => { + if (event.candidate) { + console.log(event.candidate); + this.socket.emit(`${this.type}-candidate`, event.candidate.toJSON()); + } + }; + // Listen to Remote Candidates + this.socket.on( + `${type}-candidate`, + async (candidate: RTCIceCandidateInit) => { + await this.peerClient.addIceCandidate(new RTCIceCandidate(candidate)); + }, + ); + + this.peerClient.onicecandidate = (event) => { + if (event.candidate) { + this.socket.emit(`${this.type}-candidate`, event.candidate.toJSON()); + } + }; + + // Listen for Remote DataChannel and Resolve + this.peerClient.ondatachannel = (event) => { + console.log(event); + globalThis.dc = event.channel; + this.emit('data-channel', event.channel); + resolve(event.channel); + }; + // Handle Session Descriptions + if (type === 'offer') { + const sdp = await this.signal(type); + await this.peerClient.setRemoteDescription(sdp); + const answer = await this.peerClient.createAnswer(); + await this.peerClient.setLocalDescription(answer); + this.socket.emit(`${this.type}-description`, answer.sdp); + } else { + const localSdp = await this.peerClient.createOffer(); + const dataChannel = this.peerClient.createDataChannel('liquid'); + await this.peerClient.setLocalDescription(localSdp); + this.socket.emit(`${this.type}-description`, localSdp.sdp); + const sdp = await this.signal(type); + await this.peerClient.setRemoteDescription(sdp); + this.emit('data-channel', dataChannel); + resolve(dataChannel); + } + }); + } + + /** + * Await for a link message for a given requestId + * @param requestId + */ + async link(requestId: any) { + if (typeof this.requestId !== 'undefined') + throw new Error(REQUEST_IN_PROCESS_MESSAGE); + this.requestId = requestId; + this.emit('link', { requestId }); + + return new Promise((resolve) => { + this.socket.emit( + 'link', + { requestId }, + ({ data }: { data: LinkMessage }) => { + this.authenticated = true; + delete this.requestId; + + this.emit('link-message', data); + resolve(data); + }, + ); + }); + } + + /** + * + * @param type + */ + async signal(type: 'offer' | 'answer') { + if (!this.authenticated) throw new Error(UNAUTHENTICATED_MESSAGE); + this.emit('signal', { type }); + return new Promise((resolve) => { + this.socket.once(`${type}-description`, (sdp: string) => { + const description = { type, sdp } as RTCSessionDescriptionInit; + this.emit(`${type}-description`, description); + resolve(description); + }); + }); + } + + close(disconnect = false) { + this.socket.removeAllListeners(); + delete this.requestId; + this.authenticated = false; + if (disconnect) this.socket.disconnect(); + this.emit('close'); + } +} diff --git a/clients/liquid-auth-client-js/tests/__fixtures__/base64url.fixtures.json b/clients/liquid-auth-client-js/tests/__fixtures__/base64url.fixtures.json new file mode 100644 index 0000000..8c6c516 --- /dev/null +++ b/clients/liquid-auth-client-js/tests/__fixtures__/base64url.fixtures.json @@ -0,0 +1,5 @@ +[ + [ + "" + ] +] diff --git a/clients/liquid-auth-client-js/tests/connect.spec.js b/clients/liquid-auth-client-js/tests/connect.spec.js index 58d6dde..5dbd731 100644 --- a/clients/liquid-auth-client-js/tests/connect.spec.js +++ b/clients/liquid-auth-client-js/tests/connect.spec.js @@ -4,7 +4,7 @@ import algosdk from 'algosdk'; import nacl from "tweetnacl"; import { Message } from '../lib/connect.js'; -import { fromBase64Url } from "../lib/encoding.js"; +import { fromBase64Url } from "@liquid/core"; const encoder = new TextEncoder; test("create instance", async () => { const msg = new Message("hello", "1234", 1234); diff --git a/clients/liquid-auth-client-js/tests/index.spec.js b/clients/liquid-auth-client-js/tests/index.spec.js deleted file mode 100644 index f8aeb09..0000000 --- a/clients/liquid-auth-client-js/tests/index.spec.js +++ /dev/null @@ -1,6 +0,0 @@ -import test from 'node:test'; -import assert from 'node:assert'; -import * as api from '../lib/index.js'; -test("smoke test", () => { - assert.equal(1, 1); -}); diff --git a/clients/liquid-auth-client-js/tsconfig.json b/clients/liquid-auth-client-js/tsconfig.json index f587ad2..77c36d8 100644 --- a/clients/liquid-auth-client-js/tsconfig.json +++ b/clients/liquid-auth-client-js/tsconfig.json @@ -5,6 +5,8 @@ "declaration": true, "module": "NodeNext", "moduleResolution": "NodeNext", - "skipLibCheck": true + "allowSyntheticDefaultImports": true, + "skipLibCheck": true, + "allowJs": true } } diff --git a/clients/liquid-auth-core/.eslintrc.json b/clients/liquid-auth-core/.eslintrc.json new file mode 100644 index 0000000..cb00282 --- /dev/null +++ b/clients/liquid-auth-core/.eslintrc.json @@ -0,0 +1,22 @@ +{ + "env": { + "browser": true, + "es2021": true, + "node": true + }, + "parserOptions": { + "project": "tsconfig.json", + "sourceType": "module" + }, + "plugins": [ + "@typescript-eslint/eslint-plugin" + ], + "extends": [ + "plugin:@typescript-eslint/recommended", + "plugin:prettier/recommended" + ], + "rules": { + "@typescript-eslint/no-explicit-any": "warn", + "no-var": "warn" + } +} diff --git a/clients/liquid-auth-core/.gitignore b/clients/liquid-auth-core/.gitignore new file mode 100644 index 0000000..e1be502 --- /dev/null +++ b/clients/liquid-auth-core/.gitignore @@ -0,0 +1,133 @@ +lib +docs + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* diff --git a/clients/liquid-auth-core/package.json b/clients/liquid-auth-core/package.json new file mode 100644 index 0000000..7647365 --- /dev/null +++ b/clients/liquid-auth-core/package.json @@ -0,0 +1,50 @@ +{ + "name": "@liquid/core", + "version": "1.0.0", + "description": "Utilities for Liquid Auth JS", + "main": "./lib/index.js", + "type": "module", + "exports": { + ".": { + "default": "./lib/index.js", + "types": "./lib/index.d.ts" + }, + "./hi-base32": { + "default": "./lib/hi-base32.js", + "types": "./lib/hi-base32.d.ts" + }, + "./sha512": { + "default": "./lib/sha512.js", + "types": "./lib/sha512.d.ts" + }, + "./encoding": { + "default": "./lib/encoding.js", + "types": "./lib/encoding.d.ts" + } + }, + "scripts": { + "dev": "tsc --watch", + "build": "tsc", + "build:docs": "typedoc --plugin typedoc-plugin-markdown --out docs src", + "lint": "eslint --fix src", + "test": "tsc && node --test ./tests/*.spec.js", + "test:cov": "tsc && c8 node --test ./tests/*.spec.js" + }, + "author": "", + "license": "MIT", + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^7.6.0", + "c8": "^9.1.0", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-tsdoc": "^0.2.17", + "typedoc": "^0.25.13", + "typedoc-plugin-markdown": "^4.0.0-next.55", + "typescript": "^5.4.5" + }, + "dependencies": { + "tweetnacl": "^1.0.3" + } +} diff --git a/clients/liquid-auth-core/src/encoding.ts b/clients/liquid-auth-core/src/encoding.ts new file mode 100644 index 0000000..1aae877 --- /dev/null +++ b/clients/liquid-auth-core/src/encoding.ts @@ -0,0 +1,128 @@ +import nacl from "tweetnacl"; +import { decodeAsBytes, encodeBytes } from "./hi-base32.js"; +import { createMethod } from "./sha512.js"; +const sha512_256 = createMethod(256); +const chars = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; +const ALGORAND_PUBLIC_KEY_BYTE_LENGTH = 32; +const ALGORAND_ADDRESS_BYTE_LENGTH = 36; +const ALGORAND_CHECKSUM_BYTE_LENGTH = 4; +const ALGORAND_ADDRESS_LENGTH = 58; +const HASH_BYTES_LENGTH = 32; +export const MALFORMED_ADDRESS_ERROR_MSG = "Malformed address"; +export const ALGORAND_ADDRESS_BAD_CHECKSUM_ERROR_MSG = "Bad checksum"; +export const INVALID_BASE64URL_INPUT = "Invalid base64url input"; + +/** + * Bytes to Base64URL + * @param {Uint8Array| ArrayBuffer} arr Bytes to convert to URL safe Base64 + */ +export function toBase64URL(arr: Uint8Array | ArrayBuffer): string { + const bytes = arr instanceof Uint8Array ? arr : new Uint8Array(arr); + const len = bytes.length; + let base64 = ""; + for (let i = 0; i < len; i += 3) { + base64 += chars[bytes[i] >> 2]; + base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)]; + base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)]; + base64 += chars[bytes[i + 2] & 63]; + } + + if (len % 3 === 2) { + base64 = base64.substring(0, base64.length - 1); + } else if (len % 3 === 1) { + base64 = base64.substring(0, base64.length - 2); + } + + return base64; +} + +/** + * Base64URL to Bytes + * @param {string} base64url URL safe Base64 string + */ +export function fromBase64Url(base64url: string): Uint8Array { + if (typeof base64url !== "string") { + throw new Error(INVALID_BASE64URL_INPUT); + } + return new Uint8Array( + // TODO: Cross-platform solution since atob is deprecated in Node + atob(base64url.replace(/-/g, "+").replace(/_/g, "/").replace(/\s/g, "")) + .split("") + .map((c) => c.charCodeAt(0)), + ); +} + +function concatArrays(...arrs: Array>) { + const size = arrs.reduce((sum, arr) => sum + arr.length, 0); + const c = new Uint8Array(size); + + let offset = 0; + for (let i = 0; i < arrs.length; i++) { + c.set(arrs[i], offset); + offset += arrs[i].length; + } + + return c; +} + +export function encodeAddress(address: Uint8Array) { + // compute checksum + const checksum = sha512_256 + .array(address) + .slice( + nacl.sign.publicKeyLength - ALGORAND_CHECKSUM_BYTE_LENGTH, + nacl.sign.publicKeyLength, + ); + const addr = encodeBytes(concatArrays(address, checksum)); + + return addr.toString().slice(0, ALGORAND_ADDRESS_LENGTH); // removing the extra '====' +} +/** + * decodeAddress takes an Algorand address in string form and decodes it into a Uint8Array. + * @param address - an Algorand address with checksum. + * @returns the decoded form of the address's public key and checksum + */ +export function decodeAddress(address: string): Uint8Array { + if ( + typeof address !== "string" || + address.length !== ALGORAND_ADDRESS_LENGTH + ) { + throw new Error(MALFORMED_ADDRESS_ERROR_MSG); + } + + // try to decode + const decoded = decodeAsBytes(address.toString()); + + // Find publickey and checksum + const pk = new Uint8Array( + decoded.slice( + 0, + ALGORAND_ADDRESS_BYTE_LENGTH - ALGORAND_CHECKSUM_BYTE_LENGTH, + ), + ); + const cs = new Uint8Array( + decoded.slice( + ALGORAND_PUBLIC_KEY_BYTE_LENGTH, + ALGORAND_ADDRESS_BYTE_LENGTH, + ), + ); + + // Compute checksum + const checksum = sha512_256 + .array(pk) + .slice( + HASH_BYTES_LENGTH - ALGORAND_CHECKSUM_BYTE_LENGTH, + HASH_BYTES_LENGTH, + ); + + // Check if the checksum and the address are equal + if ( + checksum.length !== cs.length || + !Array.from(checksum).every((val, i) => val === cs[i]) + ) { + throw new Error(ALGORAND_ADDRESS_BAD_CHECKSUM_ERROR_MSG); + } + + return pk; +} diff --git a/clients/liquid-auth-core/src/hi-base32.ts b/clients/liquid-auth-core/src/hi-base32.ts new file mode 100644 index 0000000..c6bdc80 --- /dev/null +++ b/clients/liquid-auth-core/src/hi-base32.ts @@ -0,0 +1,192 @@ +/* + * [hi-base32]{@link https://github.com/emn178/hi-base32} + * + * @version 0.5.1 + * @author Chen, Yi-Cyuan [emn178@gmail.com] + * @copyright Chen, Yi-Cyuan 2015-2021 + * @license MIT + */ +const BASE32_ENCODE_CHAR = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567".split(""); +const BASE32_DECODE_CHAR: Record = { + A: 0, + B: 1, + C: 2, + D: 3, + E: 4, + F: 5, + G: 6, + H: 7, + I: 8, + J: 9, + K: 10, + L: 11, + M: 12, + N: 13, + O: 14, + P: 15, + Q: 16, + R: 17, + S: 18, + T: 19, + U: 20, + V: 21, + W: 22, + X: 23, + Y: 24, + Z: 25, + 2: 26, + 3: 27, + 4: 28, + 5: 29, + 6: 30, + 7: 31, +}; + +export const decodeAsBytes = function (base32Str: string): number[] { + if (base32Str === "") { + return []; + } else if (!/^[A-Z2-7=]+$/.test(base32Str)) { + throw new Error("Invalid base32 characters"); + } + base32Str = base32Str.replace(/=/g, ""); + let v1; + let v2; + let v3; + let v4; + let v5; + let v6; + let v7; + let v8; + const bytes: number[] = []; + let index = 0; + const length = base32Str.length; + + // 4 char to 3 bytes + for (var i = 0, count = (length >> 3) << 3; i < count; ) { + v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v3 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v4 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v5 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v6 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v7 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v8 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + bytes[index++] = ((v1 << 3) | (v2 >>> 2)) & 255; + bytes[index++] = ((v2 << 6) | (v3 << 1) | (v4 >>> 4)) & 255; + bytes[index++] = ((v4 << 4) | (v5 >>> 1)) & 255; + bytes[index++] = ((v5 << 7) | (v6 << 2) | (v7 >>> 3)) & 255; + bytes[index++] = ((v7 << 5) | v8) & 255; + } + + // remain bytes + const remain = length - count; + if (remain === 2) { + v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + bytes[index++] = ((v1 << 3) | (v2 >>> 2)) & 255; + } else if (remain === 4) { + v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v3 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v4 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + bytes[index++] = ((v1 << 3) | (v2 >>> 2)) & 255; + bytes[index++] = ((v2 << 6) | (v3 << 1) | (v4 >>> 4)) & 255; + } else if (remain === 5) { + v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v3 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v4 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v5 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + bytes[index++] = ((v1 << 3) | (v2 >>> 2)) & 255; + bytes[index++] = ((v2 << 6) | (v3 << 1) | (v4 >>> 4)) & 255; + bytes[index++] = ((v4 << 4) | (v5 >>> 1)) & 255; + } else if (remain === 7) { + v1 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v2 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v3 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v4 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v5 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v6 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + v7 = BASE32_DECODE_CHAR[base32Str.charAt(i++)]; + bytes[index++] = ((v1 << 3) | (v2 >>> 2)) & 255; + bytes[index++] = ((v2 << 6) | (v3 << 1) | (v4 >>> 4)) & 255; + bytes[index++] = ((v4 << 4) | (v5 >>> 1)) & 255; + bytes[index++] = ((v5 << 7) | (v6 << 2) | (v7 >>> 3)) & 255; + } + return bytes; +}; + +export const encodeBytes = function (bytes: Uint8Array) { + let v1; + let v2; + let v3; + let v4; + let v5; + let base32Str = ""; + const length = bytes.length; + for ( + var i = 0, count = parseInt((length / 5) as unknown as string) * 5; + i < count; + + ) { + v1 = bytes[i++]; + v2 = bytes[i++]; + v3 = bytes[i++]; + v4 = bytes[i++]; + v5 = bytes[i++]; + base32Str += + BASE32_ENCODE_CHAR[v1 >>> 3] + + BASE32_ENCODE_CHAR[((v1 << 2) | (v2 >>> 6)) & 31] + + BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] + + BASE32_ENCODE_CHAR[((v2 << 4) | (v3 >>> 4)) & 31] + + BASE32_ENCODE_CHAR[((v3 << 1) | (v4 >>> 7)) & 31] + + BASE32_ENCODE_CHAR[(v4 >>> 2) & 31] + + BASE32_ENCODE_CHAR[((v4 << 3) | (v5 >>> 5)) & 31] + + BASE32_ENCODE_CHAR[v5 & 31]; + } + + // remain char + const remain = length - count; + if (remain === 1) { + v1 = bytes[i]; + base32Str += + BASE32_ENCODE_CHAR[v1 >>> 3] + + BASE32_ENCODE_CHAR[(v1 << 2) & 31] + + "======"; + } else if (remain === 2) { + v1 = bytes[i++]; + v2 = bytes[i]; + base32Str += + BASE32_ENCODE_CHAR[v1 >>> 3] + + BASE32_ENCODE_CHAR[((v1 << 2) | (v2 >>> 6)) & 31] + + BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] + + BASE32_ENCODE_CHAR[(v2 << 4) & 31] + + "===="; + } else if (remain === 3) { + v1 = bytes[i++]; + v2 = bytes[i++]; + v3 = bytes[i]; + base32Str += + BASE32_ENCODE_CHAR[v1 >>> 3] + + BASE32_ENCODE_CHAR[((v1 << 2) | (v2 >>> 6)) & 31] + + BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] + + BASE32_ENCODE_CHAR[((v2 << 4) | (v3 >>> 4)) & 31] + + BASE32_ENCODE_CHAR[(v3 << 1) & 31] + + "==="; + } else if (remain === 4) { + v1 = bytes[i++]; + v2 = bytes[i++]; + v3 = bytes[i++]; + v4 = bytes[i]; + base32Str += + BASE32_ENCODE_CHAR[v1 >>> 3] + + BASE32_ENCODE_CHAR[((v1 << 2) | (v2 >>> 6)) & 31] + + BASE32_ENCODE_CHAR[(v2 >>> 1) & 31] + + BASE32_ENCODE_CHAR[((v2 << 4) | (v3 >>> 4)) & 31] + + BASE32_ENCODE_CHAR[((v3 << 1) | (v4 >>> 7)) & 31] + + BASE32_ENCODE_CHAR[(v4 >>> 2) & 31] + + BASE32_ENCODE_CHAR[(v4 << 3) & 31] + + "="; + } + return base32Str; +}; diff --git a/clients/liquid-auth-core/src/index.ts b/clients/liquid-auth-core/src/index.ts new file mode 100644 index 0000000..a443d34 --- /dev/null +++ b/clients/liquid-auth-core/src/index.ts @@ -0,0 +1 @@ +export * from "./encoding.js"; diff --git a/clients/liquid-auth-core/src/sha512.ts b/clients/liquid-auth-core/src/sha512.ts new file mode 100644 index 0000000..129aaab --- /dev/null +++ b/clients/liquid-auth-core/src/sha512.ts @@ -0,0 +1,1311 @@ +/* + * [js-sha512]{@link https://github.com/emn178/js-sha512} + * + * @version 0.9.0 + * @author Chen, Yi-Cyuan [emn178@gmail.com] + * @copyright Chen, Yi-Cyuan 2014-2024 + * @license MIT + */ +const INPUT_ERROR = "input is invalid type"; +const FINALIZE_ERROR = "finalize already called"; + +const ARRAY_BUFFER = typeof ArrayBuffer !== "undefined"; +const HEX_CHARS = "0123456789abcdef".split(""); +const EXTRA = [-2147483648, 8388608, 32768, 128]; +const SHIFT = [24, 16, 8, 0]; +const K = [ + 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, + 0xe9b5dba5, 0x8189dbbc, 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, + 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, 0xd807aa98, 0xa3030242, + 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, + 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, + 0xc19bf174, 0xcf692694, 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, + 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, 0x2de92c6f, 0x592b0275, + 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, + 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, + 0xbf597fc7, 0xbeef0ee4, 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, + 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, 0x27b70a85, 0x46d22ffc, + 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, + 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, + 0x92722c85, 0x1482353b, 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, + 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, 0xd192e819, 0xd6ef5218, + 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, + 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, + 0x34b0bcb5, 0xe19b48a8, 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, + 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, 0x748f82ee, 0x5defb2fc, + 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, + 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, + 0xc67178f2, 0xe372532b, 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, + 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, 0x06f067aa, 0x72176fba, + 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, + 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, + 0x431d67c4, 0x9c100d4c, 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, + 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817, +]; + +const OUTPUT_TYPES = ["hex", "array", "digest", "arrayBuffer"]; + +const blocks: number[] = []; + +const isArray = Array.isArray; +const isView = ArrayBuffer.isView; + +// [message: string, isString: bool] +const formatMessage = function ( + message: string | ArrayBuffer | ArrayBufferView, +) { + const type = typeof message; + if (type === "string") { + return [message, true]; + } + if (type !== "object" || message === null) { + throw new Error(INPUT_ERROR); + } + if (ARRAY_BUFFER && message.constructor === ArrayBuffer) { + return [new Uint8Array(message), false]; + } + if (!isArray(message) && !isView(message)) { + throw new Error(INPUT_ERROR); + } + return [message, false]; +}; + +const createOutputMethod = function ( + outputType, + bits, +): (message) => typeof Sha512 { + return function (message) { + return new (Sha512 as any)(bits, true).update(message)[outputType](); + }; +}; + +export const createMethod = function (bits): { + array: (d: Uint8Array) => Uint8Array; +} { + const method = createOutputMethod("hex", bits); + //@ts-expect-error, create does exits on the prototype + method.create = function () { + return new (Sha512 as any)(bits); + }; + //@ts-expect-error, update does exits on the prototype + method.update = function (message) { + //@ts-expect-error, this is a valid return + return method.create().update(message); + }; + for (let i = 0; i < OUTPUT_TYPES.length; ++i) { + const type = OUTPUT_TYPES[i]; + method[type] = createOutputMethod(type, bits); + } + //@ts-expect-error, this is a valid return + return method; +}; + +/** + * @class + * @param bits + * @param sharedMemory + * @constructor + */ +function Sha512(bits?: number, sharedMemory?) { + if (sharedMemory) { + blocks[0] = + blocks[1] = + blocks[2] = + blocks[3] = + blocks[4] = + blocks[5] = + blocks[6] = + blocks[7] = + blocks[8] = + blocks[9] = + blocks[10] = + blocks[11] = + blocks[12] = + blocks[13] = + blocks[14] = + blocks[15] = + blocks[16] = + blocks[17] = + blocks[18] = + blocks[19] = + blocks[20] = + blocks[21] = + blocks[22] = + blocks[23] = + blocks[24] = + blocks[25] = + blocks[26] = + blocks[27] = + blocks[28] = + blocks[29] = + blocks[30] = + blocks[31] = + blocks[32] = + 0; + this.blocks = blocks; + } else { + this.blocks = [ + 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, + ]; + } + + if (bits == 384) { + this.h0h = 0xcbbb9d5d; + this.h0l = 0xc1059ed8; + this.h1h = 0x629a292a; + this.h1l = 0x367cd507; + this.h2h = 0x9159015a; + this.h2l = 0x3070dd17; + this.h3h = 0x152fecd8; + this.h3l = 0xf70e5939; + this.h4h = 0x67332667; + this.h4l = 0xffc00b31; + this.h5h = 0x8eb44a87; + this.h5l = 0x68581511; + this.h6h = 0xdb0c2e0d; + this.h6l = 0x64f98fa7; + this.h7h = 0x47b5481d; + this.h7l = 0xbefa4fa4; + } else if (bits == 256) { + this.h0h = 0x22312194; + this.h0l = 0xfc2bf72c; + this.h1h = 0x9f555fa3; + this.h1l = 0xc84c64c2; + this.h2h = 0x2393b86b; + this.h2l = 0x6f53b151; + this.h3h = 0x96387719; + this.h3l = 0x5940eabd; + this.h4h = 0x96283ee2; + this.h4l = 0xa88effe3; + this.h5h = 0xbe5e1e25; + this.h5l = 0x53863992; + this.h6h = 0x2b0199fc; + this.h6l = 0x2c85b8aa; + this.h7h = 0x0eb72ddc; + this.h7l = 0x81c52ca2; + } else if (bits == 224) { + this.h0h = 0x8c3d37c8; + this.h0l = 0x19544da2; + this.h1h = 0x73e19966; + this.h1l = 0x89dcd4d6; + this.h2h = 0x1dfab7ae; + this.h2l = 0x32ff9c82; + this.h3h = 0x679dd514; + this.h3l = 0x582f9fcf; + this.h4h = 0x0f6d2b69; + this.h4l = 0x7bd44da8; + this.h5h = 0x77e36f73; + this.h5l = 0x04c48942; + this.h6h = 0x3f9d85a8; + this.h6l = 0x6a1d36c8; + this.h7h = 0x1112e6ad; + this.h7l = 0x91d692a1; + } else { + // 512 + this.h0h = 0x6a09e667; + this.h0l = 0xf3bcc908; + this.h1h = 0xbb67ae85; + this.h1l = 0x84caa73b; + this.h2h = 0x3c6ef372; + this.h2l = 0xfe94f82b; + this.h3h = 0xa54ff53a; + this.h3l = 0x5f1d36f1; + this.h4h = 0x510e527f; + this.h4l = 0xade682d1; + this.h5h = 0x9b05688c; + this.h5l = 0x2b3e6c1f; + this.h6h = 0x1f83d9ab; + this.h6l = 0xfb41bd6b; + this.h7h = 0x5be0cd19; + this.h7l = 0x137e2179; + } + this.bits = bits; + + this.block = this.start = this.bytes = this.hBytes = 0; + this.finalized = this.hashed = false; +} + +Sha512.prototype.update = function (message) { + if (this.finalized) { + throw new Error(FINALIZE_ERROR); + } + const result = formatMessage(message); + message = result[0]; + const isString = result[1]; + let code; + let index = 0; + let i; + const length = message.length; + const blocks = this.blocks; + + while (index < length) { + if (this.hashed) { + this.hashed = false; + blocks[0] = this.block; + this.block = + blocks[1] = + blocks[2] = + blocks[3] = + blocks[4] = + blocks[5] = + blocks[6] = + blocks[7] = + blocks[8] = + blocks[9] = + blocks[10] = + blocks[11] = + blocks[12] = + blocks[13] = + blocks[14] = + blocks[15] = + blocks[16] = + blocks[17] = + blocks[18] = + blocks[19] = + blocks[20] = + blocks[21] = + blocks[22] = + blocks[23] = + blocks[24] = + blocks[25] = + blocks[26] = + blocks[27] = + blocks[28] = + blocks[29] = + blocks[30] = + blocks[31] = + blocks[32] = + 0; + } + + if (isString) { + for (i = this.start; index < length && i < 128; ++index) { + code = message.charCodeAt(index); + if (code < 0x80) { + blocks[i >>> 2] |= code << SHIFT[i++ & 3]; + } else if (code < 0x800) { + blocks[i >>> 2] |= (0xc0 | (code >>> 6)) << SHIFT[i++ & 3]; + blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; + } else if (code < 0xd800 || code >= 0xe000) { + blocks[i >>> 2] |= (0xe0 | (code >>> 12)) << SHIFT[i++ & 3]; + blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3]; + blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; + } else { + code = + 0x10000 + + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff)); + blocks[i >>> 2] |= (0xf0 | (code >>> 18)) << SHIFT[i++ & 3]; + blocks[i >>> 2] |= (0x80 | ((code >>> 12) & 0x3f)) << SHIFT[i++ & 3]; + blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3]; + blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3]; + } + } + } else { + for (i = this.start; index < length && i < 128; ++index) { + blocks[i >>> 2] |= message[index] << SHIFT[i++ & 3]; + } + } + + this.lastByteIndex = i; + this.bytes += i - this.start; + if (i >= 128) { + this.block = blocks[32]; + this.start = i - 128; + this.hash(); + this.hashed = true; + } else { + this.start = i; + } + } + if (this.bytes > 4294967295) { + this.hBytes += (this.bytes / 4294967296) << 0; + this.bytes = this.bytes % 4294967296; + } + return this; +}; + +Sha512.prototype.finalize = function () { + if (this.finalized) { + return; + } + this.finalized = true; + const blocks = this.blocks; + const i = this.lastByteIndex; + blocks[32] = this.block; + blocks[i >>> 2] |= EXTRA[i & 3]; + this.block = blocks[32]; + if (i >= 112) { + if (!this.hashed) { + this.hash(); + } + blocks[0] = this.block; + blocks[1] = + blocks[2] = + blocks[3] = + blocks[4] = + blocks[5] = + blocks[6] = + blocks[7] = + blocks[8] = + blocks[9] = + blocks[10] = + blocks[11] = + blocks[12] = + blocks[13] = + blocks[14] = + blocks[15] = + blocks[16] = + blocks[17] = + blocks[18] = + blocks[19] = + blocks[20] = + blocks[21] = + blocks[22] = + blocks[23] = + blocks[24] = + blocks[25] = + blocks[26] = + blocks[27] = + blocks[28] = + blocks[29] = + blocks[30] = + blocks[31] = + blocks[32] = + 0; + } + blocks[30] = (this.hBytes << 3) | (this.bytes >>> 29); + blocks[31] = this.bytes << 3; + this.hash(); +}; + +Sha512.prototype.hash = function () { + const h0h = this.h0h; + const h0l = this.h0l; + const h1h = this.h1h; + const h1l = this.h1l; + const h2h = this.h2h; + const h2l = this.h2l; + const h3h = this.h3h; + const h3l = this.h3l; + const h4h = this.h4h; + const h4l = this.h4l; + const h5h = this.h5h; + const h5l = this.h5l; + const h6h = this.h6h; + const h6l = this.h6l; + const h7h = this.h7h; + const h7l = this.h7l; + const blocks = this.blocks; + let j; + let s0h; + let s0l; + let s1h; + let s1l; + let c1; + let c2; + let c3; + let c4; + let abh; + let abl; + let dah; + let dal; + let cdh; + let cdl; + let bch; + let bcl; + let majh; + let majl; + let t1h; + let t1l; + let t2h; + let t2l; + let chh; + let chl; + + for (j = 32; j < 160; j += 2) { + t1h = blocks[j - 30]; + t1l = blocks[j - 29]; + s0h = + ((t1h >>> 1) | (t1l << 31)) ^ ((t1h >>> 8) | (t1l << 24)) ^ (t1h >>> 7); + s0l = + ((t1l >>> 1) | (t1h << 31)) ^ + ((t1l >>> 8) | (t1h << 24)) ^ + ((t1l >>> 7) | (t1h << 25)); + + t1h = blocks[j - 4]; + t1l = blocks[j - 3]; + s1h = + ((t1h >>> 19) | (t1l << 13)) ^ ((t1l >>> 29) | (t1h << 3)) ^ (t1h >>> 6); + s1l = + ((t1l >>> 19) | (t1h << 13)) ^ + ((t1h >>> 29) | (t1l << 3)) ^ + ((t1l >>> 6) | (t1h << 26)); + + t1h = blocks[j - 32]; + t1l = blocks[j - 31]; + t2h = blocks[j - 14]; + t2l = blocks[j - 13]; + + c1 = (t2l & 0xffff) + (t1l & 0xffff) + (s0l & 0xffff) + (s1l & 0xffff); + c2 = + (t2l >>> 16) + (t1l >>> 16) + (s0l >>> 16) + (s1l >>> 16) + (c1 >>> 16); + c3 = + (t2h & 0xffff) + + (t1h & 0xffff) + + (s0h & 0xffff) + + (s1h & 0xffff) + + (c2 >>> 16); + c4 = + (t2h >>> 16) + (t1h >>> 16) + (s0h >>> 16) + (s1h >>> 16) + (c3 >>> 16); + + blocks[j] = (c4 << 16) | (c3 & 0xffff); + blocks[j + 1] = (c2 << 16) | (c1 & 0xffff); + } + + let ah = h0h; + let al = h0l; + let bh = h1h; + let bl = h1l; + let ch = h2h; + let cl = h2l; + let dh = h3h; + let dl = h3l; + let eh = h4h; + let el = h4l; + let fh = h5h; + let fl = h5l; + let gh = h6h; + let gl = h6l; + let hh = h7h; + let hl = h7l; + bch = bh & ch; + bcl = bl & cl; + for (j = 0; j < 160; j += 8) { + s0h = + ((ah >>> 28) | (al << 4)) ^ + ((al >>> 2) | (ah << 30)) ^ + ((al >>> 7) | (ah << 25)); + s0l = + ((al >>> 28) | (ah << 4)) ^ + ((ah >>> 2) | (al << 30)) ^ + ((ah >>> 7) | (al << 25)); + + s1h = + ((eh >>> 14) | (el << 18)) ^ + ((eh >>> 18) | (el << 14)) ^ + ((el >>> 9) | (eh << 23)); + s1l = + ((el >>> 14) | (eh << 18)) ^ + ((el >>> 18) | (eh << 14)) ^ + ((eh >>> 9) | (el << 23)); + + abh = ah & bh; + abl = al & bl; + majh = abh ^ (ah & ch) ^ bch; + majl = abl ^ (al & cl) ^ bcl; + + chh = (eh & fh) ^ (~eh & gh); + chl = (el & fl) ^ (~el & gl); + + t1h = blocks[j]; + t1l = blocks[j + 1]; + t2h = K[j]; + t2l = K[j + 1]; + + c1 = + (t2l & 0xffff) + + (t1l & 0xffff) + + (chl & 0xffff) + + (s1l & 0xffff) + + (hl & 0xffff); + c2 = + (t2l >>> 16) + + (t1l >>> 16) + + (chl >>> 16) + + (s1l >>> 16) + + (hl >>> 16) + + (c1 >>> 16); + c3 = + (t2h & 0xffff) + + (t1h & 0xffff) + + (chh & 0xffff) + + (s1h & 0xffff) + + (hh & 0xffff) + + (c2 >>> 16); + c4 = + (t2h >>> 16) + + (t1h >>> 16) + + (chh >>> 16) + + (s1h >>> 16) + + (hh >>> 16) + + (c3 >>> 16); + + t1h = (c4 << 16) | (c3 & 0xffff); + t1l = (c2 << 16) | (c1 & 0xffff); + + c1 = (majl & 0xffff) + (s0l & 0xffff); + c2 = (majl >>> 16) + (s0l >>> 16) + (c1 >>> 16); + c3 = (majh & 0xffff) + (s0h & 0xffff) + (c2 >>> 16); + c4 = (majh >>> 16) + (s0h >>> 16) + (c3 >>> 16); + + t2h = (c4 << 16) | (c3 & 0xffff); + t2l = (c2 << 16) | (c1 & 0xffff); + + c1 = (dl & 0xffff) + (t1l & 0xffff); + c2 = (dl >>> 16) + (t1l >>> 16) + (c1 >>> 16); + c3 = (dh & 0xffff) + (t1h & 0xffff) + (c2 >>> 16); + c4 = (dh >>> 16) + (t1h >>> 16) + (c3 >>> 16); + + hh = (c4 << 16) | (c3 & 0xffff); + hl = (c2 << 16) | (c1 & 0xffff); + + c1 = (t2l & 0xffff) + (t1l & 0xffff); + c2 = (t2l >>> 16) + (t1l >>> 16) + (c1 >>> 16); + c3 = (t2h & 0xffff) + (t1h & 0xffff) + (c2 >>> 16); + c4 = (t2h >>> 16) + (t1h >>> 16) + (c3 >>> 16); + + dh = (c4 << 16) | (c3 & 0xffff); + dl = (c2 << 16) | (c1 & 0xffff); + + s0h = + ((dh >>> 28) | (dl << 4)) ^ + ((dl >>> 2) | (dh << 30)) ^ + ((dl >>> 7) | (dh << 25)); + s0l = + ((dl >>> 28) | (dh << 4)) ^ + ((dh >>> 2) | (dl << 30)) ^ + ((dh >>> 7) | (dl << 25)); + + s1h = + ((hh >>> 14) | (hl << 18)) ^ + ((hh >>> 18) | (hl << 14)) ^ + ((hl >>> 9) | (hh << 23)); + s1l = + ((hl >>> 14) | (hh << 18)) ^ + ((hl >>> 18) | (hh << 14)) ^ + ((hh >>> 9) | (hl << 23)); + + dah = dh & ah; + dal = dl & al; + majh = dah ^ (dh & bh) ^ abh; + majl = dal ^ (dl & bl) ^ abl; + + chh = (hh & eh) ^ (~hh & fh); + chl = (hl & el) ^ (~hl & fl); + + t1h = blocks[j + 2]; + t1l = blocks[j + 3]; + t2h = K[j + 2]; + t2l = K[j + 3]; + + c1 = + (t2l & 0xffff) + + (t1l & 0xffff) + + (chl & 0xffff) + + (s1l & 0xffff) + + (gl & 0xffff); + c2 = + (t2l >>> 16) + + (t1l >>> 16) + + (chl >>> 16) + + (s1l >>> 16) + + (gl >>> 16) + + (c1 >>> 16); + c3 = + (t2h & 0xffff) + + (t1h & 0xffff) + + (chh & 0xffff) + + (s1h & 0xffff) + + (gh & 0xffff) + + (c2 >>> 16); + c4 = + (t2h >>> 16) + + (t1h >>> 16) + + (chh >>> 16) + + (s1h >>> 16) + + (gh >>> 16) + + (c3 >>> 16); + + t1h = (c4 << 16) | (c3 & 0xffff); + t1l = (c2 << 16) | (c1 & 0xffff); + + c1 = (majl & 0xffff) + (s0l & 0xffff); + c2 = (majl >>> 16) + (s0l >>> 16) + (c1 >>> 16); + c3 = (majh & 0xffff) + (s0h & 0xffff) + (c2 >>> 16); + c4 = (majh >>> 16) + (s0h >>> 16) + (c3 >>> 16); + + t2h = (c4 << 16) | (c3 & 0xffff); + t2l = (c2 << 16) | (c1 & 0xffff); + + c1 = (cl & 0xffff) + (t1l & 0xffff); + c2 = (cl >>> 16) + (t1l >>> 16) + (c1 >>> 16); + c3 = (ch & 0xffff) + (t1h & 0xffff) + (c2 >>> 16); + c4 = (ch >>> 16) + (t1h >>> 16) + (c3 >>> 16); + + gh = (c4 << 16) | (c3 & 0xffff); + gl = (c2 << 16) | (c1 & 0xffff); + + c1 = (t2l & 0xffff) + (t1l & 0xffff); + c2 = (t2l >>> 16) + (t1l >>> 16) + (c1 >>> 16); + c3 = (t2h & 0xffff) + (t1h & 0xffff) + (c2 >>> 16); + c4 = (t2h >>> 16) + (t1h >>> 16) + (c3 >>> 16); + + ch = (c4 << 16) | (c3 & 0xffff); + cl = (c2 << 16) | (c1 & 0xffff); + + s0h = + ((ch >>> 28) | (cl << 4)) ^ + ((cl >>> 2) | (ch << 30)) ^ + ((cl >>> 7) | (ch << 25)); + s0l = + ((cl >>> 28) | (ch << 4)) ^ + ((ch >>> 2) | (cl << 30)) ^ + ((ch >>> 7) | (cl << 25)); + + s1h = + ((gh >>> 14) | (gl << 18)) ^ + ((gh >>> 18) | (gl << 14)) ^ + ((gl >>> 9) | (gh << 23)); + s1l = + ((gl >>> 14) | (gh << 18)) ^ + ((gl >>> 18) | (gh << 14)) ^ + ((gh >>> 9) | (gl << 23)); + + cdh = ch & dh; + cdl = cl & dl; + majh = cdh ^ (ch & ah) ^ dah; + majl = cdl ^ (cl & al) ^ dal; + + chh = (gh & hh) ^ (~gh & eh); + chl = (gl & hl) ^ (~gl & el); + + t1h = blocks[j + 4]; + t1l = blocks[j + 5]; + t2h = K[j + 4]; + t2l = K[j + 5]; + + c1 = + (t2l & 0xffff) + + (t1l & 0xffff) + + (chl & 0xffff) + + (s1l & 0xffff) + + (fl & 0xffff); + c2 = + (t2l >>> 16) + + (t1l >>> 16) + + (chl >>> 16) + + (s1l >>> 16) + + (fl >>> 16) + + (c1 >>> 16); + c3 = + (t2h & 0xffff) + + (t1h & 0xffff) + + (chh & 0xffff) + + (s1h & 0xffff) + + (fh & 0xffff) + + (c2 >>> 16); + c4 = + (t2h >>> 16) + + (t1h >>> 16) + + (chh >>> 16) + + (s1h >>> 16) + + (fh >>> 16) + + (c3 >>> 16); + + t1h = (c4 << 16) | (c3 & 0xffff); + t1l = (c2 << 16) | (c1 & 0xffff); + + c1 = (majl & 0xffff) + (s0l & 0xffff); + c2 = (majl >>> 16) + (s0l >>> 16) + (c1 >>> 16); + c3 = (majh & 0xffff) + (s0h & 0xffff) + (c2 >>> 16); + c4 = (majh >>> 16) + (s0h >>> 16) + (c3 >>> 16); + + t2h = (c4 << 16) | (c3 & 0xffff); + t2l = (c2 << 16) | (c1 & 0xffff); + + c1 = (bl & 0xffff) + (t1l & 0xffff); + c2 = (bl >>> 16) + (t1l >>> 16) + (c1 >>> 16); + c3 = (bh & 0xffff) + (t1h & 0xffff) + (c2 >>> 16); + c4 = (bh >>> 16) + (t1h >>> 16) + (c3 >>> 16); + + fh = (c4 << 16) | (c3 & 0xffff); + fl = (c2 << 16) | (c1 & 0xffff); + + c1 = (t2l & 0xffff) + (t1l & 0xffff); + c2 = (t2l >>> 16) + (t1l >>> 16) + (c1 >>> 16); + c3 = (t2h & 0xffff) + (t1h & 0xffff) + (c2 >>> 16); + c4 = (t2h >>> 16) + (t1h >>> 16) + (c3 >>> 16); + + bh = (c4 << 16) | (c3 & 0xffff); + bl = (c2 << 16) | (c1 & 0xffff); + + s0h = + ((bh >>> 28) | (bl << 4)) ^ + ((bl >>> 2) | (bh << 30)) ^ + ((bl >>> 7) | (bh << 25)); + s0l = + ((bl >>> 28) | (bh << 4)) ^ + ((bh >>> 2) | (bl << 30)) ^ + ((bh >>> 7) | (bl << 25)); + + s1h = + ((fh >>> 14) | (fl << 18)) ^ + ((fh >>> 18) | (fl << 14)) ^ + ((fl >>> 9) | (fh << 23)); + s1l = + ((fl >>> 14) | (fh << 18)) ^ + ((fl >>> 18) | (fh << 14)) ^ + ((fh >>> 9) | (fl << 23)); + + bch = bh & ch; + bcl = bl & cl; + majh = bch ^ (bh & dh) ^ cdh; + majl = bcl ^ (bl & dl) ^ cdl; + + chh = (fh & gh) ^ (~fh & hh); + chl = (fl & gl) ^ (~fl & hl); + + t1h = blocks[j + 6]; + t1l = blocks[j + 7]; + t2h = K[j + 6]; + t2l = K[j + 7]; + + c1 = + (t2l & 0xffff) + + (t1l & 0xffff) + + (chl & 0xffff) + + (s1l & 0xffff) + + (el & 0xffff); + c2 = + (t2l >>> 16) + + (t1l >>> 16) + + (chl >>> 16) + + (s1l >>> 16) + + (el >>> 16) + + (c1 >>> 16); + c3 = + (t2h & 0xffff) + + (t1h & 0xffff) + + (chh & 0xffff) + + (s1h & 0xffff) + + (eh & 0xffff) + + (c2 >>> 16); + c4 = + (t2h >>> 16) + + (t1h >>> 16) + + (chh >>> 16) + + (s1h >>> 16) + + (eh >>> 16) + + (c3 >>> 16); + + t1h = (c4 << 16) | (c3 & 0xffff); + t1l = (c2 << 16) | (c1 & 0xffff); + + c1 = (majl & 0xffff) + (s0l & 0xffff); + c2 = (majl >>> 16) + (s0l >>> 16) + (c1 >>> 16); + c3 = (majh & 0xffff) + (s0h & 0xffff) + (c2 >>> 16); + c4 = (majh >>> 16) + (s0h >>> 16) + (c3 >>> 16); + + t2h = (c4 << 16) | (c3 & 0xffff); + t2l = (c2 << 16) | (c1 & 0xffff); + + c1 = (al & 0xffff) + (t1l & 0xffff); + c2 = (al >>> 16) + (t1l >>> 16) + (c1 >>> 16); + c3 = (ah & 0xffff) + (t1h & 0xffff) + (c2 >>> 16); + c4 = (ah >>> 16) + (t1h >>> 16) + (c3 >>> 16); + + eh = (c4 << 16) | (c3 & 0xffff); + el = (c2 << 16) | (c1 & 0xffff); + + c1 = (t2l & 0xffff) + (t1l & 0xffff); + c2 = (t2l >>> 16) + (t1l >>> 16) + (c1 >>> 16); + c3 = (t2h & 0xffff) + (t1h & 0xffff) + (c2 >>> 16); + c4 = (t2h >>> 16) + (t1h >>> 16) + (c3 >>> 16); + + ah = (c4 << 16) | (c3 & 0xffff); + al = (c2 << 16) | (c1 & 0xffff); + } + + c1 = (h0l & 0xffff) + (al & 0xffff); + c2 = (h0l >>> 16) + (al >>> 16) + (c1 >>> 16); + c3 = (h0h & 0xffff) + (ah & 0xffff) + (c2 >>> 16); + c4 = (h0h >>> 16) + (ah >>> 16) + (c3 >>> 16); + + this.h0h = (c4 << 16) | (c3 & 0xffff); + this.h0l = (c2 << 16) | (c1 & 0xffff); + + c1 = (h1l & 0xffff) + (bl & 0xffff); + c2 = (h1l >>> 16) + (bl >>> 16) + (c1 >>> 16); + c3 = (h1h & 0xffff) + (bh & 0xffff) + (c2 >>> 16); + c4 = (h1h >>> 16) + (bh >>> 16) + (c3 >>> 16); + + this.h1h = (c4 << 16) | (c3 & 0xffff); + this.h1l = (c2 << 16) | (c1 & 0xffff); + + c1 = (h2l & 0xffff) + (cl & 0xffff); + c2 = (h2l >>> 16) + (cl >>> 16) + (c1 >>> 16); + c3 = (h2h & 0xffff) + (ch & 0xffff) + (c2 >>> 16); + c4 = (h2h >>> 16) + (ch >>> 16) + (c3 >>> 16); + + this.h2h = (c4 << 16) | (c3 & 0xffff); + this.h2l = (c2 << 16) | (c1 & 0xffff); + + c1 = (h3l & 0xffff) + (dl & 0xffff); + c2 = (h3l >>> 16) + (dl >>> 16) + (c1 >>> 16); + c3 = (h3h & 0xffff) + (dh & 0xffff) + (c2 >>> 16); + c4 = (h3h >>> 16) + (dh >>> 16) + (c3 >>> 16); + + this.h3h = (c4 << 16) | (c3 & 0xffff); + this.h3l = (c2 << 16) | (c1 & 0xffff); + + c1 = (h4l & 0xffff) + (el & 0xffff); + c2 = (h4l >>> 16) + (el >>> 16) + (c1 >>> 16); + c3 = (h4h & 0xffff) + (eh & 0xffff) + (c2 >>> 16); + c4 = (h4h >>> 16) + (eh >>> 16) + (c3 >>> 16); + + this.h4h = (c4 << 16) | (c3 & 0xffff); + this.h4l = (c2 << 16) | (c1 & 0xffff); + + c1 = (h5l & 0xffff) + (fl & 0xffff); + c2 = (h5l >>> 16) + (fl >>> 16) + (c1 >>> 16); + c3 = (h5h & 0xffff) + (fh & 0xffff) + (c2 >>> 16); + c4 = (h5h >>> 16) + (fh >>> 16) + (c3 >>> 16); + + this.h5h = (c4 << 16) | (c3 & 0xffff); + this.h5l = (c2 << 16) | (c1 & 0xffff); + + c1 = (h6l & 0xffff) + (gl & 0xffff); + c2 = (h6l >>> 16) + (gl >>> 16) + (c1 >>> 16); + c3 = (h6h & 0xffff) + (gh & 0xffff) + (c2 >>> 16); + c4 = (h6h >>> 16) + (gh >>> 16) + (c3 >>> 16); + + this.h6h = (c4 << 16) | (c3 & 0xffff); + this.h6l = (c2 << 16) | (c1 & 0xffff); + + c1 = (h7l & 0xffff) + (hl & 0xffff); + c2 = (h7l >>> 16) + (hl >>> 16) + (c1 >>> 16); + c3 = (h7h & 0xffff) + (hh & 0xffff) + (c2 >>> 16); + c4 = (h7h >>> 16) + (hh >>> 16) + (c3 >>> 16); + + this.h7h = (c4 << 16) | (c3 & 0xffff); + this.h7l = (c2 << 16) | (c1 & 0xffff); +}; + +Sha512.prototype.hex = function () { + this.finalize(); + + const h0h = this.h0h; + const h0l = this.h0l; + const h1h = this.h1h; + const h1l = this.h1l; + const h2h = this.h2h; + const h2l = this.h2l; + const h3h = this.h3h; + const h3l = this.h3l; + const h4h = this.h4h; + const h4l = this.h4l; + const h5h = this.h5h; + const h5l = this.h5l; + const h6h = this.h6h; + const h6l = this.h6l; + const h7h = this.h7h; + const h7l = this.h7l; + const bits = this.bits; + + let hex = + HEX_CHARS[(h0h >>> 28) & 0x0f] + + HEX_CHARS[(h0h >>> 24) & 0x0f] + + HEX_CHARS[(h0h >>> 20) & 0x0f] + + HEX_CHARS[(h0h >>> 16) & 0x0f] + + HEX_CHARS[(h0h >>> 12) & 0x0f] + + HEX_CHARS[(h0h >>> 8) & 0x0f] + + HEX_CHARS[(h0h >>> 4) & 0x0f] + + HEX_CHARS[h0h & 0x0f] + + HEX_CHARS[(h0l >>> 28) & 0x0f] + + HEX_CHARS[(h0l >>> 24) & 0x0f] + + HEX_CHARS[(h0l >>> 20) & 0x0f] + + HEX_CHARS[(h0l >>> 16) & 0x0f] + + HEX_CHARS[(h0l >>> 12) & 0x0f] + + HEX_CHARS[(h0l >>> 8) & 0x0f] + + HEX_CHARS[(h0l >>> 4) & 0x0f] + + HEX_CHARS[h0l & 0x0f] + + HEX_CHARS[(h1h >>> 28) & 0x0f] + + HEX_CHARS[(h1h >>> 24) & 0x0f] + + HEX_CHARS[(h1h >>> 20) & 0x0f] + + HEX_CHARS[(h1h >>> 16) & 0x0f] + + HEX_CHARS[(h1h >>> 12) & 0x0f] + + HEX_CHARS[(h1h >>> 8) & 0x0f] + + HEX_CHARS[(h1h >>> 4) & 0x0f] + + HEX_CHARS[h1h & 0x0f] + + HEX_CHARS[(h1l >>> 28) & 0x0f] + + HEX_CHARS[(h1l >>> 24) & 0x0f] + + HEX_CHARS[(h1l >>> 20) & 0x0f] + + HEX_CHARS[(h1l >>> 16) & 0x0f] + + HEX_CHARS[(h1l >>> 12) & 0x0f] + + HEX_CHARS[(h1l >>> 8) & 0x0f] + + HEX_CHARS[(h1l >>> 4) & 0x0f] + + HEX_CHARS[h1l & 0x0f] + + HEX_CHARS[(h2h >>> 28) & 0x0f] + + HEX_CHARS[(h2h >>> 24) & 0x0f] + + HEX_CHARS[(h2h >>> 20) & 0x0f] + + HEX_CHARS[(h2h >>> 16) & 0x0f] + + HEX_CHARS[(h2h >>> 12) & 0x0f] + + HEX_CHARS[(h2h >>> 8) & 0x0f] + + HEX_CHARS[(h2h >>> 4) & 0x0f] + + HEX_CHARS[h2h & 0x0f] + + HEX_CHARS[(h2l >>> 28) & 0x0f] + + HEX_CHARS[(h2l >>> 24) & 0x0f] + + HEX_CHARS[(h2l >>> 20) & 0x0f] + + HEX_CHARS[(h2l >>> 16) & 0x0f] + + HEX_CHARS[(h2l >>> 12) & 0x0f] + + HEX_CHARS[(h2l >>> 8) & 0x0f] + + HEX_CHARS[(h2l >>> 4) & 0x0f] + + HEX_CHARS[h2l & 0x0f] + + HEX_CHARS[(h3h >>> 28) & 0x0f] + + HEX_CHARS[(h3h >>> 24) & 0x0f] + + HEX_CHARS[(h3h >>> 20) & 0x0f] + + HEX_CHARS[(h3h >>> 16) & 0x0f] + + HEX_CHARS[(h3h >>> 12) & 0x0f] + + HEX_CHARS[(h3h >>> 8) & 0x0f] + + HEX_CHARS[(h3h >>> 4) & 0x0f] + + HEX_CHARS[h3h & 0x0f]; + if (bits >= 256) { + hex += + HEX_CHARS[(h3l >>> 28) & 0x0f] + + HEX_CHARS[(h3l >>> 24) & 0x0f] + + HEX_CHARS[(h3l >>> 20) & 0x0f] + + HEX_CHARS[(h3l >>> 16) & 0x0f] + + HEX_CHARS[(h3l >>> 12) & 0x0f] + + HEX_CHARS[(h3l >>> 8) & 0x0f] + + HEX_CHARS[(h3l >>> 4) & 0x0f] + + HEX_CHARS[h3l & 0x0f]; + } + if (bits >= 384) { + hex += + HEX_CHARS[(h4h >>> 28) & 0x0f] + + HEX_CHARS[(h4h >>> 24) & 0x0f] + + HEX_CHARS[(h4h >>> 20) & 0x0f] + + HEX_CHARS[(h4h >>> 16) & 0x0f] + + HEX_CHARS[(h4h >>> 12) & 0x0f] + + HEX_CHARS[(h4h >>> 8) & 0x0f] + + HEX_CHARS[(h4h >>> 4) & 0x0f] + + HEX_CHARS[h4h & 0x0f] + + HEX_CHARS[(h4l >>> 28) & 0x0f] + + HEX_CHARS[(h4l >>> 24) & 0x0f] + + HEX_CHARS[(h4l >>> 20) & 0x0f] + + HEX_CHARS[(h4l >>> 16) & 0x0f] + + HEX_CHARS[(h4l >>> 12) & 0x0f] + + HEX_CHARS[(h4l >>> 8) & 0x0f] + + HEX_CHARS[(h4l >>> 4) & 0x0f] + + HEX_CHARS[h4l & 0x0f] + + HEX_CHARS[(h5h >>> 28) & 0x0f] + + HEX_CHARS[(h5h >>> 24) & 0x0f] + + HEX_CHARS[(h5h >>> 20) & 0x0f] + + HEX_CHARS[(h5h >>> 16) & 0x0f] + + HEX_CHARS[(h5h >>> 12) & 0x0f] + + HEX_CHARS[(h5h >>> 8) & 0x0f] + + HEX_CHARS[(h5h >>> 4) & 0x0f] + + HEX_CHARS[h5h & 0x0f] + + HEX_CHARS[(h5l >>> 28) & 0x0f] + + HEX_CHARS[(h5l >>> 24) & 0x0f] + + HEX_CHARS[(h5l >>> 20) & 0x0f] + + HEX_CHARS[(h5l >>> 16) & 0x0f] + + HEX_CHARS[(h5l >>> 12) & 0x0f] + + HEX_CHARS[(h5l >>> 8) & 0x0f] + + HEX_CHARS[(h5l >>> 4) & 0x0f] + + HEX_CHARS[h5l & 0x0f]; + } + if (bits == 512) { + hex += + HEX_CHARS[(h6h >>> 28) & 0x0f] + + HEX_CHARS[(h6h >>> 24) & 0x0f] + + HEX_CHARS[(h6h >>> 20) & 0x0f] + + HEX_CHARS[(h6h >>> 16) & 0x0f] + + HEX_CHARS[(h6h >>> 12) & 0x0f] + + HEX_CHARS[(h6h >>> 8) & 0x0f] + + HEX_CHARS[(h6h >>> 4) & 0x0f] + + HEX_CHARS[h6h & 0x0f] + + HEX_CHARS[(h6l >>> 28) & 0x0f] + + HEX_CHARS[(h6l >>> 24) & 0x0f] + + HEX_CHARS[(h6l >>> 20) & 0x0f] + + HEX_CHARS[(h6l >>> 16) & 0x0f] + + HEX_CHARS[(h6l >>> 12) & 0x0f] + + HEX_CHARS[(h6l >>> 8) & 0x0f] + + HEX_CHARS[(h6l >>> 4) & 0x0f] + + HEX_CHARS[h6l & 0x0f] + + HEX_CHARS[(h7h >>> 28) & 0x0f] + + HEX_CHARS[(h7h >>> 24) & 0x0f] + + HEX_CHARS[(h7h >>> 20) & 0x0f] + + HEX_CHARS[(h7h >>> 16) & 0x0f] + + HEX_CHARS[(h7h >>> 12) & 0x0f] + + HEX_CHARS[(h7h >>> 8) & 0x0f] + + HEX_CHARS[(h7h >>> 4) & 0x0f] + + HEX_CHARS[h7h & 0x0f] + + HEX_CHARS[(h7l >>> 28) & 0x0f] + + HEX_CHARS[(h7l >>> 24) & 0x0f] + + HEX_CHARS[(h7l >>> 20) & 0x0f] + + HEX_CHARS[(h7l >>> 16) & 0x0f] + + HEX_CHARS[(h7l >>> 12) & 0x0f] + + HEX_CHARS[(h7l >>> 8) & 0x0f] + + HEX_CHARS[(h7l >>> 4) & 0x0f] + + HEX_CHARS[h7l & 0x0f]; + } + return hex; +}; + +Sha512.prototype.toString = Sha512.prototype.hex; + +Sha512.prototype.digest = function () { + this.finalize(); + + const h0h = this.h0h; + const h0l = this.h0l; + const h1h = this.h1h; + const h1l = this.h1l; + const h2h = this.h2h; + const h2l = this.h2l; + const h3h = this.h3h; + const h3l = this.h3l; + const h4h = this.h4h; + const h4l = this.h4l; + const h5h = this.h5h; + const h5l = this.h5l; + const h6h = this.h6h; + const h6l = this.h6l; + const h7h = this.h7h; + const h7l = this.h7l; + const bits = this.bits; + + const arr = [ + (h0h >>> 24) & 0xff, + (h0h >>> 16) & 0xff, + (h0h >>> 8) & 0xff, + h0h & 0xff, + (h0l >>> 24) & 0xff, + (h0l >>> 16) & 0xff, + (h0l >>> 8) & 0xff, + h0l & 0xff, + (h1h >>> 24) & 0xff, + (h1h >>> 16) & 0xff, + (h1h >>> 8) & 0xff, + h1h & 0xff, + (h1l >>> 24) & 0xff, + (h1l >>> 16) & 0xff, + (h1l >>> 8) & 0xff, + h1l & 0xff, + (h2h >>> 24) & 0xff, + (h2h >>> 16) & 0xff, + (h2h >>> 8) & 0xff, + h2h & 0xff, + (h2l >>> 24) & 0xff, + (h2l >>> 16) & 0xff, + (h2l >>> 8) & 0xff, + h2l & 0xff, + (h3h >>> 24) & 0xff, + (h3h >>> 16) & 0xff, + (h3h >>> 8) & 0xff, + h3h & 0xff, + ]; + + if (bits >= 256) { + arr.push( + (h3l >>> 24) & 0xff, + (h3l >>> 16) & 0xff, + (h3l >>> 8) & 0xff, + h3l & 0xff, + ); + } + if (bits >= 384) { + arr.push( + (h4h >>> 24) & 0xff, + (h4h >>> 16) & 0xff, + (h4h >>> 8) & 0xff, + h4h & 0xff, + (h4l >>> 24) & 0xff, + (h4l >>> 16) & 0xff, + (h4l >>> 8) & 0xff, + h4l & 0xff, + (h5h >>> 24) & 0xff, + (h5h >>> 16) & 0xff, + (h5h >>> 8) & 0xff, + h5h & 0xff, + (h5l >>> 24) & 0xff, + (h5l >>> 16) & 0xff, + (h5l >>> 8) & 0xff, + h5l & 0xff, + ); + } + if (bits == 512) { + arr.push( + (h6h >>> 24) & 0xff, + (h6h >>> 16) & 0xff, + (h6h >>> 8) & 0xff, + h6h & 0xff, + (h6l >>> 24) & 0xff, + (h6l >>> 16) & 0xff, + (h6l >>> 8) & 0xff, + h6l & 0xff, + (h7h >>> 24) & 0xff, + (h7h >>> 16) & 0xff, + (h7h >>> 8) & 0xff, + h7h & 0xff, + (h7l >>> 24) & 0xff, + (h7l >>> 16) & 0xff, + (h7l >>> 8) & 0xff, + h7l & 0xff, + ); + } + return arr; +}; + +Sha512.prototype.array = Sha512.prototype.digest; + +Sha512.prototype.arrayBuffer = function () { + this.finalize(); + + const bits = this.bits; + const buffer = new ArrayBuffer(bits / 8); + const dataView = new DataView(buffer); + dataView.setUint32(0, this.h0h); + dataView.setUint32(4, this.h0l); + dataView.setUint32(8, this.h1h); + dataView.setUint32(12, this.h1l); + dataView.setUint32(16, this.h2h); + dataView.setUint32(20, this.h2l); + dataView.setUint32(24, this.h3h); + + if (bits >= 256) { + dataView.setUint32(28, this.h3l); + } + if (bits >= 384) { + dataView.setUint32(32, this.h4h); + dataView.setUint32(36, this.h4l); + dataView.setUint32(40, this.h5h); + dataView.setUint32(44, this.h5l); + } + if (bits == 512) { + dataView.setUint32(48, this.h6h); + dataView.setUint32(52, this.h6l); + dataView.setUint32(56, this.h7h); + dataView.setUint32(60, this.h7l); + } + return buffer; +}; + +Sha512.prototype.clone = function () { + const hash = new Sha512(this.bits, false); + this.copyTo(hash); + return hash; +}; + +Sha512.prototype.copyTo = function (hash) { + let i = 0; + const attrs = [ + "h0h", + "h0l", + "h1h", + "h1l", + "h2h", + "h2l", + "h3h", + "h3l", + "h4h", + "h4l", + "h5h", + "h5l", + "h6h", + "h6l", + "h7h", + "h7l", + "start", + "bytes", + "hBytes", + "finalized", + "hashed", + "lastByteIndex", + ]; + for (i = 0; i < attrs.length; ++i) { + hash[attrs[i]] = this[attrs[i]]; + } + for (i = 0; i < this.blocks.length; ++i) { + hash.blocks[i] = this.blocks[i]; + } +}; + +function HmacSha512(key, bits, sharedMemory) { + var i: number; + const result = formatMessage(key); + key = result[0]; + if (result[1]) { + const bytes: number[] = []; + const length = key.length; + let index = 0; + let code; + for (var i = 0; i < length; ++i) { + code = key.charCodeAt(i); + if (code < 0x80) { + bytes[index++] = code; + } else if (code < 0x800) { + bytes[index++] = 0xc0 | (code >>> 6); + bytes[index++] = 0x80 | (code & 0x3f); + } else if (code < 0xd800 || code >= 0xe000) { + bytes[index++] = 0xe0 | (code >>> 12); + bytes[index++] = 0x80 | ((code >>> 6) & 0x3f); + bytes[index++] = 0x80 | (code & 0x3f); + } else { + code = + 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff)); + bytes[index++] = 0xf0 | (code >>> 18); + bytes[index++] = 0x80 | ((code >>> 12) & 0x3f); + bytes[index++] = 0x80 | ((code >>> 6) & 0x3f); + bytes[index++] = 0x80 | (code & 0x3f); + } + } + key = bytes; + } + + if (key.length > 128) { + key = new Sha512(bits, true).update(key).array(); + } + + const oKeyPad: number[] = []; + const iKeyPad: number[] = []; + for (var i = 0; i < 128; ++i) { + const b = key[i] || 0; + oKeyPad[i] = 0x5c ^ b; + iKeyPad[i] = 0x36 ^ b; + } + + Sha512.call(this, bits, sharedMemory); + + this.update(iKeyPad); + this.oKeyPad = oKeyPad; + this.inner = true; + this.sharedMemory = sharedMemory; +} +HmacSha512.prototype = new Sha512(); + +HmacSha512.prototype.finalize = function () { + Sha512.prototype.finalize.call(this); + if (this.inner) { + this.inner = false; + const innerHash = this.array(); + Sha512.call(this, this.bits, this.sharedMemory); + this.update(this.oKeyPad); + this.update(innerHash); + Sha512.prototype.finalize.call(this); + } +}; + +HmacSha512.prototype.clone = function () { + const hash = new HmacSha512([], this.bits, false); + this.copyTo(hash); + hash.inner = this.inner; + for (let i = 0; i < this.oKeyPad.length; ++i) { + hash.oKeyPad[i] = this.oKeyPad[i]; + } + return hash; +}; + +export const sha512_256 = createMethod(256); diff --git a/clients/liquid-auth-core/tests/__fixtures__/encoding.base64url.fixtures.json b/clients/liquid-auth-core/tests/__fixtures__/encoding.base64url.fixtures.json new file mode 100644 index 0000000..cf14ba0 --- /dev/null +++ b/clients/liquid-auth-core/tests/__fixtures__/encoding.base64url.fixtures.json @@ -0,0 +1,1079 @@ +[ + { + "origin": "9b1a1b53-0456-4fcd-b10a-4db40352d58a", + "toBase64Url": "OWIxYTFiNTMtMDQ1Ni00ZmNkLWIxMGEtNGRiNDAzNTJkNThh", + "fromBase64Url": [ + 57, + 98, + 49, + 97, + 49, + 98, + 53, + 51, + 45, + 48, + 52, + 53, + 54, + 45, + 52, + 102, + 99, + 100, + 45, + 98, + 49, + 48, + 97, + 45, + 52, + 100, + 98, + 52, + 48, + 51, + 53, + 50, + 100, + 53, + 56, + 97 + ] + }, + { + "origin": "7646809", + "toBase64Url": "NzY0NjgwOQ", + "fromBase64Url": [ + 55, + 54, + 52, + 54, + 56, + 48, + 57 + ] + }, + { + "origin": "b1338059", + "toBase64Url": "YjEzMzgwNTk", + "fromBase64Url": [ + 98, + 49, + 51, + 51, + 56, + 48, + 53, + 57 + ] + }, + { + "origin": "582bd065-f280-4574-b315-3398c75296c5", + "toBase64Url": "NTgyYmQwNjUtZjI4MC00NTc0LWIzMTUtMzM5OGM3NTI5NmM1", + "fromBase64Url": [ + 53, + 56, + 50, + 98, + 100, + 48, + 54, + 53, + 45, + 102, + 50, + 56, + 48, + 45, + 52, + 53, + 55, + 52, + 45, + 98, + 51, + 49, + 53, + 45, + 51, + 51, + 57, + 56, + 99, + 55, + 53, + 50, + 57, + 54, + 99, + 53 + ] + }, + { + "origin": "29572cc5-7c36-4016-9825-abcc9ba51dae", + "toBase64Url": "Mjk1NzJjYzUtN2MzNi00MDE2LTk4MjUtYWJjYzliYTUxZGFl", + "fromBase64Url": [ + 50, + 57, + 53, + 55, + 50, + 99, + 99, + 53, + 45, + 55, + 99, + 51, + 54, + 45, + 52, + 48, + 49, + 54, + 45, + 57, + 56, + 50, + 53, + 45, + 97, + 98, + 99, + 99, + 57, + 98, + 97, + 53, + 49, + 100, + 97, + 101 + ] + }, + { + "origin": "2ce09bdf-69d1-4b08-b93e-3af4ca6a657a", + "toBase64Url": "MmNlMDliZGYtNjlkMS00YjA4LWI5M2UtM2FmNGNhNmE2NTdh", + "fromBase64Url": [ + 50, + 99, + 101, + 48, + 57, + 98, + 100, + 102, + 45, + 54, + 57, + 100, + 49, + 45, + 52, + 98, + 48, + 56, + 45, + 98, + 57, + 51, + 101, + 45, + 51, + 97, + 102, + 52, + 99, + 97, + 54, + 97, + 54, + 53, + 55, + 97 + ] + }, + { + "origin": "15210d8d-308c-4acd-843c-ba6babada62c", + "toBase64Url": "MTUyMTBkOGQtMzA4Yy00YWNkLTg0M2MtYmE2YmFiYWRhNjJj", + "fromBase64Url": [ + 49, + 53, + 50, + 49, + 48, + 100, + 56, + 100, + 45, + 51, + 48, + 56, + 99, + 45, + 52, + 97, + 99, + 100, + 45, + 56, + 52, + 51, + 99, + 45, + 98, + 97, + 54, + 98, + 97, + 98, + 97, + 100, + 97, + 54, + 50, + 99 + ] + }, + { + "origin": "cba26c96-51ad-40c0-b29f-6a46e0d88d43", + "toBase64Url": "Y2JhMjZjOTYtNTFhZC00MGMwLWIyOWYtNmE0NmUwZDg4ZDQz", + "fromBase64Url": [ + 99, + 98, + 97, + 50, + 54, + 99, + 57, + 54, + 45, + 53, + 49, + 97, + 100, + 45, + 52, + 48, + 99, + 48, + 45, + 98, + 50, + 57, + 102, + 45, + 54, + 97, + 52, + 54, + 101, + 48, + 100, + 56, + 56, + 100, + 52, + 51 + ] + }, + { + "origin": "c13cdc12-c7ed-41db-a669-56a664f8127a", + "toBase64Url": "YzEzY2RjMTItYzdlZC00MWRiLWE2NjktNTZhNjY0ZjgxMjdh", + "fromBase64Url": [ + 99, + 49, + 51, + 99, + 100, + 99, + 49, + 50, + 45, + 99, + 55, + 101, + 100, + 45, + 52, + 49, + 100, + 98, + 45, + 97, + 54, + 54, + 57, + 45, + 53, + 54, + 97, + 54, + 54, + 52, + 102, + 56, + 49, + 50, + 55, + 97 + ] + }, + { + "origin": "8507cd12-1a02-4a48-92a5-23fbbe7ad5fe", + "toBase64Url": "ODUwN2NkMTItMWEwMi00YTQ4LTkyYTUtMjNmYmJlN2FkNWZl", + "fromBase64Url": [ + 56, + 53, + 48, + 55, + 99, + 100, + 49, + 50, + 45, + 49, + 97, + 48, + 50, + 45, + 52, + 97, + 52, + 56, + 45, + 57, + 50, + 97, + 53, + 45, + 50, + 51, + 102, + 98, + 98, + 101, + 55, + 97, + 100, + 53, + 102, + 101 + ] + }, + { + "origin": "02b073e9-f33c-4f06-b3aa-d94101a06494", + "toBase64Url": "MDJiMDczZTktZjMzYy00ZjA2LWIzYWEtZDk0MTAxYTA2NDk0", + "fromBase64Url": [ + 48, + 50, + 98, + 48, + 55, + 51, + 101, + 57, + 45, + 102, + 51, + 51, + 99, + 45, + 52, + 102, + 48, + 54, + 45, + 98, + 51, + 97, + 97, + 45, + 100, + 57, + 52, + 49, + 48, + 49, + 97, + 48, + 54, + 52, + 57, + 52 + ] + }, + { + "origin": "064b6627-6dcb-439b-979d-a38c6a4e10f4", + "toBase64Url": "MDY0YjY2MjctNmRjYi00MzliLTk3OWQtYTM4YzZhNGUxMGY0", + "fromBase64Url": [ + 48, + 54, + 52, + 98, + 54, + 54, + 50, + 55, + 45, + 54, + 100, + 99, + 98, + 45, + 52, + 51, + 57, + 98, + 45, + 57, + 55, + 57, + 100, + 45, + 97, + 51, + 56, + 99, + 54, + 97, + 52, + 101, + 49, + 48, + 102, + 52 + ] + }, + { + "origin": "f32a0d44-6d3c-4f68-ba4d-0bc26aed6c7f", + "toBase64Url": "ZjMyYTBkNDQtNmQzYy00ZjY4LWJhNGQtMGJjMjZhZWQ2Yzdm", + "fromBase64Url": [ + 102, + 51, + 50, + 97, + 48, + 100, + 52, + 52, + 45, + 54, + 100, + 51, + 99, + 45, + 52, + 102, + 54, + 56, + 45, + 98, + 97, + 52, + 100, + 45, + 48, + 98, + 99, + 50, + 54, + 97, + 101, + 100, + 54, + 99, + 55, + 102 + ] + }, + { + "origin": "73b68c21-7bab-4608-ad9c-67d2fb954fa2", + "toBase64Url": "NzNiNjhjMjEtN2JhYi00NjA4LWFkOWMtNjdkMmZiOTU0ZmEy", + "fromBase64Url": [ + 55, + 51, + 98, + 54, + 56, + 99, + 50, + 49, + 45, + 55, + 98, + 97, + 98, + 45, + 52, + 54, + 48, + 56, + 45, + 97, + 100, + 57, + 99, + 45, + 54, + 55, + 100, + 50, + 102, + 98, + 57, + 53, + 52, + 102, + 97, + 50 + ] + }, + { + "origin": "d626dd1f-50c5-4438-b920-72b852bb89cd", + "toBase64Url": "ZDYyNmRkMWYtNTBjNS00NDM4LWI5MjAtNzJiODUyYmI4OWNk", + "fromBase64Url": [ + 100, + 54, + 50, + 54, + 100, + 100, + 49, + 102, + 45, + 53, + 48, + 99, + 53, + 45, + 52, + 52, + 51, + 56, + 45, + 98, + 57, + 50, + 48, + 45, + 55, + 50, + 98, + 56, + 53, + 50, + 98, + 98, + 56, + 57, + 99, + 100 + ] + }, + { + "origin": "e598d7e0-282e-4ae9-909b-b18b9710b2b4", + "toBase64Url": "ZTU5OGQ3ZTAtMjgyZS00YWU5LTkwOWItYjE4Yjk3MTBiMmI0", + "fromBase64Url": [ + 101, + 53, + 57, + 56, + 100, + 55, + 101, + 48, + 45, + 50, + 56, + 50, + 101, + 45, + 52, + 97, + 101, + 57, + 45, + 57, + 48, + 57, + 98, + 45, + 98, + 49, + 56, + 98, + 57, + 55, + 49, + 48, + 98, + 50, + 98, + 52 + ] + }, + { + "origin": "84c50a1a-38bb-470b-8347-68d9e323f3d8", + "toBase64Url": "ODRjNTBhMWEtMzhiYi00NzBiLTgzNDctNjhkOWUzMjNmM2Q4", + "fromBase64Url": [ + 56, + 52, + 99, + 53, + 48, + 97, + 49, + 97, + 45, + 51, + 56, + 98, + 98, + 45, + 52, + 55, + 48, + 98, + 45, + 56, + 51, + 52, + 55, + 45, + 54, + 56, + 100, + 57, + 101, + 51, + 50, + 51, + 102, + 51, + 100, + 56 + ] + }, + { + "origin": "53bae0ac-5462-438f-89c4-aa1204146eca", + "toBase64Url": "NTNiYWUwYWMtNTQ2Mi00MzhmLTg5YzQtYWExMjA0MTQ2ZWNh", + "fromBase64Url": [ + 53, + 51, + 98, + 97, + 101, + 48, + 97, + 99, + 45, + 53, + 52, + 54, + 50, + 45, + 52, + 51, + 56, + 102, + 45, + 56, + 57, + 99, + 52, + 45, + 97, + 97, + 49, + 50, + 48, + 52, + 49, + 52, + 54, + 101, + 99, + 97 + ] + }, + { + "origin": "4b487db9-abba-40c5-a0ad-b2250878a332", + "toBase64Url": "NGI0ODdkYjktYWJiYS00MGM1LWEwYWQtYjIyNTA4NzhhMzMy", + "fromBase64Url": [ + 52, + 98, + 52, + 56, + 55, + 100, + 98, + 57, + 45, + 97, + 98, + 98, + 97, + 45, + 52, + 48, + 99, + 53, + 45, + 97, + 48, + 97, + 100, + 45, + 98, + 50, + 50, + 53, + 48, + 56, + 55, + 56, + 97, + 51, + 51, + 50 + ] + }, + { + "origin": "d0941714-eae3-40db-a789-f21aa6401b0d", + "toBase64Url": "ZDA5NDE3MTQtZWFlMy00MGRiLWE3ODktZjIxYWE2NDAxYjBk", + "fromBase64Url": [ + 100, + 48, + 57, + 52, + 49, + 55, + 49, + 52, + 45, + 101, + 97, + 101, + 51, + 45, + 52, + 48, + 100, + 98, + 45, + 97, + 55, + 56, + 57, + 45, + 102, + 50, + 49, + 97, + 97, + 54, + 52, + 48, + 49, + 98, + 48, + 100 + ] + }, + { + "origin": "efb79528-d0bd-433e-be9f-f1020cee08fa", + "toBase64Url": "ZWZiNzk1MjgtZDBiZC00MzNlLWJlOWYtZjEwMjBjZWUwOGZh", + "fromBase64Url": [ + 101, + 102, + 98, + 55, + 57, + 53, + 50, + 56, + 45, + 100, + 48, + 98, + 100, + 45, + 52, + 51, + 51, + 101, + 45, + 98, + 101, + 57, + 102, + 45, + 102, + 49, + 48, + 50, + 48, + 99, + 101, + 101, + 48, + 56, + 102, + 97 + ] + }, + { + "origin": "da2a799b-e1fe-460a-8f3f-0a5f4a124359", + "toBase64Url": "ZGEyYTc5OWItZTFmZS00NjBhLThmM2YtMGE1ZjRhMTI0MzU5", + "fromBase64Url": [ + 100, + 97, + 50, + 97, + 55, + 57, + 57, + 98, + 45, + 101, + 49, + 102, + 101, + 45, + 52, + 54, + 48, + 97, + 45, + 56, + 102, + 51, + 102, + 45, + 48, + 97, + 53, + 102, + 52, + 97, + 49, + 50, + 52, + 51, + 53, + 57 + ] + }, + { + "origin": "822dc1c2-556c-4cee-8c37-411ac530a088", + "toBase64Url": "ODIyZGMxYzItNTU2Yy00Y2VlLThjMzctNDExYWM1MzBhMDg4", + "fromBase64Url": [ + 56, + 50, + 50, + 100, + 99, + 49, + 99, + 50, + 45, + 53, + 53, + 54, + 99, + 45, + 52, + 99, + 101, + 101, + 45, + 56, + 99, + 51, + 55, + 45, + 52, + 49, + 49, + 97, + 99, + 53, + 51, + 48, + 97, + 48, + 56, + 56 + ] + }, + { + "origin": "d035ec77-dd78-4a51-8392-ad28870b0905", + "toBase64Url": "ZDAzNWVjNzctZGQ3OC00YTUxLTgzOTItYWQyODg3MGIwOTA1", + "fromBase64Url": [ + 100, + 48, + 51, + 53, + 101, + 99, + 55, + 55, + 45, + 100, + 100, + 55, + 56, + 45, + 52, + 97, + 53, + 49, + 45, + 56, + 51, + 57, + 50, + 45, + 97, + 100, + 50, + 56, + 56, + 55, + 48, + 98, + 48, + 57, + 48, + 53 + ] + }, + { + "origin": "c934cf59-56a9-45f6-bdbd-7273d2ae86c8", + "toBase64Url": "YzkzNGNmNTktNTZhOS00NWY2LWJkYmQtNzI3M2QyYWU4NmM4", + "fromBase64Url": [ + 99, + 57, + 51, + 52, + 99, + 102, + 53, + 57, + 45, + 53, + 54, + 97, + 57, + 45, + 52, + 53, + 102, + 54, + 45, + 98, + 100, + 98, + 100, + 45, + 55, + 50, + 55, + 51, + 100, + 50, + 97, + 101, + 56, + 54, + 99, + 56 + ] + }, + { + "origin": "b2c572bb-98e1-4d6b-b06c-865a749aacf6", + "toBase64Url": "YjJjNTcyYmItOThlMS00ZDZiLWIwNmMtODY1YTc0OWFhY2Y2", + "fromBase64Url": [ + 98, + 50, + 99, + 53, + 55, + 50, + 98, + 98, + 45, + 57, + 56, + 101, + 49, + 45, + 52, + 100, + 54, + 98, + 45, + 98, + 48, + 54, + 99, + 45, + 56, + 54, + 53, + 97, + 55, + 52, + 57, + 97, + 97, + 99, + 102, + 54 + ] + }, + { + "origin": "5f571217-335c-422e-8c76-0e8b4e1296cf", + "toBase64Url": "NWY1NzEyMTctMzM1Yy00MjJlLThjNzYtMGU4YjRlMTI5NmNm", + "fromBase64Url": [ + 53, + 102, + 53, + 55, + 49, + 50, + 49, + 55, + 45, + 51, + 51, + 53, + 99, + 45, + 52, + 50, + 50, + 101, + 45, + 56, + 99, + 55, + 54, + 45, + 48, + 101, + 56, + 98, + 52, + 101, + 49, + 50, + 57, + 54, + 99, + 102 + ] + } +] \ No newline at end of file diff --git a/clients/liquid-auth-core/tests/__fixtures__/wallet.keys.fixtures.json b/clients/liquid-auth-core/tests/__fixtures__/wallet.keys.fixtures.json new file mode 100644 index 0000000..a3d3614 --- /dev/null +++ b/clients/liquid-auth-core/tests/__fixtures__/wallet.keys.fixtures.json @@ -0,0 +1,2972 @@ +[ + { + "encoded": "65X3KSKFCNX3VUPQDVO3RQUHDZN7BONGBEC6PJWAVKX73DIC356M7M32JM", + "checksum": [ + 207, + 179, + 122, + 75 + ], + "publicKey": [ + 247, + 111, + 181, + 73, + 69, + 19, + 111, + 186, + 209, + 240, + 29, + 93, + 184, + 194, + 135, + 30, + 91, + 240, + 185, + 166, + 9, + 5, + 231, + 166, + 192, + 170, + 175, + 253, + 141, + 2, + 223, + 124 + ], + "privateKey": [ + 236, + 82, + 165, + 230, + 144, + 235, + 251, + 237, + 230, + 241, + 97, + 239, + 230, + 114, + 115, + 205, + 39, + 237, + 91, + 91, + 228, + 34, + 157, + 91, + 55, + 84, + 65, + 60, + 26, + 48, + 169, + 8, + 247, + 111, + 181, + 73, + 69, + 19, + 111, + 186, + 209, + 240, + 29, + 93, + 184, + 194, + 135, + 30, + 91, + 240, + 185, + 166, + 9, + 5, + 231, + 166, + 192, + 170, + 175, + 253, + 141, + 2, + 223, + 124 + ], + "valid": true + }, + { + "encoded": "3DZKAZ2YN5JN5QBGWM75W23O64OTW4MPPQQDDS5AILP3QYMFPKKIEUDTAM", + "checksum": [ + 130, + 80, + 115, + 3 + ], + "publicKey": [ + 216, + 242, + 160, + 103, + 88, + 111, + 82, + 222, + 192, + 38, + 179, + 63, + 219, + 107, + 110, + 247, + 29, + 59, + 113, + 143, + 124, + 32, + 49, + 203, + 160, + 66, + 223, + 184, + 97, + 133, + 122, + 148 + ], + "privateKey": [ + 152, + 114, + 225, + 108, + 240, + 100, + 213, + 212, + 172, + 48, + 32, + 144, + 151, + 231, + 32, + 30, + 173, + 153, + 195, + 20, + 174, + 169, + 232, + 82, + 236, + 159, + 30, + 96, + 252, + 142, + 39, + 13, + 216, + 242, + 160, + 103, + 88, + 111, + 82, + 222, + 192, + 38, + 179, + 63, + 219, + 107, + 110, + 247, + 29, + 59, + 113, + 143, + 124, + 32, + 49, + 203, + 160, + 66, + 223, + 184, + 97, + 133, + 122, + 148 + ], + "valid": true + }, + { + "encoded": "3CA3UDJ7AAWQ7XEBL7LKYBN4IQ4IRJMN3BO2DTAE7LPWMN4UFCFI6ZLXYQ", + "checksum": [ + 143, + 101, + 119, + 196 + ], + "publicKey": [ + 216, + 129, + 186, + 13, + 63, + 0, + 45, + 15, + 220, + 129, + 95, + 214, + 172, + 5, + 188, + 68, + 56, + 136, + 165, + 141, + 216, + 93, + 161, + 204, + 4, + 250, + 223, + 102, + 55, + 148, + 40, + 138 + ], + "privateKey": [ + 60, + 205, + 4, + 66, + 151, + 5, + 167, + 248, + 113, + 97, + 104, + 157, + 84, + 50, + 89, + 30, + 144, + 185, + 44, + 229, + 202, + 201, + 156, + 195, + 39, + 47, + 19, + 233, + 108, + 69, + 129, + 218, + 216, + 129, + 186, + 13, + 63, + 0, + 45, + 15, + 220, + 129, + 95, + 214, + 172, + 5, + 188, + 68, + 56, + 136, + 165, + 141, + 216, + 93, + 161, + 204, + 4, + 250, + 223, + 102, + 55, + 148, + 40, + 138 + ], + "valid": true + }, + { + "encoded": "IFJIXXNSNTAUCDML4QVJ6T3VXSPBRDJCNX2YLZFPRO7I7GTTW5OSXTUSFU", + "checksum": [ + 43, + 206, + 146, + 45 + ], + "publicKey": [ + 65, + 82, + 139, + 221, + 178, + 108, + 193, + 65, + 13, + 139, + 228, + 42, + 159, + 79, + 117, + 188, + 158, + 24, + 141, + 34, + 109, + 245, + 133, + 228, + 175, + 139, + 190, + 143, + 154, + 115, + 183, + 93 + ], + "privateKey": [ + 47, + 32, + 137, + 143, + 141, + 169, + 18, + 201, + 164, + 162, + 151, + 241, + 159, + 238, + 30, + 215, + 92, + 41, + 79, + 3, + 253, + 206, + 123, + 30, + 160, + 207, + 39, + 194, + 23, + 77, + 25, + 87, + 65, + 82, + 139, + 221, + 178, + 108, + 193, + 65, + 13, + 139, + 228, + 42, + 159, + 79, + 117, + 188, + 158, + 24, + 141, + 34, + 109, + 245, + 133, + 228, + 175, + 139, + 190, + 143, + 154, + 115, + 183, + 93 + ], + "valid": true + }, + { + "encoded": "DEVJC5CGWY5HW4MWAR7B2LJ27UGN6FIBDZSZHOXPYFBEOQ4CAKHOIGBAFU", + "checksum": [ + 228, + 24, + 32, + 45 + ], + "publicKey": [ + 25, + 42, + 145, + 116, + 70, + 182, + 58, + 123, + 113, + 150, + 4, + 126, + 29, + 45, + 58, + 253, + 12, + 223, + 21, + 1, + 30, + 101, + 147, + 186, + 239, + 193, + 66, + 71, + 67, + 130, + 2, + 142 + ], + "privateKey": [ + 59, + 135, + 230, + 131, + 153, + 70, + 197, + 206, + 114, + 168, + 168, + 48, + 224, + 98, + 88, + 6, + 152, + 206, + 54, + 215, + 145, + 201, + 19, + 105, + 141, + 2, + 12, + 119, + 104, + 49, + 67, + 173, + 25, + 42, + 145, + 116, + 70, + 182, + 58, + 123, + 113, + 150, + 4, + 126, + 29, + 45, + 58, + 253, + 12, + 223, + 21, + 1, + 30, + 101, + 147, + 186, + 239, + 193, + 66, + 71, + 67, + 130, + 2, + 142 + ], + "valid": true + }, + { + "encoded": "7F55SDXF6MAB4CPZDRJEJOPLAXUVC2K4UKCOFE2XZBUWM3PUZHHDAPBB6Y", + "checksum": [ + 48, + 60, + 33, + 246 + ], + "publicKey": [ + 249, + 123, + 217, + 14, + 229, + 243, + 0, + 30, + 9, + 249, + 28, + 82, + 68, + 185, + 235, + 5, + 233, + 81, + 105, + 92, + 162, + 132, + 226, + 147, + 87, + 200, + 105, + 102, + 109, + 244, + 201, + 206 + ], + "privateKey": [ + 170, + 229, + 17, + 238, + 54, + 123, + 122, + 60, + 139, + 221, + 182, + 156, + 180, + 215, + 174, + 87, + 99, + 138, + 60, + 38, + 232, + 75, + 134, + 182, + 181, + 152, + 248, + 252, + 182, + 132, + 218, + 142, + 249, + 123, + 217, + 14, + 229, + 243, + 0, + 30, + 9, + 249, + 28, + 82, + 68, + 185, + 235, + 5, + 233, + 81, + 105, + 92, + 162, + 132, + 226, + 147, + 87, + 200, + 105, + 102, + 109, + 244, + 201, + 206 + ], + "valid": true + }, + { + "encoded": "YZILV5REF7QEWU4AXWB47IPPV6NZIX3GLI5OW77DY7COHNA2Q6ZOZJEEIA", + "checksum": [ + 236, + 164, + 132, + 64 + ], + "publicKey": [ + 198, + 80, + 186, + 246, + 36, + 47, + 224, + 75, + 83, + 128, + 189, + 131, + 207, + 161, + 239, + 175, + 155, + 148, + 95, + 102, + 90, + 58, + 235, + 127, + 227, + 199, + 196, + 227, + 180, + 26, + 135, + 178 + ], + "privateKey": [ + 200, + 107, + 43, + 245, + 88, + 254, + 51, + 104, + 17, + 85, + 250, + 110, + 170, + 119, + 20, + 131, + 124, + 31, + 32, + 95, + 201, + 69, + 210, + 175, + 142, + 53, + 183, + 156, + 82, + 146, + 148, + 71, + 198, + 80, + 186, + 246, + 36, + 47, + 224, + 75, + 83, + 128, + 189, + 131, + 207, + 161, + 239, + 175, + 155, + 148, + 95, + 102, + 90, + 58, + 235, + 127, + 227, + 199, + 196, + 227, + 180, + 26, + 135, + 178 + ], + "valid": true + }, + { + "encoded": "7KQHLEGZYRASKPLX56Y2HX7IXHFKA7HQ73SNUHOGJJVAR7HG4FGN5KPJOY", + "checksum": [ + 222, + 169, + 233, + 118 + ], + "publicKey": [ + 250, + 160, + 117, + 144, + 217, + 196, + 65, + 37, + 61, + 119, + 239, + 177, + 163, + 223, + 232, + 185, + 202, + 160, + 124, + 240, + 254, + 228, + 218, + 29, + 198, + 74, + 106, + 8, + 252, + 230, + 225, + 76 + ], + "privateKey": [ + 149, + 127, + 178, + 220, + 65, + 150, + 96, + 238, + 72, + 215, + 215, + 107, + 116, + 136, + 188, + 151, + 101, + 82, + 161, + 17, + 189, + 41, + 17, + 232, + 22, + 57, + 183, + 130, + 167, + 68, + 79, + 49, + 250, + 160, + 117, + 144, + 217, + 196, + 65, + 37, + 61, + 119, + 239, + 177, + 163, + 223, + 232, + 185, + 202, + 160, + 124, + 240, + 254, + 228, + 218, + 29, + 198, + 74, + 106, + 8, + 252, + 230, + 225, + 76 + ], + "valid": true + }, + { + "encoded": "LIC5K5IW6K2GE5Q5GA3E6OZA7FQUCI4XR5A3GE3SLOF6U3LXAT2J7RIRKE", + "checksum": [ + 159, + 197, + 17, + 81 + ], + "publicKey": [ + 90, + 5, + 213, + 117, + 22, + 242, + 180, + 98, + 118, + 29, + 48, + 54, + 79, + 59, + 32, + 249, + 97, + 65, + 35, + 151, + 143, + 65, + 179, + 19, + 114, + 91, + 139, + 234, + 109, + 119, + 4, + 244 + ], + "privateKey": [ + 255, + 188, + 242, + 10, + 174, + 222, + 130, + 43, + 72, + 183, + 35, + 151, + 13, + 4, + 71, + 139, + 206, + 175, + 235, + 38, + 37, + 247, + 101, + 193, + 96, + 125, + 1, + 207, + 69, + 48, + 47, + 158, + 90, + 5, + 213, + 117, + 22, + 242, + 180, + 98, + 118, + 29, + 48, + 54, + 79, + 59, + 32, + 249, + 97, + 65, + 35, + 151, + 143, + 65, + 179, + 19, + 114, + 91, + 139, + 234, + 109, + 119, + 4, + 244 + ], + "valid": true + }, + { + "encoded": "ABRYPE4VTV7Y25NJPYA3ENHUCIZHD4AD3L57QFM6GMUFSPPH5NZNLINR2U", + "checksum": [ + 213, + 161, + 177, + 213 + ], + "publicKey": [ + 0, + 99, + 135, + 147, + 149, + 157, + 127, + 141, + 117, + 169, + 126, + 1, + 178, + 52, + 244, + 18, + 50, + 113, + 240, + 3, + 218, + 251, + 248, + 21, + 158, + 51, + 40, + 89, + 61, + 231, + 235, + 114 + ], + "privateKey": [ + 26, + 185, + 149, + 114, + 143, + 48, + 38, + 79, + 77, + 45, + 9, + 217, + 48, + 239, + 132, + 182, + 220, + 33, + 72, + 101, + 28, + 194, + 32, + 9, + 211, + 57, + 219, + 51, + 225, + 157, + 235, + 68, + 0, + 99, + 135, + 147, + 149, + 157, + 127, + 141, + 117, + 169, + 126, + 1, + 178, + 52, + 244, + 18, + 50, + 113, + 240, + 3, + 218, + 251, + 248, + 21, + 158, + 51, + 40, + 89, + 61, + 231, + 235, + 114 + ], + "valid": true + }, + { + "encoded": "TLRWCVZN22GRXQQEDWCMP64UD63DDKX5RU2KLG2SROOSHMRCW2TYBX6IPA", + "checksum": [ + 128, + 223, + 200, + 120 + ], + "publicKey": [ + 154, + 227, + 97, + 87, + 45, + 214, + 141, + 27, + 194, + 4, + 29, + 132, + 199, + 251, + 148, + 31, + 182, + 49, + 170, + 253, + 141, + 52, + 165, + 155, + 82, + 139, + 157, + 35, + 178, + 34, + 182, + 167 + ], + "privateKey": [ + 142, + 247, + 46, + 26, + 245, + 91, + 2, + 250, + 59, + 32, + 77, + 184, + 143, + 20, + 252, + 20, + 230, + 81, + 31, + 99, + 78, + 174, + 62, + 132, + 203, + 79, + 112, + 39, + 10, + 243, + 45, + 58, + 154, + 227, + 97, + 87, + 45, + 214, + 141, + 27, + 194, + 4, + 29, + 132, + 199, + 251, + 148, + 31, + 182, + 49, + 170, + 253, + 141, + 52, + 165, + 155, + 82, + 139, + 157, + 35, + 178, + 34, + 182, + 167 + ], + "valid": true + }, + { + "encoded": "RPM3AIUUYIZHZ53MTWQV57SIEMCWLLAWBZU5V2PGGCAD4LNAGYAKPTLK7M", + "checksum": [ + 167, + 205, + 106, + 251 + ], + "publicKey": [ + 139, + 217, + 176, + 34, + 148, + 194, + 50, + 124, + 247, + 108, + 157, + 161, + 94, + 254, + 72, + 35, + 5, + 101, + 172, + 22, + 14, + 105, + 218, + 233, + 230, + 48, + 128, + 62, + 45, + 160, + 54, + 0 + ], + "privateKey": [ + 83, + 91, + 204, + 156, + 166, + 183, + 152, + 183, + 89, + 116, + 168, + 194, + 158, + 207, + 200, + 225, + 5, + 217, + 96, + 232, + 204, + 119, + 171, + 68, + 149, + 88, + 0, + 69, + 226, + 124, + 156, + 40, + 139, + 217, + 176, + 34, + 148, + 194, + 50, + 124, + 247, + 108, + 157, + 161, + 94, + 254, + 72, + 35, + 5, + 101, + 172, + 22, + 14, + 105, + 218, + 233, + 230, + 48, + 128, + 62, + 45, + 160, + 54, + 0 + ], + "valid": true + }, + { + "encoded": "Y5BMK2M4RCTM4P4NI4KITKG6RDVIAFTHAWZOFQRZ3DY6LQANC47G67AQDA", + "checksum": [ + 111, + 124, + 16, + 24 + ], + "publicKey": [ + 199, + 66, + 197, + 105, + 156, + 136, + 166, + 206, + 63, + 141, + 71, + 20, + 137, + 168, + 222, + 136, + 234, + 128, + 22, + 103, + 5, + 178, + 226, + 194, + 57, + 216, + 241, + 229, + 192, + 13, + 23, + 62 + ], + "privateKey": [ + 231, + 105, + 81, + 0, + 19, + 201, + 132, + 39, + 165, + 197, + 52, + 54, + 182, + 11, + 163, + 210, + 58, + 56, + 146, + 198, + 100, + 44, + 94, + 5, + 152, + 250, + 79, + 193, + 233, + 34, + 104, + 157, + 199, + 66, + 197, + 105, + 156, + 136, + 166, + 206, + 63, + 141, + 71, + 20, + 137, + 168, + 222, + 136, + 234, + 128, + 22, + 103, + 5, + 178, + 226, + 194, + 57, + 216, + 241, + 229, + 192, + 13, + 23, + 62 + ], + "valid": true + }, + { + "encoded": "UM4F2PWJDTUT6JGMC6EHTEQH3ZYDSWIITY7LJX5WKWSMGLS3BOEREE64AI", + "checksum": [ + 18, + 19, + 220, + 2 + ], + "publicKey": [ + 163, + 56, + 93, + 62, + 201, + 28, + 233, + 63, + 36, + 204, + 23, + 136, + 121, + 146, + 7, + 222, + 112, + 57, + 89, + 8, + 158, + 62, + 180, + 223, + 182, + 85, + 164, + 195, + 46, + 91, + 11, + 137 + ], + "privateKey": [ + 248, + 82, + 21, + 209, + 157, + 247, + 81, + 107, + 89, + 168, + 80, + 67, + 122, + 44, + 171, + 169, + 41, + 181, + 9, + 192, + 166, + 134, + 137, + 128, + 149, + 201, + 214, + 31, + 117, + 193, + 190, + 80, + 163, + 56, + 93, + 62, + 201, + 28, + 233, + 63, + 36, + 204, + 23, + 136, + 121, + 146, + 7, + 222, + 112, + 57, + 89, + 8, + 158, + 62, + 180, + 223, + 182, + 85, + 164, + 195, + 46, + 91, + 11, + 137 + ], + "valid": true + }, + { + "encoded": "Z4EZILHIAVL22WSXYQ4YNOXDVZAYJCXOROQ3RV2ZPFORWXITDIGJYPT7AE", + "checksum": [ + 156, + 62, + 127, + 1 + ], + "publicKey": [ + 207, + 9, + 148, + 44, + 232, + 5, + 87, + 173, + 90, + 87, + 196, + 57, + 134, + 186, + 227, + 174, + 65, + 132, + 138, + 238, + 139, + 161, + 184, + 215, + 89, + 121, + 93, + 27, + 93, + 19, + 26, + 12 + ], + "privateKey": [ + 78, + 155, + 21, + 250, + 204, + 122, + 133, + 236, + 164, + 137, + 234, + 124, + 161, + 0, + 99, + 3, + 89, + 135, + 152, + 128, + 153, + 85, + 240, + 227, + 187, + 140, + 181, + 128, + 145, + 122, + 22, + 76, + 207, + 9, + 148, + 44, + 232, + 5, + 87, + 173, + 90, + 87, + 196, + 57, + 134, + 186, + 227, + 174, + 65, + 132, + 138, + 238, + 139, + 161, + 184, + 215, + 89, + 121, + 93, + 27, + 93, + 19, + 26, + 12 + ], + "valid": true + }, + { + "encoded": "W67VZ3BUOIHYKQTRQMRST3D3DH3GZQ43SLDPUN2UUQRQG7QV24BXZORLZ4", + "checksum": [ + 124, + 186, + 43, + 207 + ], + "publicKey": [ + 183, + 191, + 92, + 236, + 52, + 114, + 15, + 133, + 66, + 113, + 131, + 35, + 41, + 236, + 123, + 25, + 246, + 108, + 195, + 155, + 146, + 198, + 250, + 55, + 84, + 164, + 35, + 3, + 126, + 21, + 215, + 3 + ], + "privateKey": [ + 197, + 54, + 178, + 164, + 214, + 232, + 186, + 145, + 212, + 210, + 240, + 179, + 30, + 138, + 155, + 165, + 11, + 180, + 13, + 241, + 10, + 181, + 210, + 72, + 125, + 124, + 199, + 142, + 49, + 219, + 155, + 163, + 183, + 191, + 92, + 236, + 52, + 114, + 15, + 133, + 66, + 113, + 131, + 35, + 41, + 236, + 123, + 25, + 246, + 108, + 195, + 155, + 146, + 198, + 250, + 55, + 84, + 164, + 35, + 3, + 126, + 21, + 215, + 3 + ], + "valid": true + }, + { + "encoded": "5QZA22GPL44PLHHE5VQLMI7N6GTHCJIUARS4VMLF5UTV5WCWAH5N2C7IYQ", + "checksum": [ + 221, + 11, + 232, + 196 + ], + "publicKey": [ + 236, + 50, + 13, + 104, + 207, + 95, + 56, + 245, + 156, + 228, + 237, + 96, + 182, + 35, + 237, + 241, + 166, + 113, + 37, + 20, + 4, + 101, + 202, + 177, + 101, + 237, + 39, + 94, + 216, + 86, + 1, + 250 + ], + "privateKey": [ + 215, + 168, + 230, + 6, + 122, + 132, + 10, + 131, + 105, + 210, + 33, + 72, + 199, + 63, + 234, + 0, + 154, + 126, + 34, + 243, + 70, + 241, + 217, + 197, + 237, + 62, + 218, + 56, + 111, + 209, + 77, + 249, + 236, + 50, + 13, + 104, + 207, + 95, + 56, + 245, + 156, + 228, + 237, + 96, + 182, + 35, + 237, + 241, + 166, + 113, + 37, + 20, + 4, + 101, + 202, + 177, + 101, + 237, + 39, + 94, + 216, + 86, + 1, + 250 + ], + "valid": true + }, + { + "encoded": "ZA44DPMGYEPONVXWHUTBQ66SKCB5PX7BPWHIMFKAOEV5MRBJKL7ADHXGQY", + "checksum": [ + 1, + 158, + 230, + 134 + ], + "publicKey": [ + 200, + 57, + 193, + 189, + 134, + 193, + 30, + 230, + 214, + 246, + 61, + 38, + 24, + 123, + 210, + 80, + 131, + 215, + 223, + 225, + 125, + 142, + 134, + 21, + 64, + 113, + 43, + 214, + 68, + 41, + 82, + 254 + ], + "privateKey": [ + 243, + 190, + 156, + 61, + 249, + 117, + 242, + 42, + 26, + 52, + 88, + 164, + 80, + 66, + 196, + 99, + 223, + 96, + 56, + 108, + 69, + 43, + 210, + 52, + 235, + 177, + 145, + 183, + 130, + 32, + 133, + 104, + 200, + 57, + 193, + 189, + 134, + 193, + 30, + 230, + 214, + 246, + 61, + 38, + 24, + 123, + 210, + 80, + 131, + 215, + 223, + 225, + 125, + 142, + 134, + 21, + 64, + 113, + 43, + 214, + 68, + 41, + 82, + 254 + ], + "valid": true + }, + { + "encoded": "MQ3AVNCM7P7BD7NHDD3HFEMJKTAZUTHI7FVLZTV2UJBW4TDBYCANNXF2PU", + "checksum": [ + 214, + 220, + 186, + 125 + ], + "publicKey": [ + 100, + 54, + 10, + 180, + 76, + 251, + 254, + 17, + 253, + 167, + 24, + 246, + 114, + 145, + 137, + 84, + 193, + 154, + 76, + 232, + 249, + 106, + 188, + 206, + 186, + 162, + 67, + 110, + 76, + 97, + 192, + 128 + ], + "privateKey": [ + 70, + 121, + 167, + 29, + 7, + 192, + 110, + 199, + 56, + 217, + 37, + 76, + 62, + 142, + 87, + 172, + 204, + 86, + 250, + 151, + 149, + 166, + 125, + 44, + 67, + 86, + 190, + 106, + 52, + 67, + 74, + 76, + 100, + 54, + 10, + 180, + 76, + 251, + 254, + 17, + 253, + 167, + 24, + 246, + 114, + 145, + 137, + 84, + 193, + 154, + 76, + 232, + 249, + 106, + 188, + 206, + 186, + 162, + 67, + 110, + 76, + 97, + 192, + 128 + ], + "valid": true + }, + { + "encoded": "RHY76D66VAWH7CAS3TCDN4TVUKRFT6SRIBAHSIQLX65BT6ZUXHEOXFM4IU", + "checksum": [ + 235, + 149, + 156, + 69 + ], + "publicKey": [ + 137, + 241, + 255, + 15, + 222, + 168, + 44, + 127, + 136, + 18, + 220, + 196, + 54, + 242, + 117, + 162, + 162, + 89, + 250, + 81, + 64, + 64, + 121, + 34, + 11, + 191, + 186, + 25, + 251, + 52, + 185, + 200 + ], + "privateKey": [ + 121, + 22, + 228, + 11, + 197, + 95, + 122, + 61, + 187, + 147, + 228, + 14, + 156, + 6, + 128, + 96, + 111, + 111, + 242, + 234, + 197, + 159, + 147, + 121, + 109, + 154, + 155, + 40, + 78, + 35, + 74, + 226, + 137, + 241, + 255, + 15, + 222, + 168, + 44, + 127, + 136, + 18, + 220, + 196, + 54, + 242, + 117, + 162, + 162, + 89, + 250, + 81, + 64, + 64, + 121, + 34, + 11, + 191, + 186, + 25, + 251, + 52, + 185, + 200 + ], + "valid": true + }, + { + "encoded": "KDHPRHISHU25PJO5OG36NS5MMPPRMLITDWRHZKSKYVMH4YUCAGRYTHDYCY", + "checksum": [ + 137, + 156, + 120, + 22 + ], + "publicKey": [ + 80, + 206, + 248, + 157, + 18, + 61, + 53, + 215, + 165, + 221, + 113, + 183, + 230, + 203, + 172, + 99, + 223, + 22, + 45, + 19, + 29, + 162, + 124, + 170, + 74, + 197, + 88, + 126, + 98, + 130, + 1, + 163 + ], + "privateKey": [ + 194, + 133, + 62, + 0, + 75, + 220, + 24, + 137, + 21, + 68, + 233, + 242, + 236, + 145, + 44, + 49, + 218, + 158, + 249, + 177, + 236, + 11, + 85, + 94, + 224, + 98, + 236, + 28, + 172, + 204, + 26, + 140, + 80, + 206, + 248, + 157, + 18, + 61, + 53, + 215, + 165, + 221, + 113, + 183, + 230, + 203, + 172, + 99, + 223, + 22, + 45, + 19, + 29, + 162, + 124, + 170, + 74, + 197, + 88, + 126, + 98, + 130, + 1, + 163 + ], + "valid": true + }, + { + "encoded": "RXVJINFGGMBCNU7NOFKTAOFIFJ5R3A4EWHKAWCW6KNXTRDQCFCRGV3BF4M", + "checksum": [ + 106, + 236, + 37, + 227 + ], + "publicKey": [ + 141, + 234, + 148, + 52, + 166, + 51, + 2, + 38, + 211, + 237, + 113, + 85, + 48, + 56, + 168, + 42, + 123, + 29, + 131, + 132, + 177, + 212, + 11, + 10, + 222, + 83, + 111, + 56, + 142, + 2, + 40, + 162 + ], + "privateKey": [ + 174, + 110, + 127, + 107, + 13, + 238, + 168, + 163, + 107, + 207, + 64, + 140, + 144, + 65, + 3, + 179, + 50, + 248, + 133, + 145, + 228, + 201, + 13, + 149, + 94, + 80, + 9, + 24, + 89, + 183, + 48, + 177, + 141, + 234, + 148, + 52, + 166, + 51, + 2, + 38, + 211, + 237, + 113, + 85, + 48, + 56, + 168, + 42, + 123, + 29, + 131, + 132, + 177, + 212, + 11, + 10, + 222, + 83, + 111, + 56, + 142, + 2, + 40, + 162 + ], + "valid": true + }, + { + "encoded": "GSBE3TORJTLULQ5TLJWYUN4TGL2ZPDWDIJPSNZJD5UZRCUBWAKDF53OUC4", + "checksum": [ + 94, + 237, + 212, + 23 + ], + "publicKey": [ + 52, + 130, + 77, + 205, + 209, + 76, + 215, + 69, + 195, + 179, + 90, + 109, + 138, + 55, + 147, + 50, + 245, + 151, + 142, + 195, + 66, + 95, + 38, + 229, + 35, + 237, + 51, + 17, + 80, + 54, + 2, + 134 + ], + "privateKey": [ + 252, + 63, + 28, + 247, + 87, + 146, + 55, + 131, + 127, + 151, + 3, + 238, + 74, + 46, + 69, + 50, + 102, + 89, + 155, + 217, + 159, + 41, + 186, + 73, + 137, + 198, + 147, + 32, + 37, + 208, + 185, + 152, + 52, + 130, + 77, + 205, + 209, + 76, + 215, + 69, + 195, + 179, + 90, + 109, + 138, + 55, + 147, + 50, + 245, + 151, + 142, + 195, + 66, + 95, + 38, + 229, + 35, + 237, + 51, + 17, + 80, + 54, + 2, + 134 + ], + "valid": true + }, + { + "encoded": "D2L64V5Z66TLNWU5ZM54A336MTMS5AZKR5OPSMBLR4XD7VBYKETNCSAY64", + "checksum": [ + 209, + 72, + 24, + 247 + ], + "publicKey": [ + 30, + 151, + 238, + 87, + 185, + 247, + 166, + 182, + 218, + 157, + 203, + 59, + 192, + 111, + 126, + 100, + 217, + 46, + 131, + 42, + 143, + 92, + 249, + 48, + 43, + 143, + 46, + 63, + 212, + 56, + 81, + 38 + ], + "privateKey": [ + 34, + 81, + 159, + 199, + 84, + 137, + 16, + 242, + 193, + 192, + 215, + 222, + 202, + 69, + 41, + 115, + 205, + 0, + 162, + 254, + 53, + 75, + 16, + 141, + 76, + 23, + 120, + 227, + 103, + 13, + 222, + 254, + 30, + 151, + 238, + 87, + 185, + 247, + 166, + 182, + 218, + 157, + 203, + 59, + 192, + 111, + 126, + 100, + 217, + 46, + 131, + 42, + 143, + 92, + 249, + 48, + 43, + 143, + 46, + 63, + 212, + 56, + 81, + 38 + ], + "valid": true + }, + { + "encoded": "4YC7UGVCQTXTN6O4JU6NRR6II47JSMMBQFB5KQLAQOJQPPWMZBWPEYMEGU", + "checksum": [ + 242, + 97, + 132, + 53 + ], + "publicKey": [ + 230, + 5, + 250, + 26, + 162, + 132, + 239, + 54, + 249, + 220, + 77, + 60, + 216, + 199, + 200, + 71, + 62, + 153, + 49, + 129, + 129, + 67, + 213, + 65, + 96, + 131, + 147, + 7, + 190, + 204, + 200, + 108 + ], + "privateKey": [ + 235, + 119, + 55, + 43, + 251, + 155, + 99, + 84, + 236, + 172, + 40, + 207, + 137, + 142, + 14, + 1, + 219, + 100, + 11, + 11, + 173, + 130, + 192, + 235, + 137, + 60, + 202, + 202, + 98, + 211, + 15, + 223, + 230, + 5, + 250, + 26, + 162, + 132, + 239, + 54, + 249, + 220, + 77, + 60, + 216, + 199, + 200, + 71, + 62, + 153, + 49, + 129, + 129, + 67, + 213, + 65, + 96, + 131, + 147, + 7, + 190, + 204, + 200, + 108 + ], + "valid": true + }, + { + "encoded": "4ZRBSTR35CQI4HYQPF3TNTRD4UMC2JBU5HOOMXYKQT6XK73VZ7T4D727QI", + "checksum": [ + 193, + 255, + 95, + 130 + ], + "publicKey": [ + 230, + 98, + 25, + 78, + 59, + 232, + 160, + 142, + 31, + 16, + 121, + 119, + 54, + 206, + 35, + 229, + 24, + 45, + 36, + 52, + 233, + 220, + 230, + 95, + 10, + 132, + 253, + 117, + 127, + 117, + 207, + 231 + ], + "privateKey": [ + 99, + 201, + 58, + 96, + 244, + 72, + 243, + 128, + 178, + 220, + 187, + 212, + 171, + 203, + 31, + 200, + 165, + 250, + 188, + 110, + 159, + 111, + 54, + 31, + 78, + 111, + 233, + 41, + 210, + 215, + 230, + 237, + 230, + 98, + 25, + 78, + 59, + 232, + 160, + 142, + 31, + 16, + 121, + 119, + 54, + 206, + 35, + 229, + 24, + 45, + 36, + 52, + 233, + 220, + 230, + 95, + 10, + 132, + 253, + 117, + 127, + 117, + 207, + 231 + ], + "valid": true + }, + { + "encoded": "CDJO6P5IBFG2QXOPK7MAWNC5FDITMKYSE2T7RC5WERIBT2JRLINNGJBIBE", + "checksum": [ + 211, + 36, + 40, + 9 + ], + "publicKey": [ + 16, + 210, + 239, + 63, + 168, + 9, + 77, + 168, + 93, + 207, + 87, + 216, + 11, + 52, + 93, + 40, + 209, + 54, + 43, + 18, + 38, + 167, + 248, + 139, + 182, + 36, + 80, + 25, + 233, + 49, + 90, + 26 + ], + "privateKey": [ + 34, + 196, + 2, + 58, + 182, + 159, + 66, + 30, + 196, + 172, + 242, + 106, + 199, + 35, + 215, + 3, + 234, + 190, + 151, + 60, + 238, + 168, + 33, + 126, + 80, + 71, + 85, + 240, + 172, + 240, + 175, + 238, + 16, + 210, + 239, + 63, + 168, + 9, + 77, + 168, + 93, + 207, + 87, + 216, + 11, + 52, + 93, + 40, + 209, + 54, + 43, + 18, + 38, + 167, + 248, + 139, + 182, + 36, + 80, + 25, + 233, + 49, + 90, + 26 + ], + "valid": true + } +] \ No newline at end of file diff --git a/clients/liquid-auth-core/tests/encoding.spec.js b/clients/liquid-auth-core/tests/encoding.spec.js new file mode 100644 index 0000000..7115f46 --- /dev/null +++ b/clients/liquid-auth-core/tests/encoding.spec.js @@ -0,0 +1,46 @@ +import test from 'node:test'; +import assert from 'node:assert'; + +import * as encoding from '../lib/encoding.js'; +import base64UrlFixtures from './__fixtures__/encoding.base64url.fixtures.json' assert {type: 'json'}; +import walletKeysFixtures from './__fixtures__/wallet.keys.fixtures.json' assert {type: 'json'}; + + +// Invalid Inputs +test(`fromBase64URL(*) throws ${encoding.INVALID_BASE64URL_INPUT}`, function(){ + assert.throws(()=>encoding.fromBase64Url(12345), new Error(encoding.INVALID_BASE64URL_INPUT)); +}) +base64UrlFixtures.forEach((fixture, i)=>{ + const encoder = new TextEncoder(); + + test(`toBase64URL(${fixture.origin})`, () => { + assert.equal(fixture.toBase64Url, encoding.toBase64URL(i % 2 ? encoder.encode(fixture.origin) : fixture.fromBase64Url)); + }) + test(`fromBase64URL(${fixture.origin})`, () => { + assert.deepEqual(new Uint8Array(fixture.fromBase64Url), encoding.fromBase64Url(fixture.toBase64Url)); + }); +}) + + + + +// Test Basic Inputs +test(`decodeAddress(*) throws ${encoding.MALFORMED_ADDRESS_ERROR_MSG}`, function(){ + assert.throws(()=>encoding.decodeAddress(12345), new Error(encoding.MALFORMED_ADDRESS_ERROR_MSG)); +}) +// Algorand Address Tests +walletKeysFixtures.forEach(function (fixture){ + test(`decodeAddress(${fixture.encoded})`, function(){ + const decoded = encoding.decodeAddress(fixture.encoded); + assert.deepEqual(new Uint8Array(fixture.publicKey), decoded); + }) + test(`encodeAddress(${fixture.encoded})`, function() { + const address = encoding.encodeAddress(new Uint8Array(fixture.publicKey)); + assert.equal(fixture.encoded, address); + }) + + test(`decodeAddress(${fixture.encoded.slice(0, -4) + "===="}) throws ${encoding.ALGORAND_ADDRESS_BAD_CHECKSUM_ERROR_MSG}`, function(){ + assert.throws(()=>encoding.decodeAddress(fixture.encoded.slice(0, -4) + "===="), new Error(encoding.ALGORAND_ADDRESS_BAD_CHECKSUM_ERROR_MSG)) + }) + +}) diff --git a/clients/liquid-auth-core/tests/generate.fixtures.js b/clients/liquid-auth-core/tests/generate.fixtures.js new file mode 100644 index 0000000..cc97449 --- /dev/null +++ b/clients/liquid-auth-core/tests/generate.fixtures.js @@ -0,0 +1,61 @@ +import {toBase64URL, } from "../lib/index.js"; +import * as fs from "node:fs"; +import algosdk from 'algosdk' + +const data = [ + "9b1a1b53-0456-4fcd-b10a-4db40352d58a", //OWIxYTFiNTMtMDQ1Ni00ZmNkLWIxMGEtNGRiNDAzNTJkNThh - Validated + "7646809", // Catch 7 Bits + "b1338059", // Catch 8 Bits + "582bd065-f280-4574-b315-3398c75296c5", + "29572cc5-7c36-4016-9825-abcc9ba51dae", + "2ce09bdf-69d1-4b08-b93e-3af4ca6a657a", + "15210d8d-308c-4acd-843c-ba6babada62c", + "cba26c96-51ad-40c0-b29f-6a46e0d88d43", + "c13cdc12-c7ed-41db-a669-56a664f8127a", + "8507cd12-1a02-4a48-92a5-23fbbe7ad5fe", + "02b073e9-f33c-4f06-b3aa-d94101a06494", + "064b6627-6dcb-439b-979d-a38c6a4e10f4", + "f32a0d44-6d3c-4f68-ba4d-0bc26aed6c7f", + "73b68c21-7bab-4608-ad9c-67d2fb954fa2", + "d626dd1f-50c5-4438-b920-72b852bb89cd", + "e598d7e0-282e-4ae9-909b-b18b9710b2b4", + "84c50a1a-38bb-470b-8347-68d9e323f3d8", + "53bae0ac-5462-438f-89c4-aa1204146eca", + "4b487db9-abba-40c5-a0ad-b2250878a332", + "d0941714-eae3-40db-a789-f21aa6401b0d", + "efb79528-d0bd-433e-be9f-f1020cee08fa", + "da2a799b-e1fe-460a-8f3f-0a5f4a124359", + "822dc1c2-556c-4cee-8c37-411ac530a088", + "d035ec77-dd78-4a51-8392-ad28870b0905", + "c934cf59-56a9-45f6-bdbd-7273d2ae86c8", + "b2c572bb-98e1-4d6b-b06c-865a749aacf6", + "5f571217-335c-422e-8c76-0e8b4e1296cf" +] + +const walletKeys = data.map(()=>{ + const address = algosdk.generateAccount() + return { + encoded: address.addr, + checksum: new Array(...algosdk.decodeAddress(address.addr).checksum), + publicKey: new Array(...algosdk.decodeAddress(address.addr).publicKey), + privateKey: new Array(...address.sk), + valid: true + } +}) + + +fs.writeFileSync('./tests/__fixtures__/wallet.keys.fixtures.json', JSON.stringify(walletKeys, null, 2)) + + +const encodingBase64URL = data.map((d)=>{ + const encoder = new TextEncoder() + return { + origin: d, + toBase64Url: toBase64URL(encoder.encode(d)), + fromBase64Url: new Array(...encoder.encode(d)), + } +}) + +fs.writeFileSync('./tests/__fixtures__/encoding.base64url.fixtures.json', JSON.stringify(encodingBase64URL, null, 2)) + +console.log(Buffer.from('hello', 'base32')) diff --git a/clients/liquid-auth-core/tsconfig.json b/clients/liquid-auth-core/tsconfig.json new file mode 100644 index 0000000..1263018 --- /dev/null +++ b/clients/liquid-auth-core/tsconfig.json @@ -0,0 +1,13 @@ +{ + "include": ["./src/**/*.ts"], + "compilerOptions": { + "outDir": "lib", + "declaration": true, + "module": "NodeNext", + "moduleResolution": "NodeNext", + "allowSyntheticDefaultImports": true, + "allowJs": true, + "skipLibCheck": true, + "strictNullChecks": true + } +} diff --git a/docker-compose.developer.yml b/docker-compose.developer.yml deleted file mode 100644 index 83237e8..0000000 --- a/docker-compose.developer.yml +++ /dev/null @@ -1,10 +0,0 @@ -version: '3.4' - -services: - liquid-auth: - build: . - restart: always - env_file: - - .env.docker - ports: - - "3000:3000" diff --git a/docker-compose.yml b/docker-compose.yml index 314f828..26f86e7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,18 +1,47 @@ version: '3.4' services: - redis: - image: redis + liquid-auth: + build: . restart: always + env_file: + - .env.docker ports: - - "6379:6379" - redis-commander: - image: rediscommander/redis-commander:latest + - "3000:3000" + depends_on: + - redis + - mongo + - ngrok + liquid-demo: + build: + context: . + dockerfile: Vite.Dockerfile + ports: + - "5173:5173" restart: always environment: - - REDIS_HOSTS=local:redis:6379 + - PROXY_URL=http://liquid-auth:3000 + - WSS_PROXY_SERVER=ws://liquid-auth:3000 + depends_on: + - liquid-auth + - ngrok + ngrok: + image: ngrok/ngrok:latest + restart: unless-stopped + command: + - "start" + - "--all" + - "--config" + - "/etc/ngrok.yml" + volumes: + - ./ngrok.yml:/etc/ngrok.yml ports: - - "8081:8081" + - 4040:4040 + redis: + image: redis + restart: always + ports: + - "6379:6379" mongo: image: mongo:7.0 restart: always @@ -24,5 +53,22 @@ services: - "27017:27017" volumes: - mongo:/data/db + turn: + image: coturn/coturn + deploy: + replicas: 0 + depends_on: + - mongo + ports: + - "3478:3478" + - "3478:3478/udp" + - "5349:5349" + - "5349:5349/udp" + command: + - "--no-auth" + - "--mongo-userdb" + - "mongodb://${DB_USERNAME:-algorand}:${DB_PASSWORD:-algorand}@mongo:27017/${DB_NAME:-coturn}?authSource=admin&retryWrites=true&w=majority" + - "--redis-userdb" + - "ip=redis dbname=0" volumes: mongo: diff --git a/package-lock.json b/package-lock.json index e0e09d6..0932abe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,19 +17,300 @@ "clients/liquid-auth-client-js": { "name": "@liquid/auth-client", "version": "1.0.0", - "hasInstallScript": true, "license": "MIT", "dependencies": { - "qr-code-styling": "^1.6.0-rc.1" + "@liquid/core": "^1.0.0", + "eventemitter3": "^5.0.1", + "qr-code-styling": "^1.6.0-rc.1", + "tweetnacl": "^1.0.3" }, "devDependencies": { "@types/qrcode": "^1.5.5", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^7.6.0", + "algosdk": "^2.7.0", "c8": "^9.1.0", - "typescript": "^5.3.3" + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-tsdoc": "^0.2.17", + "typedoc": "^0.25.13", + "typedoc-plugin-markdown": "^4.0.0-next.55", + "typescript": "^5.4.5" + } + }, + "clients/liquid-auth-client-js/docs": { + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "@astrojs/check": "^0.5.10", + "@astrojs/starlight": "^0.21.5", + "astro": "^4.3.5", + "sharp": "^0.32.5", + "starlight-typedoc": "^0.11.0", + "typedoc": "^0.25.13", + "typedoc-plugin-markdown": "^4.0.0-next.55", + "typescript": "^5.4.5" + } + }, + "clients/liquid-auth-client-js/node_modules/@typescript-eslint/parser": { + "version": "7.6.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "algosdk": "^2.7.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "clients/liquid-auth-client-js/node_modules/@typescript-eslint/scope-manager": { + "version": "7.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "clients/liquid-auth-client-js/node_modules/@typescript-eslint/types": { + "version": "7.6.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "clients/liquid-auth-client-js/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.6.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "clients/liquid-auth-client-js/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.6.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "clients/liquid-auth-client-js/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "clients/liquid-auth-client-js/node_modules/minimatch": { + "version": "9.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "clients/liquid-auth-core": { + "name": "@liquid/core", + "version": "1.0.0", + "license": "MIT", + "dependencies": { "tweetnacl": "^1.0.3" + }, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^7.6.0", + "c8": "^9.1.0", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-tsdoc": "^0.2.17", + "typedoc": "^0.25.13", + "typedoc-plugin-markdown": "^4.0.0-next.55", + "typescript": "^5.4.5" + } + }, + "clients/liquid-auth-core/node_modules/@typescript-eslint/parser": { + "version": "7.6.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.6.0", + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/typescript-estree": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "clients/liquid-auth-core/node_modules/@typescript-eslint/scope-manager": { + "version": "7.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "clients/liquid-auth-core/node_modules/@typescript-eslint/types": { + "version": "7.6.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "clients/liquid-auth-core/node_modules/@typescript-eslint/typescript-estree": { + "version": "7.6.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "7.6.0", + "@typescript-eslint/visitor-keys": "7.6.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "clients/liquid-auth-core/node_modules/@typescript-eslint/visitor-keys": { + "version": "7.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.6.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "clients/liquid-auth-core/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "clients/liquid-auth-core/node_modules/minimatch": { + "version": "9.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -157,76 +438,35 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@babel/code-frame": { - "version": "7.22.13", - "license": "MIT", - "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", + "node_modules/@apideck/better-ajv-errors": { + "version": "0.3.6", + "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "json-schema": "^0.4.0", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "node": ">=10" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" + "peerDependencies": { + "ajv": ">=8" } }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", + "node_modules/@babel/code-frame": { + "version": "7.24.2", "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" }, "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.22.9", + "version": "7.23.5", "dev": true, "license": "MIT", "engines": { @@ -234,21 +474,21 @@ } }, "node_modules/@babel/core": { - "version": "7.22.17", + "version": "7.24.4", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.22.15", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.22.17", - "@babel/helpers": "^7.22.15", - "@babel/parser": "^7.22.16", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.17", - "@babel/types": "^7.22.17", - "convert-source-map": "^1.7.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.4", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.4", + "@babel/parser": "^7.24.4", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", @@ -262,11 +502,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "dev": true, - "license": "MIT" - }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "dev": true, @@ -276,27 +511,49 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.0", + "version": "7.24.4", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.23.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -312,6 +569,75 @@ "semver": "bin/semver.js" } }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.23.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/@babel/helper-environment-visitor": { "version": "7.22.20", "dev": true, @@ -343,6 +669,17 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-module-imports": { "version": "7.22.15", "license": "MIT", @@ -354,15 +691,15 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.17", + "version": "7.23.3", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", + "@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.15" + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -371,12 +708,55 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-plugin-utils": { + "node_modules/@babel/helper-optimise-call-expression": { "version": "7.22.5", "dev": true, "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.20", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-simple-access": { @@ -390,6 +770,17 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.22.6", "dev": true, @@ -402,7 +793,7 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", + "version": "7.24.1", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -416,33 +807,47 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", + "version": "7.23.5", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helpers": { - "version": "7.22.15", + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.20", "dev": true, "license": "MIT", "dependencies": { + "@babel/helper-function-name": "^7.22.5", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.13", + "version": "7.24.2", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -506,7 +911,7 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.0", + "version": "7.24.4", "dev": true, "license": "MIT", "bin": { @@ -516,6 +921,62 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.23.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.23.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.23.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "dev": true, @@ -549,6 +1010,70 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "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-dynamic-import": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.23.3", + "dev": true, + "license": "MIT", + "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-import-attributes": { + "version": "7.23.3", + "dev": true, + "license": "MIT", + "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-import-meta": { "version": "7.10.4", "dev": true, @@ -572,11 +1097,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", + "version": "7.24.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -651,7 +1176,7 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { + "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", "dev": true, "license": "MIT", @@ -665,12 +1190,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -679,3340 +1204,5224 @@ "@babel/core": "^7.0.0-0" } }, - "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==", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "dev": true, + "license": "MIT", "dependencies": { - "regenerator-runtime": "^0.14.0" + "@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", + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/traverse": { - "version": "7.23.2", + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.23.3", "dev": true, "license": "MIT", "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", - "globals": "^11.1.0" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.23.9", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/types": { - "version": "7.23.0", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.23.3", + "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.23.3", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "node_modules/@colors/colors": { - "version": "1.5.0", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.23.4", "dev": true, "license": "MIT", - "optional": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": ">=0.1.90" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.23.3", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.23.4", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" } }, - "node_modules/@emotion/babel-plugin": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", - "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "node_modules/@babel/plugin-transform-classes": { + "version": "7.23.8", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.1", - "@emotion/memoize": "^0.8.1", - "@emotion/serialize": "^1.1.2", - "babel-plugin-macros": "^3.1.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^4.0.0", - "find-root": "^1.1.0", - "source-map": "^0.5.7", - "stylis": "4.2.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-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==", + "node_modules/@babel/plugin-transform-classes/node_modules/globals": { + "version": "11.12.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/@emotion/cache": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", - "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.23.3", + "dev": true, + "license": "MIT", "dependencies": { - "@emotion/memoize": "^0.8.1", - "@emotion/sheet": "^1.2.2", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", - "stylis": "4.2.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@emotion/hash": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", - "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==", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.23.3", + "dev": true, + "license": "MIT", "dependencies": { - "@emotion/memoize": "^0.8.1" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@emotion/memoize": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", - "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" - }, - "node_modules/@emotion/react": { - "version": "11.11.3", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.3.tgz", - "integrity": "sha512-Cnn0kuq4DoONOMcnoVsTOR8E+AdnKFf//6kUWc4LCdnxj31pZWn7rIULd6Y7/Js1PiPHzn7SKCM9vB/jBni8eA==", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.23.3", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/cache": "^11.11.0", - "@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", - "hoist-non-react-statics": "^3.3.1" + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" }, - "peerDependencies": { - "react": ">=16.8.0" + "engines": { + "node": ">=6.9.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@emotion/serialize": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.3.tgz", - "integrity": "sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==", + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.23.3", + "dev": true, + "license": "MIT", "dependencies": { - "@emotion/hash": "^0.9.1", - "@emotion/memoize": "^0.8.1", - "@emotion/unitless": "^0.8.1", - "@emotion/utils": "^1.2.1", - "csstype": "^3.0.2" + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@emotion/server": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/server/-/server-11.11.0.tgz", - "integrity": "sha512-6q89fj2z8VBTx9w93kJ5n51hsmtYuFPtZgnc1L8VzRx9ti4EU6EyvF6Nn1H1x3vcCQCF7u2dB2lY4AYJwUW4PA==", + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.23.4", + "dev": true, + "license": "MIT", "dependencies": { - "@emotion/utils": "^1.2.1", - "html-tokenize": "^2.0.0", - "multipipe": "^1.0.2", - "through": "^2.3.8" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, - "peerDependencies": { - "@emotion/css": "^11.0.0-rc.0" + "engines": { + "node": ">=6.9.0" }, - "peerDependenciesMeta": { - "@emotion/css": { - "optional": true - } + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@emotion/sheet": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", - "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==", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.23.3", + "dev": true, + "license": "MIT", "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/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" }, - "peerDependencies": { - "@emotion/react": "^11.0.0-rc.0", - "react": ">=16.8.0" + "engines": { + "node": ">=6.9.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@emotion/unitless": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", - "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" - }, - "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", - "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.23.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { - "react": ">=16.8.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@emotion/utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", - "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" - }, - "node_modules/@emotion/weak-memoize": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", - "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", - "cpu": [ - "ppc64" - ], + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.23.6", "dev": true, - "optional": true, - "os": [ - "aix" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", - "cpu": [ - "arm" - ], + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.23.3", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.23.4", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-literals": { + "version": "7.23.3", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.23.4", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.23.3", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.23.3", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.23.3", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", - "cpu": [ - "arm" - ], + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.23.9", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.23.3", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", - "cpu": [ - "ia32" - ], + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", - "cpu": [ - "loong64" - ], + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.23.3", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", - "cpu": [ - "mips64el" - ], + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.23.4", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", - "cpu": [ - "ppc64" - ], + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.23.4", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", - "cpu": [ - "riscv64" - ], + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.23.4", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.23.3" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", - "cpu": [ - "s390x" - ], + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.23.3", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.23.4", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.23.4", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.23.3", "dev": true, - "optional": true, - "os": [ - "sunos" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", - "cpu": [ - "arm64" - ], + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.23.3", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", - "cpu": [ - "ia32" - ], + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.23.4", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", - "cpu": [ - "x64" - ], + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.23.3", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.23.3", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.8.0", + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.23.3", "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=6.9.0" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/@babel/plugin-transform-spread": { + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "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==", - "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@floating-ui/core": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", - "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", - "dependencies": { - "@floating-ui/utils": "^0.2.1" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.1.tgz", - "integrity": "sha512-iA8qE43/H5iGozC3W0YSnVSW42Vh522yyM1gj+BqRwVsTNOyr231PsXDaV04yT39PsO0QL2QpbI/M0ZaLUQgRQ==", - "dependencies": { - "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.1" - } - }, - "node_modules/@floating-ui/react-dom": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", - "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", - "dependencies": { - "@floating-ui/dom": "^1.6.1" + "node": ">=6.9.0" }, "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@floating-ui/utils": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", - "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" - }, - "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==", + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.23.3", "dev": true, + "license": "MIT", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">=10.10.0" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.23.3", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": ">=12.22" + "node": ">=6.9.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "dev": true - }, - "node_modules/@ioredis/commands": { - "version": "1.2.0", - "license": "MIT" - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "license": "ISC", + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.23.3", + "dev": true, + "license": "MIT", "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" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">=12" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.23.3", + "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.23.3", + "dev": true, "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.23.3", + "dev": true, "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">=12" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.23.3", + "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { - "node": ">=12" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", + "node_modules/@babel/preset-env": { + "version": "7.23.9", + "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@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-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.9", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.8", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.6", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.9", + "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.23.4", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" }, "engines": { - "node": ">=12" + "node": ">=6.9.0" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", "dev": true, "license": "ISC", - "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" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", "dev": true, "license": "MIT", "dependencies": { - "sprintf-js": "~1.0.2" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", + "node_modules/@babel/regjsgen": { + "version": "0.8.0", "dev": true, + "license": "MIT" + }, + "node_modules/@babel/runtime": { + "version": "7.23.9", "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "regenerator-runtime": "^0.14.0" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", + "node_modules/@babel/template": { + "version": "7.24.0", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", + "node_modules/@babel/traverse": { + "version": "7.24.1", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@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.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", + "globals": "^11.1.0" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", "dev": true, "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, + "node_modules/@babel/types": { + "version": "7.24.0", "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", + "node_modules/@colors/colors": { + "version": "1.5.0", "dev": true, "license": "MIT", + "optional": true, "engines": { - "node": ">=8" + "node": ">=0.1.90" } }, - "node_modules/@jest/console": { - "version": "29.7.0", + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", "dev": true, "license": "MIT", "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" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/@jest/core": { - "version": "29.7.0", + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", "dev": true, "license": "MIT", "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 - } + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "dev": true, + "node_modules/@emotion/babel-plugin": { + "version": "11.11.0", "license": "MIT", "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" + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" } }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, + "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { + "version": "1.9.0", + "license": "MIT" + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "license": "BSD-3-Clause", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "dev": true, + "node_modules/@emotion/cache": { + "version": "11.11.0", "license": "MIT", "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" } }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "dev": true, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.1", "license": "MIT", "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" + "@emotion/memoize": "^0.8.1" } }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "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/@emotion/memoize": { + "version": "0.8.1", + "license": "MIT" }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "dev": true, + "node_modules/@emotion/react": { + "version": "11.11.3", "license": "MIT", "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" + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@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", + "hoist-non-react-statics": "^3.3.1" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "react": ">=16.8.0" }, "peerDependenciesMeta": { - "node-notifier": { + "@types/react": { "optional": true } } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "dev": true, + "node_modules/@emotion/serialize": { + "version": "1.1.3", "license": "MIT", "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" } }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "dev": true, + "node_modules/@emotion/server": { + "version": "11.11.0", "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" + "@emotion/utils": "^1.2.1", + "html-tokenize": "^2.0.0", + "multipipe": "^1.0.2", + "through": "^2.3.8" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "@emotion/css": "^11.0.0-rc.0" + }, + "peerDependenciesMeta": { + "@emotion/css": { + "optional": true + } } }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "dev": true, + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "license": "MIT" + }, + "node_modules/@emotion/styled": { + "version": "11.11.0", "license": "MIT", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.1", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "license": "MIT" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", "dev": true, "license": "MIT", "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@jest/transform": { - "version": "29.7.0", + "node_modules/@eslint-community/regexpp": { + "version": "4.8.0", "dev": true, "license": "MIT", - "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": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@jest/types": { - "version": "29.6.3", + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", "dev": true, "license": "MIT", "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" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=6.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } + "license": "MIT" }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", + "node_modules/@eslint/js": { + "version": "8.57.0", "dev": true, "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "dev": true, + "node_modules/@floating-ui/core": { + "version": "1.6.0", "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@floating-ui/utils": "^0.2.1" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "dev": true, - "license": "MIT" + "node_modules/@floating-ui/dom": { + "version": "1.6.1", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.1" + } }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "dev": true, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.8", "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@floating-ui/dom": "^1.6.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" } }, - "node_modules/@liquid/auth-api": { - "resolved": "services/liquid-auth-api-js", - "link": true + "node_modules/@floating-ui/utils": { + "version": "0.2.1", + "license": "MIT" }, - "node_modules/@liquid/auth-client": { - "resolved": "clients/liquid-auth-client-js", - "link": true + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } }, - "node_modules/@lukeed/csprng": { - "version": "1.1.0", - "license": "MIT", + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@mole-inc/bin-wrapper": { - "version": "8.0.1", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause" + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.1", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", "optional": true, - "peer": true, - "dependencies": { - "bin-check": "^4.1.0", - "bin-version-check": "^5.0.0", - "content-disposition": "^0.5.4", - "ext-name": "^5.0.0", - "file-type": "^17.1.6", - "filenamify": "^5.0.2", - "got": "^11.8.5", - "os-filter-obj": "^2.0.0" - }, + "os": [ + "linux" + ], "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "glibc": ">=2.26", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@mongodb-js/saslprep": { - "version": "1.1.0", - "license": "MIT", + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.1", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", "optional": true, - "dependencies": { - "sparse-bitfield": "^3.0.3" + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { - "version": "3.0.2", + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.2", "cpu": [ "x64" ], - "license": "MIT", + "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ "linux" - ] - }, - "node_modules/@mui/base": { - "version": "5.0.0-beta.34", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.34.tgz", - "integrity": "sha512-e2mbTGTtReD/y5RFwnhkl1Tgl3XwgJhY040IlfkTVaU9f5LWrVhEnpRsYXu3B1CtLrwiWs4cu7aMHV9yRd4jpw==", - "dependencies": { - "@babel/runtime": "^7.23.9", - "@floating-ui/react-dom": "^2.0.8", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.7", - "@popperjs/core": "^2.11.8", - "clsx": "^2.1.0", - "prop-types": "^15.8.1" - }, + ], "engines": { - "node": ">=12.0.0" + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" + "url": "https://opencollective.com/libvips" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.1" } }, - "node_modules/@mui/core-downloads-tracker": { - "version": "5.15.7", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.7.tgz", - "integrity": "sha512-AuF+Wo2Mp/edaO6vJnWjg+gj4tzEz5ChMZnAQpc22DXpSvM8ddgGcZvM7D7F99pIBoSv8ub+Iz0viL+yuGVmhg==", + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.2", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.1" } }, - "node_modules/@mui/icons-material": { - "version": "5.15.7", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.7.tgz", - "integrity": "sha512-EDAc8TVJGIA/imAvR3u4nANl2W5h3QeHieu2gK7Ypez/nIA55p08tHjf8UrMXEpxCAvfZO6piY9S9uaxETdicA==", + "node_modules/@ioredis/commands": { + "version": "1.2.0", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "license": "ISC", "dependencies": { - "@babel/runtime": "^7.23.9" + "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.0.0" + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "license": "MIT", + "engines": { + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@mui/material": "^5.0.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "license": "MIT", + "engines": { + "node": ">=12" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@mui/material": { - "version": "5.15.7", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.7.tgz", - "integrity": "sha512-l6+AiKZH3iOJmZCnlpel8ghYQe9Lq0BEuKP8fGj3g5xz4arO9GydqYAtLPMvuHKtArj8lJGNuT2yHYxmejincA==", + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.9", - "@mui/base": "5.0.0-beta.34", - "@mui/core-downloads-tracker": "^5.15.7", - "@mui/system": "^5.15.7", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.7", - "@types/react-transition-group": "^4.4.10", - "clsx": "^2.1.0", - "csstype": "^3.1.2", - "prop-types": "^15.8.1", - "react-is": "^18.2.0", - "react-transition-group": "^4.4.5" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@emotion/react": "^11.5.0", - "@emotion/styled": "^11.3.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - }, - "@types/react": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@mui/private-theming": { - "version": "5.15.7", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.7.tgz", - "integrity": "sha512-bcEeeXm7GyQCQvN9dwo8htGv8/6tP05p0i02Z7GXm5EoDPlBcqTNGugsjNLoGq6B0SsdyanjJGw0Jw00o1yAOA==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.9", - "@mui/utils": "^5.15.7", - "prop-types": "^15.8.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@mui/styled-engine": { - "version": "5.15.7", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.7.tgz", - "integrity": "sha512-ixSdslOjK1kzdGcxqj7O3d14By/LPQ7EWknsViQ8RaeT863EAQemS+zvUJDTcOpkfJh6q6gPnYMIb2TJCs9eWA==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.9", - "@emotion/cache": "^11.11.0", - "csstype": "^3.1.2", - "prop-types": "^15.8.1" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@emotion/react": "^11.4.1", - "@emotion/styled": "^11.3.0", - "react": "^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - } + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@mui/system": { - "version": "5.15.7", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.7.tgz", - "integrity": "sha512-9alZ4/dLxsTwUOdqakgzxiL5YW6ntqj0CfzWImgWnBMTZhgGcPsbYpBLniNkkk7/jptma4/bykWXHwju/ls/pg==", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "license": "ISC", "dependencies": { - "@babel/runtime": "^7.23.9", - "@mui/private-theming": "^5.15.7", - "@mui/styled-engine": "^5.15.7", - "@mui/types": "^7.2.13", - "@mui/utils": "^5.15.7", - "clsx": "^2.1.0", - "csstype": "^3.1.2", - "prop-types": "^15.8.1" + "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": ">=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, - "peerDependencies": { - "@emotion/react": "^11.5.0", - "@emotion/styled": "^11.3.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "peerDependenciesMeta": { - "@emotion/react": { - "optional": true - }, - "@emotion/styled": { - "optional": true - }, - "@types/react": { - "optional": true - } + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@mui/types": { - "version": "7.2.13", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.13.tgz", - "integrity": "sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==", - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0" + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@mui/utils": { - "version": "5.15.7", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.7.tgz", - "integrity": "sha512-8qhsxQRNV6aEOjjSk6YQIYJxkF5klhj8oG1FEEU4z6HV78TjNqRxMP08QGcdsibEbez+nihAaz6vu83b4XqbAg==", + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.9", - "@types/prop-types": "^15.7.11", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - }, - "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=8" } }, - "node_modules/@nestjs/cli": { - "version": "10.1.18", + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "16.2.3", - "@angular-devkit/schematics": "16.2.3", - "@angular-devkit/schematics-cli": "16.2.3", - "@nestjs/schematics": "^10.0.1", - "chalk": "4.1.2", - "chokidar": "3.5.3", - "cli-table3": "0.6.3", - "commander": "4.1.1", - "fork-ts-checker-webpack-plugin": "8.0.0", - "inquirer": "8.2.6", - "node-emoji": "1.11.0", - "ora": "5.4.1", - "os-name": "4.0.1", - "rimraf": "4.4.1", - "shelljs": "0.8.5", - "source-map-support": "0.5.21", - "tree-kill": "1.2.2", - "tsconfig-paths": "4.2.0", - "tsconfig-paths-webpack-plugin": "4.1.0", - "typescript": "5.2.2", - "webpack": "5.88.2", - "webpack-node-externals": "3.0.0" + "@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" }, - "bin": { - "nest": "bin/nest.js" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "dev": true, + "license": "MIT", + "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": ">= 16" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "@swc/cli": "^0.1.62", - "@swc/core": "^1.3.62" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { - "@swc/cli": { - "optional": true - }, - "@swc/core": { + "node-notifier": { "optional": true } } }, - "node_modules/@nestjs/cli/node_modules/typescript": { - "version": "5.2.2", + "node_modules/@jest/environment": { + "version": "29.7.0", "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" }, "engines": { - "node": ">=14.17" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@nestjs/common": { - "version": "10.2.6", + "node_modules/@jest/expect": { + "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { - "iterare": "1.2.1", - "tslib": "2.6.2", - "uid": "2.0.2" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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": { - "class-transformer": "*", - "class-validator": "*", - "reflect-metadata": "^0.1.12", - "rxjs": "^7.1.0" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { - "class-transformer": { - "optional": true - }, - "class-validator": { + "node-notifier": { "optional": true } } }, - "node_modules/@nestjs/config": { - "version": "3.1.1", + "node_modules/@jest/schemas": { + "version": "29.6.3", + "dev": true, "license": "MIT", "dependencies": { - "dotenv": "16.3.1", - "dotenv-expand": "10.0.0", - "lodash": "4.17.21", - "uuid": "9.0.0" + "@sinclair/typebox": "^0.27.8" }, - "peerDependencies": { - "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", - "reflect-metadata": "^0.1.13" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@liquid/auth-api": { + "resolved": "services/liquid-auth-api-js", + "link": true + }, + "node_modules/@liquid/auth-client": { + "resolved": "clients/liquid-auth-client-js", + "link": true + }, + "node_modules/@liquid/core": { + "resolved": "clients/liquid-auth-core", + "link": true + }, + "node_modules/@lukeed/csprng": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@microsoft/tsdoc": { + "version": "0.14.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@microsoft/tsdoc-config": { + "version": "0.16.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@microsoft/tsdoc": "0.14.2", + "ajv": "~6.12.6", + "jju": "~1.4.0", + "resolve": "~1.19.0" + } + }, + "node_modules/@microsoft/tsdoc-config/node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@microsoft/tsdoc-config/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@microsoft/tsdoc-config/node_modules/resolve": { + "version": "1.19.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@mole-inc/bin-wrapper": { + "version": "8.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "bin-check": "^4.1.0", + "bin-version-check": "^5.0.0", + "content-disposition": "^0.5.4", + "ext-name": "^5.0.0", + "file-type": "^17.1.6", + "filenamify": "^5.0.2", + "got": "^11.8.5", + "os-filter-obj": "^2.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.0", + "license": "MIT", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@mui/base": { + "version": "5.0.0-beta.34", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@floating-ui/react-dom": "^2.0.8", + "@mui/types": "^7.2.13", + "@mui/utils": "^5.15.7", + "@popperjs/core": "^2.11.8", + "clsx": "^2.1.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "5.15.7", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/icons-material": { + "version": "5.15.7", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/material": "^5.0.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material": { + "version": "5.15.7", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/base": "5.0.0-beta.34", + "@mui/core-downloads-tracker": "^5.15.7", + "@mui/system": "^5.15.7", + "@mui/types": "^7.2.13", + "@mui/utils": "^5.15.7", + "@types/react-transition-group": "^4.4.10", + "clsx": "^2.1.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1", + "react-is": "^18.2.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/private-theming": { + "version": "5.15.7", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/utils": "^5.15.7", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "5.15.7", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@emotion/cache": "^11.11.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "5.15.7", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/private-theming": "^5.15.7", + "@mui/styled-engine": "^5.15.7", + "@mui/types": "^7.2.13", + "@mui/utils": "^5.15.7", + "clsx": "^2.1.0", + "csstype": "^3.1.2", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.13", + "license": "MIT", + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "5.15.7", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@types/prop-types": "^15.7.11", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@nestjs/cli": { + "version": "10.1.18", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "16.2.3", + "@angular-devkit/schematics": "16.2.3", + "@angular-devkit/schematics-cli": "16.2.3", + "@nestjs/schematics": "^10.0.1", + "chalk": "4.1.2", + "chokidar": "3.5.3", + "cli-table3": "0.6.3", + "commander": "4.1.1", + "fork-ts-checker-webpack-plugin": "8.0.0", + "inquirer": "8.2.6", + "node-emoji": "1.11.0", + "ora": "5.4.1", + "os-name": "4.0.1", + "rimraf": "4.4.1", + "shelljs": "0.8.5", + "source-map-support": "0.5.21", + "tree-kill": "1.2.2", + "tsconfig-paths": "4.2.0", + "tsconfig-paths-webpack-plugin": "4.1.0", + "typescript": "5.2.2", + "webpack": "5.88.2", + "webpack-node-externals": "3.0.0" + }, + "bin": { + "nest": "bin/nest.js" + }, + "engines": { + "node": ">= 16" + }, + "peerDependencies": { + "@swc/cli": "^0.1.62", + "@swc/core": "^1.3.62" + }, + "peerDependenciesMeta": { + "@swc/cli": { + "optional": true + }, + "@swc/core": { + "optional": true + } + } + }, + "node_modules/@nestjs/cli/node_modules/typescript": { + "version": "5.2.2", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@nestjs/common": { + "version": "10.2.6", + "license": "MIT", + "dependencies": { + "iterare": "1.2.1", + "tslib": "2.6.2", + "uid": "2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "class-transformer": "*", + "class-validator": "*", + "reflect-metadata": "^0.1.12", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@nestjs/config": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "dotenv": "16.3.1", + "dotenv-expand": "10.0.0", + "lodash": "4.17.21", + "uuid": "9.0.0" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "reflect-metadata": "^0.1.13" + } + }, + "node_modules/@nestjs/core": { + "version": "10.2.6", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@nuxtjs/opencollective": "0.3.2", + "fast-safe-stringify": "2.1.1", + "iterare": "1.2.1", + "path-to-regexp": "3.2.0", + "tslib": "2.6.2", + "uid": "2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/microservices": "^10.0.0", + "@nestjs/platform-express": "^10.0.0", + "@nestjs/websockets": "^10.0.0", + "reflect-metadata": "^0.1.12", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/platform-express": { + "optional": true + }, + "@nestjs/websockets": { + "optional": true + } + } + }, + "node_modules/@nestjs/microservices": { + "version": "10.2.7", + "license": "MIT", + "dependencies": { + "iterare": "1.2.1", + "tslib": "2.6.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@grpc/grpc-js": "*", + "@nestjs/common": "^10.0.0", + "@nestjs/core": "^10.0.0", + "@nestjs/websockets": "^10.0.0", + "amqp-connection-manager": "*", + "amqplib": "*", + "cache-manager": "*", + "ioredis": "*", + "kafkajs": "*", + "mqtt": "*", + "nats": "*", + "reflect-metadata": "^0.1.12", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "@grpc/grpc-js": { + "optional": true + }, + "@nestjs/websockets": { + "optional": true + }, + "amqp-connection-manager": { + "optional": true + }, + "amqplib": { + "optional": true + }, + "cache-manager": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "kafkajs": { + "optional": true + }, + "mqtt": { + "optional": true + }, + "nats": { + "optional": true + } + } + }, + "node_modules/@nestjs/mongoose": { + "version": "10.0.1", + "license": "MIT", + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", + "@nestjs/core": "^8.0.0 || ^9.0.0 || ^10.0.0", + "mongoose": "^6.0.2 || ^7.0.0", + "reflect-metadata": "^0.1.12", + "rxjs": "^7.0.0" + } + }, + "node_modules/@nestjs/platform-express": { + "version": "10.2.6", + "license": "MIT", + "dependencies": { + "body-parser": "1.20.2", + "cors": "2.8.5", + "express": "4.18.2", + "multer": "1.4.4-lts.1", + "tslib": "2.6.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/core": "^10.0.0" + } + }, + "node_modules/@nestjs/platform-socket.io": { + "version": "10.2.7", + "license": "MIT", + "dependencies": { + "socket.io": "4.7.2", + "tslib": "2.6.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/websockets": "^10.0.0", + "rxjs": "^7.1.0" + } + }, + "node_modules/@nestjs/schematics": { + "version": "10.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "16.1.8", + "@angular-devkit/schematics": "16.1.8", + "comment-json": "4.2.3", + "jsonc-parser": "3.2.0", + "pluralize": "8.0.0" + }, + "peerDependencies": { + "typescript": ">=4.8.2" + } + }, + "node_modules/@nestjs/schematics/node_modules/@angular-devkit/core": { + "version": "16.1.8", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@nestjs/schematics/node_modules/@angular-devkit/schematics": { + "version": "16.1.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "16.1.8", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@nestjs/schematics/node_modules/magic-string": { + "version": "0.30.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@nestjs/testing": { + "version": "10.2.6", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "2.6.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/core": "^10.0.0", + "@nestjs/microservices": "^10.0.0", + "@nestjs/platform-express": "^10.0.0" + }, + "peerDependenciesMeta": { + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/platform-express": { + "optional": true + } + } + }, + "node_modules/@nestjs/websockets": { + "version": "10.2.7", + "license": "MIT", + "dependencies": { + "iterare": "1.2.1", + "object-hash": "3.0.0", + "tslib": "2.6.2" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/core": "^10.0.0", + "@nestjs/platform-socket.io": "^10.0.0", + "reflect-metadata": "^0.1.12", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "@nestjs/platform-socket.io": { + "optional": true + } + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@nuxtjs/opencollective": { + "version": "0.3.2", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.1" + }, + "bin": { + "opencollective": "bin/opencollective.js" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/@peculiar/asn1-android": { + "version": "2.3.6", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.3.6", + "asn1js": "^3.0.5", + "tslib": "^2.4.0" + } + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.3.6", + "license": "MIT", + "dependencies": { + "asn1js": "^3.0.5", + "pvtsutils": "^1.3.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@peculiar/asn1-x509": { + "version": "2.3.6", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.3.6", + "asn1js": "^3.0.5", + "ipaddr.js": "^2.0.1", + "pvtsutils": "^1.3.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@peculiar/asn1-x509/node_modules/ipaddr.js": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@redis/bloom": { + "version": "1.2.0", + "license": "MIT", + "peerDependencies": { + "@redis/client": "^1.0.0" + } + }, + "node_modules/@redis/client": { + "version": "1.5.11", + "license": "MIT", + "dependencies": { + "cluster-key-slot": "1.1.2", + "generic-pool": "3.9.0", + "yallist": "4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@redis/client/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/@redis/graph": { + "version": "1.1.0", + "license": "MIT", + "peerDependencies": { + "@redis/client": "^1.0.0" + } + }, + "node_modules/@redis/json": { + "version": "1.0.6", + "license": "MIT", + "peerDependencies": { + "@redis/client": "^1.0.0" + } + }, + "node_modules/@redis/search": { + "version": "1.1.5", + "license": "MIT", + "peerDependencies": { + "@redis/client": "^1.0.0" + } + }, + "node_modules/@redis/time-series": { + "version": "1.0.5", + "license": "MIT", + "peerDependencies": { + "@redis/client": "^1.0.0" + } + }, + "node_modules/@remix-run/router": { + "version": "1.15.3", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.14.3", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.14.3", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@sentry-internal/tracing": { + "version": "7.74.1", + "license": "MIT", + "dependencies": { + "@sentry/core": "7.74.1", + "@sentry/types": "7.74.1", + "@sentry/utils": "7.74.1", + "tslib": "^2.4.1 || ^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/core": { + "version": "7.74.1", + "license": "MIT", + "dependencies": { + "@sentry/types": "7.74.1", + "@sentry/utils": "7.74.1", + "tslib": "^2.4.1 || ^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/hub": { + "version": "7.74.1", + "license": "MIT", + "dependencies": { + "@sentry/core": "7.74.1", + "@sentry/types": "7.74.1", + "@sentry/utils": "7.74.1", + "tslib": "^2.4.1 || ^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/node": { + "version": "7.74.1", + "license": "MIT", + "dependencies": { + "@sentry-internal/tracing": "7.74.1", + "@sentry/core": "7.74.1", + "@sentry/types": "7.74.1", + "@sentry/utils": "7.74.1", + "cookie": "^0.5.0", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^2.4.1 || ^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/profiling-node": { + "version": "1.2.1", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@sentry/core": "^7.64.0", + "@sentry/hub": "^7.64.0", + "@sentry/node": "^7.64.0", + "@sentry/types": "^7.64.0", + "@sentry/utils": "^7.64.0", + "detect-libc": "^2.0.1", + "node-abi": "^3.28.0", + "node-gyp": "^9.3.0" + }, + "bin": { + "sentry-prune-profiler-binaries": "scripts/prune-profiler-binaries.mjs" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@sentry/types": { + "version": "7.74.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/utils": { + "version": "7.74.1", + "license": "MIT", + "dependencies": { + "@sentry/types": "7.74.1", + "tslib": "^2.4.1 || ^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@simplewebauthn/server": { + "version": "0.10.6", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-android": "^2.0.26", + "@peculiar/asn1-schema": "^2.0.26", + "@peculiar/asn1-x509": "^2.0.26", + "@simplewebauthn/typescript-types": "^0.10.5", + "base64url": "^3.0.1", + "cbor": "^5.1.0", + "elliptic": "^6.5.3", + "jsrsasign": "^10.0.5", + "jwk-to-pem": "^2.0.4", + "node-fetch": "^2.6.0", + "node-rsa": "^1.1.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@simplewebauthn/typescript-types": { + "version": "0.10.5", + "license": "MIT" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "license": "MIT" + }, + "node_modules/@socket.io/redis-adapter": { + "version": "8.2.1", + "license": "MIT", + "dependencies": { + "debug": "~4.3.1", + "notepack.io": "~3.0.1", + "uid2": "1.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "socket.io-adapter": "^2.4.0" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread": { + "version": "2.2.3", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "ejs": "^3.1.6", + "json5": "^2.2.0", + "magic-string": "^0.25.0", + "string.prototype.matchall": "^4.0.6" + } + }, + "node_modules/@surma/rollup-plugin-off-main-thread/node_modules/magic-string": { + "version": "0.25.9", + "dev": true, + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/@swc/cli": { + "version": "0.1.62", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@mole-inc/bin-wrapper": "^8.0.1", + "commander": "^7.1.0", + "fast-glob": "^3.2.5", + "semver": "^7.3.8", + "slash": "3.0.0", + "source-map": "^0.7.3" + }, + "bin": { + "spack": "bin/spack.js", + "swc": "bin/swc.js", + "swcx": "bin/swcx.js" + }, + "engines": { + "node": ">= 12.13" + }, + "peerDependencies": { + "@swc/core": "^1.2.66", + "chokidar": "^3.5.1" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@swc/cli/node_modules/commander": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@swc/core": { + "version": "1.3.107", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.1", + "@swc/types": "^0.1.5" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.3.107", + "@swc/core-darwin-x64": "1.3.107", + "@swc/core-linux-arm-gnueabihf": "1.3.107", + "@swc/core-linux-arm64-gnu": "1.3.107", + "@swc/core-linux-arm64-musl": "1.3.107", + "@swc/core-linux-x64-gnu": "1.3.107", + "@swc/core-linux-x64-musl": "1.3.107", + "@swc/core-win32-arm64-msvc": "1.3.107", + "@swc/core-win32-ia32-msvc": "1.3.107", + "@swc/core-win32-x64-msvc": "1.3.107" + }, + "peerDependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.3.107", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.3.107", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@swc/types": { + "version": "0.1.5", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tanstack/query-core": { + "version": "5.20.5", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/query-devtools": { + "version": "5.20.2", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.20.5", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.20.5" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18.0.0" + } + }, + "node_modules/@tanstack/react-query-devtools": { + "version": "5.20.5", + "license": "MIT", + "dependencies": { + "@tanstack/query-devtools": "5.20.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "@tanstack/react-query": "^5.20.5", + "react": "^18.0.0" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "dev": true, + "license": "MIT", + "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.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/connect": { + "version": "3.4.36", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "license": "MIT" + }, + "node_modules/@types/cookiejar": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cors": { + "version": "2.8.14", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/engine.io": { + "version": "3.1.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.44.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.18", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.36", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/express-session": { + "version": "1.17.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/express-socket.io-session": { + "version": "1.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*", + "@types/express-session": "*", + "@types/socket.io": "2.1.13" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/hbs": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "handlebars": "^4.1.0" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@types/http-errors": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.5", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.7.0", + "license": "MIT" + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.11", + "license": "MIT" + }, + "node_modules/@types/qrcode": { + "version": "1.5.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.9.8", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.2.48", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.18", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.10", + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.8", + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/socket.io": { + "version": "2.1.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/engine.io": "*", + "@types/node": "*", + "@types/socket.io-parser": "*" + } + }, + "node_modules/@types/socket.io-parser": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "socket.io-parser": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/superagent": { + "version": "4.1.18", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cookiejar": "*", + "@types/node": "*" + } + }, + "node_modules/@types/supertest": { + "version": "2.0.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/superagent": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ua-parser-js": { + "version": "0.7.37", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.0", + "license": "MIT" + }, + "node_modules/@types/whatwg-url": { + "version": "8.2.2", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/webidl-conversions": "*" } }, - "node_modules/@nestjs/core": { - "version": "10.2.6", - "hasInstallScript": true, + "node_modules/@types/yargs": { + "version": "17.0.24", + "dev": true, "license": "MIT", "dependencies": { - "@nuxtjs/opencollective": "0.3.2", - "fast-safe-stringify": "2.1.1", - "iterare": "1.2.1", - "path-to-regexp": "3.2.0", - "tslib": "2.6.2", - "uid": "2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/microservices": "^10.0.0", - "@nestjs/platform-express": "^10.0.0", - "@nestjs/websockets": "^10.0.0", - "reflect-metadata": "^0.1.12", - "rxjs": "^7.1.0" - }, - "peerDependenciesMeta": { - "@nestjs/microservices": { - "optional": true - }, - "@nestjs/platform-express": { - "optional": true - }, - "@nestjs/websockets": { - "optional": true - } + "@types/yargs-parser": "*" } }, - "node_modules/@nestjs/microservices": { - "version": "10.2.7", + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "dev": true, "license": "MIT", "dependencies": { - "iterare": "1.2.1", - "tslib": "2.6.2" + "@eslint-community/regexpp": "^4.5.1", + "@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", + "natural-compare": "^1.4.0", + "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/nest" + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@grpc/grpc-js": "*", - "@nestjs/common": "^10.0.0", - "@nestjs/core": "^10.0.0", - "@nestjs/websockets": "^10.0.0", - "amqp-connection-manager": "*", - "amqplib": "*", - "cache-manager": "*", - "ioredis": "*", - "kafkajs": "*", - "mqtt": "*", - "nats": "*", - "reflect-metadata": "^0.1.12", - "rxjs": "^7.1.0" + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { - "@grpc/grpc-js": { - "optional": true - }, - "@nestjs/websockets": { - "optional": true - }, - "amqp-connection-manager": { - "optional": true - }, - "amqplib": { - "optional": true - }, - "cache-manager": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "kafkajs": { - "optional": true - }, - "mqtt": { - "optional": true - }, - "nats": { + "typescript": { "optional": true } } }, - "node_modules/@nestjs/mongoose": { - "version": "10.0.1", - "license": "MIT", - "peerDependencies": { - "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", - "@nestjs/core": "^8.0.0 || ^9.0.0 || ^10.0.0", - "mongoose": "^6.0.2 || ^7.0.0", - "reflect-metadata": "^0.1.12", - "rxjs": "^7.0.0" - } - }, - "node_modules/@nestjs/platform-express": { - "version": "10.2.6", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "dev": true, "license": "MIT", "dependencies": { - "body-parser": "1.20.2", - "cors": "2.8.5", - "express": "4.18.2", - "multer": "1.4.4-lts.1", - "tslib": "2.6.2" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/core": "^10.0.0" + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@nestjs/platform-socket.io": { - "version": "10.2.7", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "dev": true, "license": "MIT", - "dependencies": { - "socket.io": "4.7.2", - "tslib": "2.6.2" + "engines": { + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/websockets": "^10.0.0", - "rxjs": "^7.1.0" + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@nestjs/schematics": { - "version": "10.0.2", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "16.1.8", - "@angular-devkit/schematics": "16.1.8", - "comment-json": "4.2.3", - "jsonc-parser": "3.2.0", - "pluralize": "8.0.0" + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" }, - "peerDependencies": { - "typescript": ">=4.8.2" + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@nestjs/schematics/node_modules/@angular-devkit/core": { - "version": "16.1.8", + "node_modules/@typescript-eslint/parser": { + "version": "6.20.0", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.0", - "rxjs": "7.8.1", - "source-map": "0.7.4" + "@typescript-eslint/scope-manager": "6.20.0", + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/typescript-estree": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", + "debug": "^4.3.4" }, "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "chokidar": "^3.5.2" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { - "chokidar": { + "typescript": { "optional": true } } }, - "node_modules/@nestjs/schematics/node_modules/@angular-devkit/schematics": { - "version": "16.1.8", + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.20.0", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "16.1.8", - "jsonc-parser": "3.2.0", - "magic-string": "0.30.0", - "ora": "5.4.1", - "rxjs": "7.8.1" + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@nestjs/schematics/node_modules/magic-string": { - "version": "0.30.0", + "node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": ">=12" - } - }, - "node_modules/@nestjs/testing": { - "version": "10.2.6", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "2.6.2" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/nest" + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/core": "^10.0.0", - "@nestjs/microservices": "^10.0.0", - "@nestjs/platform-express": "^10.0.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { - "@nestjs/microservices": { - "optional": true - }, - "@nestjs/platform-express": { + "typescript": { "optional": true } } }, - "node_modules/@nestjs/websockets": { - "version": "10.2.7", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "dev": true, "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "iterare": "1.2.1", - "object-hash": "3.0.0", - "tslib": "2.6.2" + "@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", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, - "peerDependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/core": "^10.0.0", - "@nestjs/platform-socket.io": "^10.0.0", - "reflect-metadata": "^0.1.12", - "rxjs": "^7.1.0" + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependenciesMeta": { - "@nestjs/platform-socket.io": { + "typescript": { "optional": true } } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">= 8" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", + "node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": { + "version": "2.0.1", "dev": true, "license": "MIT", - "engines": { - "node": ">= 8" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", + "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": { + "version": "9.0.3", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 8" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/fs": { - "version": "3.1.0", - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, + "node_modules/@typescript-eslint/types": { + "version": "6.20.0", + "dev": true, + "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@nuxtjs/opencollective": { - "version": "0.3.2", - "license": "MIT", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.20.0", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.0", - "node-fetch": "^2.6.1" - }, - "bin": { - "opencollective": "bin/opencollective.js" + "@typescript-eslint/types": "6.20.0", + "@typescript-eslint/visitor-keys": "6.20.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": ">=8.0.0", - "npm": ">=5.0.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@peculiar/asn1-android": { - "version": "2.3.6", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.3.6", - "asn1js": "^3.0.5", - "tslib": "^2.4.0" + "balanced-match": "^1.0.0" } }, - "node_modules/@peculiar/asn1-schema": { - "version": "2.3.6", - "license": "MIT", + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "dev": true, + "license": "ISC", "dependencies": { - "asn1js": "^3.0.5", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@peculiar/asn1-x509": { - "version": "2.3.6", + "node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "dev": true, "license": "MIT", "dependencies": { - "@peculiar/asn1-schema": "^2.3.6", - "asn1js": "^3.0.5", - "ipaddr.js": "^2.0.1", - "pvtsutils": "^1.3.2", - "tslib": "^2.4.0" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.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": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" } }, - "node_modules/@peculiar/asn1-x509/node_modules/ipaddr.js": { - "version": "2.1.0", + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "dev": true, "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, "engines": { - "node": ">= 10" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "dev": true, "license": "MIT", - "optional": true, "engines": { - "node": ">=14" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@pkgr/utils": { - "version": "2.4.2", + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.3.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", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.6.0" + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "funding": { "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/@redis/bloom": { - "version": "1.2.0", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@redis/client": { - "version": "1.5.11", + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "dev": true, "license": "MIT", "dependencies": { - "cluster-key-slot": "1.1.2", - "generic-pool": "3.9.0", - "yallist": "4.0.0" + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">=14" - } - }, - "node_modules/@redis/client/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/@redis/graph": { - "version": "1.1.0", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@redis/json": { - "version": "1.0.6", + "node_modules/@typescript-eslint/utils/node_modules/brace-expansion": { + "version": "2.0.1", + "dev": true, "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/@redis/search": { - "version": "1.1.5", - "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" + "node_modules/@typescript-eslint/utils/node_modules/minimatch": { + "version": "9.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@redis/time-series": { - "version": "1.0.5", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.20.0", + "dev": true, "license": "MIT", - "peerDependencies": { - "@redis/client": "^1.0.0" + "dependencies": { + "@typescript-eslint/types": "6.20.0", + "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/@rollup/rollup-android-arm-eabi": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", - "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==", - "cpu": [ - "arm" - ], + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", "dev": true, - "optional": true, - "os": [ - "android" - ] + "license": "ISC" }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz", - "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==", - "cpu": [ - "arm64" - ], + "node_modules/@vitejs/plugin-react-swc": { + "version": "3.6.0", "dev": true, - "optional": true, - "os": [ - "android" - ] + "license": "MIT", + "dependencies": { + "@swc/core": "^1.3.107" + }, + "peerDependencies": { + "vite": "^4 || ^5" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz", - "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==", - "cpu": [ - "arm64" - ], + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", "dev": true, - "optional": true, - "os": [ - "darwin" - ] + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz", - "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==", - "cpu": [ - "x64" - ], + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", "dev": true, - "optional": true, - "os": [ - "darwin" - ] + "license": "MIT" }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz", - "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==", - "cpu": [ - "arm" - ], + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "license": "MIT" }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz", - "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==", - "cpu": [ - "arm64" - ], + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "license": "MIT" }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz", - "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==", - "cpu": [ - "arm64" - ], + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz", - "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==", - "cpu": [ - "riscv64" - ], + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "license": "MIT" }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz", - "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==", - "cpu": [ - "x64" - ], + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz", - "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==", - "cpu": [ - "x64" - ], + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", "dev": true, - "optional": true, - "os": [ - "linux" - ] + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz", - "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==", - "cpu": [ - "arm64" - ], + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", "dev": true, - "optional": true, - "os": [ - "win32" - ] + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz", - "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==", - "cpu": [ - "ia32" - ], + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", "dev": true, - "optional": true, - "os": [ - "win32" - ] + "license": "MIT" }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz", - "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==", - "cpu": [ - "x64" - ], + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@sentry-internal/tracing": { - "version": "7.74.1", "license": "MIT", "dependencies": { - "@sentry/core": "7.74.1", - "@sentry/types": "7.74.1", - "@sentry/utils": "7.74.1", - "tslib": "^2.4.1 || ^1.9.3" - }, - "engines": { - "node": ">=8" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" } }, - "node_modules/@sentry/core": { - "version": "7.74.1", + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "dev": true, "license": "MIT", "dependencies": { - "@sentry/types": "7.74.1", - "@sentry/utils": "7.74.1", - "tslib": "^2.4.1 || ^1.9.3" - }, - "engines": { - "node": ">=8" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, - "node_modules/@sentry/hub": { - "version": "7.74.1", + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "dev": true, "license": "MIT", "dependencies": { - "@sentry/core": "7.74.1", - "@sentry/types": "7.74.1", - "@sentry/utils": "7.74.1", - "tslib": "^2.4.1 || ^1.9.3" - }, - "engines": { - "node": ">=8" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" } }, - "node_modules/@sentry/node": { - "version": "7.74.1", + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "dev": true, "license": "MIT", "dependencies": { - "@sentry-internal/tracing": "7.74.1", - "@sentry/core": "7.74.1", - "@sentry/types": "7.74.1", - "@sentry/utils": "7.74.1", - "cookie": "^0.5.0", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^2.4.1 || ^1.9.3" - }, - "engines": { - "node": ">=8" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, - "node_modules/@sentry/profiling-node": { - "version": "1.2.1", - "hasInstallScript": true, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "dev": true, "license": "MIT", "dependencies": { - "@sentry/core": "^7.64.0", - "@sentry/hub": "^7.64.0", - "@sentry/node": "^7.64.0", - "@sentry/types": "^7.64.0", - "@sentry/utils": "^7.64.0", - "detect-libc": "^2.0.1", - "node-abi": "^3.28.0", - "node-gyp": "^9.3.0" - }, - "bin": { - "sentry-prune-profiler-binaries": "scripts/prune-profiler-binaries.mjs" - }, - "engines": { - "node": ">=8.0.0" + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" } }, - "node_modules/@sentry/types": { - "version": "7.74.1", - "license": "MIT", - "engines": { - "node": ">=8" - } + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "dev": true, + "license": "Apache-2.0" }, - "node_modules/@sentry/utils": { - "version": "7.74.1", + "node_modules/abbrev": { + "version": "1.1.1", + "license": "ISC" + }, + "node_modules/accepts": { + "version": "1.3.8", "license": "MIT", "dependencies": { - "@sentry/types": "7.74.1", - "tslib": "^2.4.1 || ^1.9.3" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/@simplewebauthn/server": { - "version": "0.10.6", + "node_modules/acorn": { + "version": "8.11.3", + "dev": true, "license": "MIT", - "dependencies": { - "@peculiar/asn1-android": "^2.0.26", - "@peculiar/asn1-schema": "^2.0.26", - "@peculiar/asn1-x509": "^2.0.26", - "@simplewebauthn/typescript-types": "^0.10.5", - "base64url": "^3.0.1", - "cbor": "^5.1.0", - "elliptic": "^6.5.3", - "jsrsasign": "^10.0.5", - "jwk-to-pem": "^2.0.4", - "node-fetch": "^2.6.0", - "node-rsa": "^1.1.1" + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=10.0.0" + "node": ">=0.4.0" } }, - "node_modules/@simplewebauthn/typescript-types": { - "version": "0.10.5", - "license": "MIT" - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "dev": true, - "license": "MIT" - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", + "node_modules/acorn-import-assertions": { + "version": "1.9.0", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" + "peerDependencies": { + "acorn": "^8" } }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", + "node_modules/acorn-jsx": { + "version": "5.3.2", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", + "node_modules/acorn-walk": { + "version": "8.2.0", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" + "license": "MIT", + "engines": { + "node": ">=0.4.0" } }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.0", - "license": "MIT" - }, - "node_modules/@socket.io/redis-adapter": { - "version": "8.2.1", + "node_modules/agent-base": { + "version": "6.0.2", "license": "MIT", "dependencies": { - "debug": "~4.3.1", - "notepack.io": "~3.0.1", - "uid2": "1.0.0" + "debug": "4" }, "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "socket.io-adapter": "^2.4.0" + "node": ">= 6.0.0" } }, - "node_modules/@swc/cli": { - "version": "0.1.62", - "dev": true, + "node_modules/agentkeepalive": { + "version": "4.5.0", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@mole-inc/bin-wrapper": "^8.0.1", - "commander": "^7.1.0", - "fast-glob": "^3.2.5", - "semver": "^7.3.8", - "slash": "3.0.0", - "source-map": "^0.7.3" - }, - "bin": { - "spack": "bin/spack.js", - "swc": "bin/swc.js", - "swcx": "bin/swcx.js" + "humanize-ms": "^1.2.1" }, "engines": { - "node": ">= 12.13" - }, - "peerDependencies": { - "@swc/core": "^1.2.66", - "chokidar": "^3.5.1" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } + "node": ">= 8.0.0" } }, - "node_modules/@swc/cli/node_modules/commander": { - "version": "7.2.0", - "dev": true, + "node_modules/aggregate-error": { + "version": "3.1.0", "license": "MIT", - "optional": true, - "peer": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, "engines": { - "node": ">= 10" + "node": ">=8" } }, - "node_modules/@swc/core": { - "version": "1.3.107", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.107.tgz", - "integrity": "sha512-zKhqDyFcTsyLIYK1iEmavljZnf4CCor5pF52UzLAz4B6Nu/4GLU+2LQVAf+oRHjusG39PTPjd2AlRT3f3QWfsQ==", + "node_modules/ajv": { + "version": "8.12.0", "dev": true, - "hasInstallScript": true, + "license": "MIT", "dependencies": { - "@swc/counter": "^0.1.1", - "@swc/types": "^0.1.5" - }, - "engines": { - "node": ">=10" + "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": "opencollective", - "url": "https://opencollective.com/swc" - }, - "optionalDependencies": { - "@swc/core-darwin-arm64": "1.3.107", - "@swc/core-darwin-x64": "1.3.107", - "@swc/core-linux-arm-gnueabihf": "1.3.107", - "@swc/core-linux-arm64-gnu": "1.3.107", - "@swc/core-linux-arm64-musl": "1.3.107", - "@swc/core-linux-x64-gnu": "1.3.107", - "@swc/core-linux-x64-musl": "1.3.107", - "@swc/core-win32-arm64-msvc": "1.3.107", - "@swc/core-win32-ia32-msvc": "1.3.107", - "@swc/core-win32-x64-msvc": "1.3.107" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" }, "peerDependencies": { - "@swc/helpers": "^0.5.0" + "ajv": "^8.0.0" }, "peerDependenciesMeta": { - "@swc/helpers": { + "ajv": { "optional": true } } }, - "node_modules/@swc/core-darwin-arm64": { - "version": "1.3.107", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.107.tgz", - "integrity": "sha512-47tD/5vSXWxPd0j/ZllyQUg4bqalbQTsmqSw0J4dDdS82MWqCAwUErUrAZPRjBkjNQ6Kmrf5rpCWaGTtPw+ngw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "node_modules/algo-msgpack-with-bigint": { + "version": "2.1.1", + "license": "ISC", "engines": { - "node": ">=10" + "node": ">= 10" } }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.3.107", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.107.tgz", - "integrity": "sha512-hwiLJ2ulNkBGAh1m1eTfeY1417OAYbRGcb/iGsJ+LuVLvKAhU/itzsl535CvcwAlt2LayeCFfcI8gdeOLeZa9A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "node_modules/algosdk": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-2.7.0.tgz", + "integrity": "sha512-sBE9lpV7bup3rZ+q2j3JQaFAE9JwZvjWKX00vPlG8e9txctXbgLL56jZhSWZndqhDI9oI+0P4NldkuQIWdrUyg==", + "dependencies": { + "algo-msgpack-with-bigint": "^2.1.1", + "buffer": "^6.0.3", + "hi-base32": "^0.5.1", + "js-sha256": "^0.9.0", + "js-sha3": "^0.8.0", + "js-sha512": "^0.8.0", + "json-bigint": "^1.0.0", + "tweetnacl": "^1.0.3", + "vlq": "^2.0.4" + }, "engines": { - "node": ">=10" + "node": ">=18.0.0" } }, - "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.3.107", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.107.tgz", - "integrity": "sha512-I2wzcC0KXqh0OwymCmYwNRgZ9nxX7DWnOOStJXV3pS0uB83TXAkmqd7wvMBuIl9qu4Hfomi9aDM7IlEEn9tumQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" + "node_modules/algosdk/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" + } ], - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.3.107", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.107.tgz", - "integrity": "sha512-HWgnn7JORYlOYnGsdunpSF8A+BCZKPLzLtEUA27/M/ZuANcMZabKL9Zurt7XQXq888uJFAt98Gy+59PU90aHKg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/ansi-colors": { + "version": "4.1.3", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.3.107", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.107.tgz", - "integrity": "sha512-vfPF74cWfAm8hyhS8yvYI94ucMHIo8xIYU+oFOW9uvDlGQRgnUf/6DEVbLyt/3yfX5723Ln57U8uiMALbX5Pyw==", - "cpu": [ - "arm64" - ], + "node_modules/ansi-escapes": { + "version": "4.3.2", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.3.107", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.107.tgz", - "integrity": "sha512-uBVNhIg0ip8rH9OnOsCARUFZ3Mq3tbPHxtmWk9uAa5u8jQwGWeBx5+nTHpDOVd3YxKb6+5xDEI/edeeLpha/9g==", - "cpu": [ - "x64" - ], + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@swc/core-linux-x64-musl": { - "version": "1.3.107", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.107.tgz", - "integrity": "sha512-mvACkUvzSIB12q1H5JtabWATbk3AG+pQgXEN95AmEX2ZA5gbP9+B+mijsg7Sd/3tboHr7ZHLz/q3SHTvdFJrEw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.3.107", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.107.tgz", - "integrity": "sha512-J3P14Ngy/1qtapzbguEH41kY109t6DFxfbK4Ntz9dOWNuVY3o9/RTB841ctnJk0ZHEG+BjfCJjsD2n8H5HcaOA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], + "node_modules/ansi-sequence-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", + "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", + "dev": true + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.3.107", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.107.tgz", - "integrity": "sha512-ZBUtgyjTHlz8TPJh7kfwwwFma+ktr6OccB1oXC8fMSopD0AxVnQasgun3l3099wIsAB9eEsJDQ/3lDkOLs1gBA==", - "cpu": [ - "ia32" - ], + "node_modules/anymatch": { + "version": "3.1.3", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, "engines": { - "node": ">=10" + "node": ">= 8" } }, - "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.3.107", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.107.tgz", - "integrity": "sha512-Eyzo2XRqWOxqhE1gk9h7LWmUf4Bp4Xn2Ttb0ayAXFp6YSTxQIThXcT9kipXZqcpxcmDwoq8iWbbf2P8XL743EA==", - "cpu": [ - "x64" - ], + "node_modules/append-field": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/aproba": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/arch": { + "version": "2.2.0", "dev": true, - "optional": true, - "os": [ - "win32" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } ], + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@swc/counter": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz", - "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==", - "dev": true + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "node_modules/@swc/types": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", - "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", - "dev": true + "node_modules/arg": { + "version": "4.1.3", + "dev": true, + "license": "MIT" }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", + "node_modules/argparse": { + "version": "2.0.1", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "defer-to-connect": "^2.0.0" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@tanstack/query-core": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.18.0.tgz", - "integrity": "sha512-8c6nxeAnGHxIDZIyDmHdmgFt4D+LprAQaJmjsnM4szcIjsWOyFlzxdqQUuQ/XuQRvUgqYaqlJTtDADlSS7pTPQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" + "node_modules/array-flatten": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/array-timsort": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/@tanstack/react-query": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.18.0.tgz", - "integrity": "sha512-7FKxNfxxKEL7n3ADpwp81Fy4FX85hNkYVzQQVQsF0JAPl93c3d1gmNZMIbEtOqgYfom1/ontGh3FiZGYj3xyWA==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "dev": true, + "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.18.0" + "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" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" + "engines": { + "node": ">= 0.4" }, - "peerDependencies": { - "react": "^18.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", + "node_modules/asap": { + "version": "2.0.6", "dev": true, + "license": "MIT" + }, + "node_modules/asn1": { + "version": "0.2.6", "license": "MIT", - "optional": true, - "peer": true + "dependencies": { + "safer-buffer": "~2.1.0" + } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", + "node_modules/asn1.js": { + "version": "5.4.1", "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1js": { + "version": "3.0.5", + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.2", + "pvutils": "^1.1.3", + "tslib": "^2.4.0" + }, "engines": { - "node": ">= 10" + "node": ">=12.0.0" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", + "node_modules/async": { + "version": "3.2.5", "dev": true, "license": "MIT" }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", + "node_modules/asynckit": { + "version": "0.4.0", "dev": true, "license": "MIT" }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", + "node_modules/at-least-node": { + "version": "1.0.0", "dev": true, - "license": "MIT" + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", + "node_modules/available-typed-arrays": { + "version": "1.0.7", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/@types/babel__core": { - "version": "7.20.1", + "node_modules/babel-jest": { + "version": "29.7.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" + "@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/@types/babel__generator": { - "version": "7.6.4", + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "@babel/types": "^7.0.0" + "@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/@types/babel__template": { - "version": "7.4.1", + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "@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/@types/babel__traverse": { - "version": "7.20.1", + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@types/body-parser": { - "version": "1.19.2", + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", "dev": true, "license": "MIT", "dependencies": { - "@types/connect": "*", - "@types/node": "*" + "@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/@types/cacheable-request": { - "version": "6.0.3", - "dev": true, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" } }, - "node_modules/@types/connect": { - "version": "3.4.36", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.8", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.5.0", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "license": "MIT" - }, - "node_modules/@types/cookiejar": { - "version": "2.1.2", + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", "dev": true, - "license": "MIT" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/@types/cors": { - "version": "2.8.14", + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.9.0", + "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "@babel/helper-define-polyfill-provider": "^0.5.0", + "core-js-compat": "^3.34.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@types/engine.io": { - "version": "3.1.8", + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.5", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "@babel/helper-define-polyfill-provider": "^0.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@types/eslint": { - "version": "8.44.2", + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "@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/@types/eslint-scope": { - "version": "3.7.4", + "node_modules/babel-preset-jest": { + "version": "29.6.3", "dev": true, "license": "MIT", "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" + "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/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" }, - "node_modules/@types/express": { - "version": "4.17.18", - "dev": true, + "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" + } + ], + "license": "MIT" + }, + "node_modules/base64id": { + "version": "2.0.0", "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" + "engines": { + "node": "^4.5.0 || >= 5.9" } }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.36", - "dev": true, + "node_modules/base64url": { + "version": "3.0.1", "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@types/express-session": { - "version": "1.17.8", + "node_modules/bignumber.js": { + "version": "9.1.2", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/bin-check": { + "version": "4.1.0", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@types/express": "*" + "execa": "^0.7.0", + "executable": "^4.1.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@types/express-socket.io-session": { - "version": "1.3.7", + "node_modules/bin-check/node_modules/cross-spawn": { + "version": "5.1.0", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@types/express": "*", - "@types/express-session": "*", - "@types/socket.io": "2.1.13" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "node_modules/@types/graceful-fs": { - "version": "4.1.7", + "node_modules/bin-check/node_modules/execa": { + "version": "0.7.0", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@types/node": "*" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@types/hbs": { - "version": "4.0.2", + "node_modules/bin-check/node_modules/get-stream": { + "version": "3.0.0", "dev": true, "license": "MIT", - "dependencies": { - "handlebars": "^4.1.0" + "optional": true, + "peer": true, + "engines": { + "node": ">=4" } }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", + "node_modules/bin-check/node_modules/is-stream": { + "version": "1.1.0", "dev": true, "license": "MIT", "optional": true, - "peer": true - }, - "node_modules/@types/http-errors": { - "version": "2.0.1", - "dev": true, - "license": "MIT" + "peer": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", + "node_modules/bin-check/node_modules/lru-cache": { + "version": "4.1.5", "dev": true, - "license": "MIT" + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", + "node_modules/bin-check/node_modules/npm-run-path": { + "version": "2.0.2", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@types/istanbul-lib-coverage": "*" + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", + "node_modules/bin-check/node_modules/path-key": { + "version": "2.0.1", "dev": true, "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" + "optional": true, + "peer": true, + "engines": { + "node": ">=4" } }, - "node_modules/@types/jest": { - "version": "29.5.5", + "node_modules/bin-check/node_modules/shebang-command": { + "version": "1.2.0", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@types/json-schema": { - "version": "7.0.12", + "node_modules/bin-check/node_modules/shebang-regex": { + "version": "1.0.0", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/@types/keyv": { - "version": "3.1.4", + "node_modules/bin-check/node_modules/which": { + "version": "1.3.1", "dev": true, - "license": "MIT", + "license": "ISC", "optional": true, "peer": true, "dependencies": { - "@types/node": "*" + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "node_modules/@types/mime": { - "version": "1.3.2", + "node_modules/bin-check/node_modules/yallist": { + "version": "2.1.2", "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "20.7.0", - "license": "MIT" - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.11", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", - "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" + "license": "ISC", + "optional": true, + "peer": true }, - "node_modules/@types/qrcode": { - "version": "1.5.5", + "node_modules/bin-version": { + "version": "6.0.0", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@types/node": "*" + "execa": "^5.0.0", + "find-versions": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/qs": { - "version": "6.9.8", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", + "node_modules/bin-version-check": { + "version": "5.1.0", "dev": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.2.48", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", - "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" + "bin-version": "^6.0.0", + "semver": "^7.5.3", + "semver-truncate": "^3.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/react-dom": { - "version": "18.2.18", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.18.tgz", - "integrity": "sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==", + "node_modules/binary-extensions": { + "version": "2.2.0", "dev": true, - "dependencies": { - "@types/react": "*" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/@types/react-transition-group": { - "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==", + "node_modules/bl": { + "version": "4.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "@types/react": "*" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/@types/responselike": { - "version": "1.0.0", + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@types/node": "*" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/@types/scheduler": { - "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.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", - "dev": true + "node_modules/bn.js": { + "version": "4.12.0", + "license": "MIT" }, - "node_modules/@types/send": { - "version": "0.17.1", - "dev": true, + "node_modules/body-parser": { + "version": "1.20.2", "license": "MIT", "dependencies": { - "@types/mime": "^1", - "@types/node": "*" + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/@types/serve-static": { - "version": "1.15.2", - "dev": true, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", "license": "MIT", "dependencies": { - "@types/http-errors": "*", - "@types/mime": "*", - "@types/node": "*" + "ms": "2.0.0" } }, - "node_modules/@types/socket.io": { - "version": "2.1.13", + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/boolbase": { + "version": "1.0.0", "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", "license": "MIT", "dependencies": { - "@types/engine.io": "*", - "@types/node": "*", - "@types/socket.io-parser": "*" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@types/socket.io-parser": { - "version": "3.0.0", + "node_modules/braces": { + "version": "3.0.2", "dev": true, "license": "MIT", "dependencies": { - "socket.io-parser": "*" + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "dev": true, + "node_modules/brorand": { + "version": "1.1.0", "license": "MIT" }, - "node_modules/@types/superagent": { - "version": "4.1.18", + "node_modules/browserslist": { + "version": "4.23.0", "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" + } + ], "license": "MIT", "dependencies": { - "@types/cookiejar": "*", - "@types/node": "*" + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "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/@types/supertest": { - "version": "2.0.13", + "node_modules/bs-logger": { + "version": "0.2.6", "dev": true, "license": "MIT", "dependencies": { - "@types/superagent": "*" + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/@types/ua-parser-js": { - "version": "0.7.37", + "node_modules/bser": { + "version": "2.1.1", "dev": true, - "license": "MIT" - }, - "node_modules/@types/webidl-conversions": { - "version": "7.0.0", - "license": "MIT" - }, - "node_modules/@types/whatwg-url": { - "version": "8.2.2", - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@types/node": "*", - "@types/webidl-conversions": "*" + "node-int64": "^0.4.0" } }, - "node_modules/@types/yargs": { - "version": "17.0.24", - "dev": true, + "node_modules/bson": { + "version": "5.5.1", + "license": "Apache-2.0", + "engines": { + "node": ">=14.20.1" + } + }, + "node_modules/buffer": { + "version": "5.7.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" + } + ], "license": "MIT", "dependencies": { - "@types/yargs-parser": "*" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "dev": true, + "node_modules/buffer-from": { + "version": "1.1.2", "license": "MIT" }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.20.0.tgz", - "integrity": "sha512-fTwGQUnjhoYHeSF6m5pWNkzmDDdsKELYrOBxhjMrofPqCkoC2k3B2wvGHFxa1CTIqkEn88nlW1HVMztjo2K8Hg==", + "node_modules/builtin-modules": { + "version": "3.3.0", "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.20.0", - "@typescript-eslint/type-utils": "6.20.0", - "@typescript-eslint/utils": "6.20.0", - "@typescript-eslint/visitor-keys": "6.20.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, + "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@typescript-eslint/parser": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.20.0.tgz", - "integrity": "sha512-bYerPDF/H5v6V76MdMYhjwmwgMA+jlPVqjSDq2cRqMi8bP5sR3Z+RLOiOMad3nsnmDVmn2gAFCyNgh/dIrfP/w==", - "dev": true, + "node_modules/busboy": { + "version": "1.6.0", "dependencies": { - "@typescript-eslint/scope-manager": "6.20.0", - "@typescript-eslint/types": "6.20.0", - "@typescript-eslint/typescript-estree": "6.20.0", - "@typescript-eslint/visitor-keys": "6.20.0", - "debug": "^4.3.4" + "streamsearch": "^1.1.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=10.16.0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.20.0.tgz", - "integrity": "sha512-p4rvHQRDTI1tGGMDFQm+GtxP1ZHyAh64WANVoyEcNMpaTFn3ox/3CcgtIlELnRfKzSs/DwYlDccJEtr3O6qBvA==", + "node_modules/bytes": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/c8": { + "version": "9.1.0", "dev": true, + "license": "ISC", "dependencies": { - "@typescript-eslint/types": "6.20.0", - "@typescript-eslint/visitor-keys": "6.20.0" + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^3.1.1", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.1.6", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1" }, - "engines": { - "node": "^16.0.0 || >=18.0.0" + "bin": { + "c8": "bin/c8.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "engines": { + "node": ">=14.14.0" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.20.0.tgz", - "integrity": "sha512-qnSobiJQb1F5JjN0YDRPHruQTrX7ICsmltXhkV536mp4idGAYrIyr47zF/JmkJtEcAVnIz4gUYJ7gOZa6SmN4g==", - "dev": true, + "node_modules/cacache": { + "version": "17.1.4", + "license": "ISC", "dependencies": { - "@typescript-eslint/typescript-estree": "6.20.0", - "@typescript-eslint/utils": "6.20.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@typescript-eslint/types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.20.0.tgz", - "integrity": "sha512-MM9mfZMAhiN4cOEcUOEx+0HmuaW3WBfukBZPCfwSqFnQy0grXYtngKCqpQN339X3RrwtzspWJrpbrupKYUSBXQ==", - "dev": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.20.0.tgz", - "integrity": "sha512-RnRya9q5m6YYSpBN7IzKu9FmLcYtErkDkc8/dKv81I9QiLLtVBHrjz+Ev/crAqgMNW2FCsoZF4g2QUylMnJz+g==", - "dev": true, + "node_modules/cacache/node_modules/glob": { + "version": "10.3.10", + "license": "ISC", "dependencies": { - "@typescript-eslint/types": "6.20.0", - "@typescript-eslint/visitor-keys": "6.20.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "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" }, - "engines": { - "node": "^16.0.0 || >=18.0.0" + "bin": { + "glob": "dist/esm/bin.mjs" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "engines": { + "node": ">=16 || 14 >=14.17" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "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/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "license": "ISC", + "engines": { + "node": ">=12" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "node_modules/cacache/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, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4023,5064 +6432,5051 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/utils": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.20.0.tgz", - "integrity": "sha512-/EKuw+kRu2vAqCoDwDCBtDRU6CTKbUmwwI7SH7AashZ+W+7o8eiyy6V2cdOqN49KsTcASWsC5QeghYuRDTyOOg==", + "node_modules/cacache/node_modules/minipass": { + "version": "7.0.4", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", "dev": true, + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.20.0", - "@typescript-eslint/types": "6.20.0", - "@typescript-eslint/typescript-estree": "6.20.0", - "semver": "^7.5.4" + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "node": ">=8" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.20.0.tgz", - "integrity": "sha512-E8Cp98kRe4gKHjJD4NExXKz/zOJ1A2hhZc+IMVD6i7w4yjIvh6VyuRI0gRtxAsXtoC35uGMaQ9rjI2zJaXDEAw==", + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", "dev": true, + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@typescript-eslint/types": "6.20.0", - "eslint-visitor-keys": "^3.4.1" + "pump": "^3.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/@vitejs/plugin-react-swc": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.6.0.tgz", - "integrity": "sha512-XFRbsGgpGxGzEV5i5+vRiro1bwcIaZDIdBRP16qwm+jP68ue/S8FJTBEgOeojtVDYrbSua3XFp71kC8VJE6v+g==", - "dev": true, + "node_modules/call-bind": { + "version": "1.0.7", + "license": "MIT", "dependencies": { - "@swc/core": "^1.3.107" + "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" }, - "peerDependencies": { - "vite": "^4 || ^5" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "dev": true, + "node_modules/callsites": { + "version": "3.1.0", "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "engines": { + "node": ">=6" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", + "node_modules/camelcase": { + "version": "5.3.1", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", + "node_modules/caniuse-lite": { + "version": "1.0.30001587", "dev": true, - "license": "MIT" + "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" + } + ], + "license": "CC-BY-4.0" }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "dev": true, + "node_modules/cbor": { + "version": "5.2.0", "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" + "bignumber.js": "^9.0.1", + "nofilter": "^1.0.4" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "dev": true, + "node_modules/chalk": { + "version": "4.1.2", "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", + "node_modules/char-regex": { + "version": "1.0.2", "dev": true, "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "engines": { + "node": ">=10" } }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", + "node_modules/chardet": { + "version": "0.7.0", "dev": true, - "license": "Apache-2.0", + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.5.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", "dependencies": { - "@xtuc/long": "4.2.2" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", + "node_modules/chownr": { + "version": "2.0.0", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=6.0" + } }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", + "node_modules/ci-info": { + "version": "3.8.0", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "engines": { + "node": ">=8" } }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", + "node_modules/cjs-module-lexer": { + "version": "1.2.3", "dev": true, + "license": "MIT" + }, + "node_modules/clean-stack": { + "version": "2.2.0", "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "engines": { + "node": ">=6" } }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", + "node_modules/cli-cursor": { + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", + "node_modules/cli-spinners": { + "version": "2.9.0", "dev": true, "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", + "node_modules/cli-table3": { + "version": "0.6.3", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" } }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", + "node_modules/cli-width": { + "version": "3.0.0", "dev": true, - "license": "BSD-3-Clause" + "license": "ISC", + "engines": { + "node": ">= 10" + } }, - "node_modules/@xtuc/long": { - "version": "4.2.2", + "node_modules/cliui": { + "version": "8.0.1", "dev": true, - "license": "Apache-2.0" - }, - "node_modules/abbrev": { - "version": "1.1.1", - "license": "ISC" - }, - "node_modules/accepts": { - "version": "1.3.8", - "license": "MIT", + "license": "ISC", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">=12" } }, - "node_modules/acorn": { - "version": "8.10.0", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", "dev": true, "license": "MIT", - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=0.4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", + "node_modules/clone": { + "version": "1.0.4", "dev": true, "license": "MIT", - "peerDependencies": { - "acorn": "^8" + "engines": { + "node": ">=0.8" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/clone-response": { + "version": "1.0.3", "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "dev": true, + "node_modules/clsx": { + "version": "2.1.0", "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">=6" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "license": "MIT", - "dependencies": { - "debug": "4" - }, + "node_modules/cluster-key-slot": { + "version": "1.1.2", + "license": "Apache-2.0", "engines": { - "node": ">= 6.0.0" + "node": ">=0.10.0" } }, - "node_modules/agentkeepalive": { - "version": "4.5.0", + "node_modules/co": { + "version": "4.6.0", + "dev": true, "license": "MIT", - "dependencies": { - "humanize-ms": "^1.2.1" - }, "engines": { - "node": ">= 8.0.0" + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/color": { + "version": "4.2.3", + "dev": true, "license": "MIT", "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "color-convert": "^2.0.1", + "color-string": "^1.9.0" }, "engines": { - "node": ">=8" + "node": ">=12.5.0" } }, - "node_modules/ajv": { - "version": "8.12.0", - "dev": true, + "node_modules/color-convert": { + "version": "2.0.1", "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" + "color-name": "~1.1.4" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, - "node_modules/algo-msgpack-with-bigint": { - "version": "2.1.1", + "node_modules/color-support": { + "version": "1.1.3", "license": "ISC", - "engines": { - "node": ">= 10" + "bin": { + "color-support": "bin.js" } }, - "node_modules/algosdk": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-2.7.0.tgz", - "integrity": "sha512-sBE9lpV7bup3rZ+q2j3JQaFAE9JwZvjWKX00vPlG8e9txctXbgLL56jZhSWZndqhDI9oI+0P4NldkuQIWdrUyg==", + "node_modules/combined-stream": { + "version": "1.0.8", + "dev": true, + "license": "MIT", "dependencies": { - "algo-msgpack-with-bigint": "^2.1.1", - "buffer": "^6.0.3", - "hi-base32": "^0.5.1", - "js-sha256": "^0.9.0", - "js-sha3": "^0.8.0", - "js-sha512": "^0.8.0", - "json-bigint": "^1.0.0", - "tweetnacl": "^1.0.3", - "vlq": "^2.0.4" + "delayed-stream": "~1.0.0" }, "engines": { - "node": ">=18.0.0" + "node": ">= 0.8" } }, - "node_modules/algosdk/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" - } - ], + "node_modules/commander": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/comment-json": { + "version": "4.2.3", + "dev": true, "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "array-timsort": "^1.0.3", + "core-util-is": "^1.0.3", + "esprima": "^4.0.1", + "has-own-prop": "^2.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", + "node_modules/common-tags": { + "version": "1.8.2", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=4.0.0" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", + "node_modules/component-emitter": { + "version": "1.3.0", "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "engines": [ + "node >= 0.8" + ], "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", + "node_modules/concurrently": { + "version": "8.2.2", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "date-fns": "^2.30.0", + "lodash": "^4.17.21", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "spawn-command": "0.0.2", + "supports-color": "^8.1.1", + "tree-kill": "^1.2.2", + "yargs": "^17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, "engines": { - "node": ">=10" + "node": "^14.13.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=8" + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "dev": true, - "license": "ISC", + "node_modules/connect-mongo": { + "version": "5.0.0", + "license": "MIT", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "debug": "^4.3.1", + "kruptein": "^3.0.0" }, "engines": { - "node": ">= 8" + "node": ">=12.9.0" + }, + "peerDependencies": { + "express-session": "^1.17.1", + "mongodb": "^5.1.0" } }, - "node_modules/append-field": { - "version": "1.0.0", + "node_modules/consola": { + "version": "2.15.3", "license": "MIT" }, - "node_modules/aproba": { - "version": "2.0.0", + "node_modules/console-control-strings": { + "version": "1.1.0", "license": "ISC" }, - "node_modules/arch": { - "version": "2.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/content-disposition": { + "version": "0.5.4", "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "license": "ISC", "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "safe-buffer": "5.2.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 0.6" } }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "3.6.2", + "node_modules/content-type": { + "version": "1.0.5", "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/array-timsort": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/asap": { - "version": "2.0.6", + "node_modules/convert-source-map": { + "version": "2.0.0", "dev": true, "license": "MIT" }, - "node_modules/asn1": { - "version": "0.2.6", + "node_modules/cookie": { + "version": "0.5.0", "license": "MIT", - "dependencies": { - "safer-buffer": "~2.1.0" + "engines": { + "node": ">= 0.6" } }, - "node_modules/asn1.js": { - "version": "5.4.1", + "node_modules/cookie-parser": { + "version": "1.3.5", "license": "MIT", "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/asn1js": { - "version": "3.0.5", - "license": "BSD-3-Clause", - "dependencies": { - "pvtsutils": "^1.3.2", - "pvutils": "^1.1.3", - "tslib": "^2.4.0" + "cookie": "0.1.3", + "cookie-signature": "1.0.6" }, "engines": { - "node": ">=12.0.0" + "node": ">= 0.8.0" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-jest": { - "version": "29.7.0", - "dev": true, + "node_modules/cookie-parser/node_modules/cookie": { + "version": "0.1.3", "license": "MIT", - "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": "*" } }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "license": "BSD-3-Clause", - "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/cookie-signature": { + "version": "1.0.6", + "license": "MIT" }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", + "node_modules/cookiejar": { + "version": "2.1.4", "dev": true, - "license": "BSD-3-Clause", - "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" - } + "license": "MIT" }, - "node_modules/babel-plugin-istanbul/node_modules/semver": { - "version": "6.3.1", + "node_modules/core-js-compat": { + "version": "3.36.0", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "browserslist": "^4.22.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "dev": true, + "node_modules/core-util-is": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", "license": "MIT", "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" + "object-assign": "^4", + "vary": "^1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.10" } }, - "node_modules/babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "node_modules/cosmiconfig": { + "version": "7.1.0", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, "engines": { - "node": ">=10", - "npm": ">=6" + "node": ">=10" } }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "dev": true, + "node_modules/crc": { + "version": "3.8.0", "license": "MIT", "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" + "buffer": "^5.1.0" } }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", + "node_modules/create-jest": { + "version": "29.7.0", "dev": true, "license": "MIT", "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" + "@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" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "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" - } - ], + "node_modules/create-require": { + "version": "1.1.1", + "dev": true, "license": "MIT" }, - "node_modules/base64id": { - "version": "2.0.0", + "node_modules/cross-env": { + "version": "7.0.3", + "dev": true, "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, "engines": { - "node": "^4.5.0 || >= 5.9" + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" } }, - "node_modules/base64url": { - "version": "3.0.1", + "node_modules/cross-spawn": { + "version": "7.0.3", "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, "engines": { - "node": ">=6.0.0" + "node": ">= 8" } }, - "node_modules/big-integer": { - "version": "1.6.51", + "node_modules/crypto-random-string": { + "version": "2.0.0", "dev": true, - "license": "Unlicense", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/bignumber.js": { - "version": "9.1.2", "license": "MIT", "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/bin-check": { - "version": "4.1.0", + "node_modules/css-select": { + "version": "5.1.0", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "BSD-2-Clause", "dependencies": { - "execa": "^0.7.0", - "executable": "^4.1.0" + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/bin-check/node_modules/cross-spawn": { - "version": "5.1.0", + "node_modules/css-tree": { + "version": "2.3.1", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, - "node_modules/bin-check/node_modules/execa": { - "version": "0.7.0", + "node_modules/css-what": { + "version": "6.1.0", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, + "license": "BSD-2-Clause", "engines": { - "node": ">=4" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/bin-check/node_modules/get-stream": { - "version": "3.0.0", + "node_modules/csso": { + "version": "5.0.5", "dev": true, "license": "MIT", - "optional": true, - "peer": true, + "dependencies": { + "css-tree": "~2.2.0" + }, "engines": { - "node": ">=4" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "node_modules/bin-check/node_modules/is-stream": { - "version": "1.1.0", + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", "dev": true, "license": "MIT", - "optional": true, - "peer": true, + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "node_modules/bin-check/node_modules/lru-cache": { - "version": "4.1.5", + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", "dev": true, - "license": "ISC", - "optional": true, - "peer": true, - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } + "license": "CC0-1.0" }, - "node_modules/bin-check/node_modules/npm-run-path": { - "version": "2.0.2", + "node_modules/csstype": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/dapp-ui": { + "resolved": "sites/dapp-ui", + "link": true + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "path-key": "^2.0.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/bin-check/node_modules/path-key": { - "version": "2.0.1", + "node_modules/data-view-byte-length": { + "version": "1.0.1", "dev": true, "license": "MIT", - "optional": true, - "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/bin-check/node_modules/shebang-command": { - "version": "1.2.0", + "node_modules/data-view-byte-offset": { + "version": "1.0.0", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "shebang-regex": "^1.0.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/bin-check/node_modules/shebang-regex": { - "version": "1.0.0", + "node_modules/date-fns": { + "version": "2.30.0", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" } }, - "node_modules/bin-check/node_modules/which": { - "version": "1.3.1", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true, + "node_modules/debug": { + "version": "4.3.4", + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" + "ms": "2.1.2" }, - "bin": { - "which": "bin/which" + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/bin-check/node_modules/yallist": { - "version": "2.1.2", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true - }, - "node_modules/bin-version": { + "node_modules/decompress-response": { "version": "6.0.0", "dev": true, "license": "MIT", "optional": true, "peer": true, "dependencies": { - "execa": "^5.0.0", - "find-versions": "^5.0.0" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bin-version-check": { - "version": "5.1.0", + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", "dev": true, "license": "MIT", "optional": true, "peer": true, - "dependencies": { - "bin-version": "^6.0.0", - "semver": "^7.5.3", - "semver-truncate": "^3.0.0" - }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/binary-extensions": { - "version": "2.2.0", + "node_modules/dedent": { + "version": "1.5.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } } }, - "node_modules/bl": { - "version": "4.1.0", + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", "dev": true, "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", + "node_modules/defaults": { + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "clone": "^1.0.2" }, - "engines": { - "node": ">= 6" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bn.js": { - "version": "4.12.0", - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "1.20.2", + "node_modules/defer-to-connect": { + "version": "2.0.1", + "dev": true, "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, + "optional": true, + "peer": true, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=10" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", + "node_modules/define-data-property": { + "version": "1.1.4", "license": "MIT", "dependencies": { - "ms": "2.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/body-parser/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/bplist-parser": { - "version": "0.2.0", + "node_modules/define-properties": { + "version": "1.2.1", "dev": true, "license": "MIT", "dependencies": { - "big-integer": "^1.6.44" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">= 5.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/define-properties/node_modules/object-keys": { + "version": "1.1.1", + "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">= 0.4" } }, - "node_modules/braces": { - "version": "3.0.2", + "node_modules/delayed-stream": { + "version": "1.0.0", "dev": true, "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, "engines": { - "node": ">=8" + "node": ">=0.4.0" } }, - "node_modules/brorand": { - "version": "1.1.0", + "node_modules/delegates": { + "version": "1.0.0", "license": "MIT" }, - "node_modules/browserslist": { - "version": "4.21.10", - "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" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, + "node_modules/denque": { + "version": "2.1.0", + "license": "Apache-2.0", + "optional": true, + "peer": true, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=0.10" } }, - "node_modules/bs-logger": { - "version": "0.2.6", - "dev": true, + "node_modules/depd": { + "version": "2.0.0", "license": "MIT", - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, "engines": { - "node": ">= 6" + "node": ">= 0.8" } }, - "node_modules/bser": { - "version": "2.1.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" + "node_modules/destroy": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/bson": { - "version": "5.5.1", + "node_modules/detect-libc": { + "version": "2.0.2", "license": "Apache-2.0", "engines": { - "node": ">=14.20.1" + "node": ">=8" } }, - "node_modules/buffer": { - "version": "5.7.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" - } - ], + "node_modules/detect-newline": { + "version": "3.1.0", + "dev": true, "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "engines": { + "node": ">=8" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "license": "MIT" + "node_modules/dezalgo": { + "version": "1.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } }, - "node_modules/bull": { - "version": "4.11.4", - "license": "MIT", - "dependencies": { - "cron-parser": "^4.2.1", - "get-port": "^5.1.1", - "ioredis": "^5.3.2", - "lodash": "^4.17.21", - "msgpackr": "^1.5.2", - "semver": "^7.5.2", - "uuid": "^8.3.0" - }, + "node_modules/diff": { + "version": "4.0.2", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=12" + "node": ">=0.3.1" } }, - "node_modules/bull/node_modules/uuid": { - "version": "8.3.2", + "node_modules/diff-sequences": { + "version": "29.6.3", + "dev": true, "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/bundle-name": { - "version": "3.0.0", + "node_modules/dir-glob": { + "version": "3.0.1", "dev": true, "license": "MIT", "dependencies": { - "run-applescript": "^5.0.0" + "path-type": "^4.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/busboy": { - "version": "1.6.0", + "node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "streamsearch": "^1.1.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=10.16.0" + "node": ">=6.0.0" } }, - "node_modules/bytes": { - "version": "3.1.2", + "node_modules/dom-helpers": { + "version": "5.2.1", "license": "MIT", - "engines": { - "node": ">= 0.8" + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" } }, - "node_modules/c8": { - "version": "9.1.0", + "node_modules/dom-serializer": { + "version": "2.0.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^3.1.1", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.1", - "istanbul-reports": "^3.1.6", - "test-exclude": "^6.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^17.7.2", - "yargs-parser": "^21.1.1" - }, - "bin": { - "c8": "bin/c8.js" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, - "engines": { - "node": ">=14.14.0" + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/cacache": { - "version": "17.1.4", - "license": "ISC", + "node_modules/domelementtype": { + "version": "2.3.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^7.0.3", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" + "domelementtype": "^2.3.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "license": "MIT", + "node_modules/domutils": { + "version": "3.1.0", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "balanced-match": "^1.0.0" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/cacache/node_modules/glob": { - "version": "10.3.10", - "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" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, + "node_modules/dotenv": { + "version": "16.3.1", + "license": "BSD-2-Clause", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "7.18.3", - "license": "ISC", + "node_modules/dotenv-expand": { + "version": "10.0.0", + "license": "BSD-2-Clause", "engines": { "node": ">=12" } }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.3", - "license": "ISC", + "node_modules/duplexer2": { + "version": "0.1.4", + "license": "BSD-3-Clause", "dependencies": { - "brace-expansion": "^2.0.1" + "readable-stream": "^2.0.2" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.9", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.670", + "dev": true, + "license": "ISC" + }, + "node_modules/elliptic": { + "version": "6.5.4", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/emittery": { + "version": "0.13.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/cacache/node_modules/minipass": { - "version": "7.0.4", - "license": "ISC", + "node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.8" } }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "dev": true, + "node_modules/encoding": { + "version": "0.1.13", "license": "MIT", "optional": true, - "peer": true, - "engines": { - "node": ">=10.6.0" + "dependencies": { + "iconv-lite": "^0.6.2" } }, - "node_modules/cacheable-request": { - "version": "7.0.4", - "dev": true, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", "license": "MIT", "optional": true, - "peer": true, "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", + "node_modules/end-of-stream": { + "version": "1.4.4", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "pump": "^3.0.0" + "once": "^1.4.0" + } + }, + "node_modules/engine.io": { + "version": "6.5.3", + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.2.0" } }, - "node_modules/call-bind": { - "version": "1.0.2", + "node_modules/engine.io-client": { + "version": "6.5.3", "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0", + "xmlhttprequest-ssl": "~2.0.0" } }, - "node_modules/callsites": { - "version": "3.1.0", + "node_modules/engine.io-parser": { + "version": "5.2.1", "license": "MIT", "engines": { - "node": ">=6" + "node": ">=10.0.0" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "dev": true, + "node_modules/engine.io/node_modules/cookie": { + "version": "0.4.2", "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001532", + "node_modules/enhanced-resolve": { + "version": "5.15.0", "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" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/cbor": { - "version": "5.2.0", "license": "MIT", "dependencies": { - "bignumber.js": "^9.0.1", - "nofilter": "^1.0.4" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=10.13.0" } }, - "node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "node_modules/entities": { + "version": "4.5.0", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=10" + "node": ">=0.12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/char-regex": { - "version": "1.0.2", - "dev": true, + "node_modules/env-paths": { + "version": "2.2.1", "license": "MIT", "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/chardet": { - "version": "0.7.0", - "dev": true, + "node_modules/err-code": { + "version": "2.0.3", "license": "MIT" }, - "node_modules/chokidar": { - "version": "3.5.3", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/error-ex": { + "version": "1.3.2", "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "dev": true, + "license": "MIT", + "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.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "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.15" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 0.4" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/chownr": { - "version": "2.0.0", - "license": "ISC", + "node_modules/es-abstract/node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "dev": true, + "node_modules/es-define-property": { + "version": "1.0.0", "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, "engines": { - "node": ">=6.0" + "node": ">= 0.4" } }, - "node_modules/ci-info": { - "version": "3.8.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], + "node_modules/es-errors": { + "version": "1.3.0", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", + "node_modules/es-module-lexer": { + "version": "1.5.0", "dev": true, "license": "MIT" }, - "node_modules/clean-stack": { - "version": "2.2.0", + "node_modules/es-object-atoms": { + "version": "1.0.0", + "dev": true, "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", + "node_modules/es-set-tostringtag": { + "version": "2.0.3", "dev": true, "license": "MIT", "dependencies": { - "restore-cursor": "^3.1.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/cli-spinners": { - "version": "2.9.0", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.1", "dev": true, "license": "MIT", "engines": { "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-table3": { - "version": "0.6.3", + "node_modules/eslint": { + "version": "8.57.0", "dev": true, "license": "MIT", "dependencies": { - "string-width": "^4.2.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@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", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": "10.* || >= 12.*" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "optionalDependencies": { - "@colors/colors": "1.5.0" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/cli-width": { - "version": "3.0.0", + "node_modules/eslint-config-prettier": { + "version": "9.1.0", "dev": true, - "license": "ISC", - "engines": { - "node": ">= 10" + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/cliui": { - "version": "8.0.1", + "node_modules/eslint-plugin-prettier": { + "version": "5.1.3", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.6" }, "engines": { - "node": ">=12" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", "dev": true, "license": "MIT", - "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" + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, - "node_modules/clone": { - "version": "1.0.4", + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.5", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.8" + "peerDependencies": { + "eslint": ">=7" } }, - "node_modules/clone-response": { - "version": "1.0.3", + "node_modules/eslint-plugin-tsdoc": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.2.17.tgz", + "integrity": "sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@microsoft/tsdoc": "0.14.2", + "@microsoft/tsdoc-config": "0.16.2" } }, - "node_modules/clsx": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", - "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "node_modules/eslint-scope": { + "version": "7.2.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/cluster-key-slot": { - "version": "1.1.2", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "dev": true, "license": "Apache-2.0", "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/co": { - "version": "4.6.0", + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", "dev": true, "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", "dev": true, - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=7.0.0" + "node": ">=10.13.0" } }, - "node_modules/color-name": { - "version": "1.1.4", + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, "license": "MIT" }, - "node_modules/color-support": { - "version": "1.1.3", - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", + "node_modules/espree": { + "version": "9.6.1", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "delayed-stream": "~1.0.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">= 0.8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/commander": { - "version": "4.1.1", + "node_modules/esprima": { + "version": "4.0.1", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">= 6" + "node": ">=4" } }, - "node_modules/comment-json": { - "version": "4.2.3", + "node_modules/esquery": { + "version": "1.5.0", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "array-timsort": "^1.0.3", - "core-util-is": "^1.0.3", - "esprima": "^4.0.1", - "has-own-prop": "^2.0.0", - "repeat-string": "^1.6.1" + "estraverse": "^5.1.0" }, "engines": { - "node": ">= 6" + "node": ">=0.10" } }, - "node_modules/component-emitter": { - "version": "1.3.0", + "node_modules/esrecurse": { + "version": "4.3.0", "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "engines": [ - "node >= 0.8" - ], - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" } }, - "node_modules/concurrently": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", - "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", + "node_modules/estraverse": { + "version": "5.3.0", "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "date-fns": "^2.30.0", - "lodash": "^4.17.21", - "rxjs": "^7.8.1", - "shell-quote": "^1.8.1", - "spawn-command": "0.0.2", - "supports-color": "^8.1.1", - "tree-kill": "^1.2.2", - "yargs": "^17.7.2" - }, - "bin": { - "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" - }, + "license": "BSD-2-Clause", "engines": { - "node": "^14.13.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + "node": ">=4.0" } }, - "node_modules/concurrently/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==", + "node_modules/estree-walker": { + "version": "1.0.1", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/connect-mongo": { - "version": "5.0.0", + "node_modules/etag": { + "version": "1.8.1", "license": "MIT", - "dependencies": { - "debug": "^4.3.1", - "kruptein": "^3.0.0" - }, "engines": { - "node": ">=12.9.0" - }, - "peerDependencies": { - "express-session": "^1.17.1", - "mongodb": "^5.1.0" + "node": ">= 0.6" } }, - "node_modules/consola": { - "version": "2.15.3", + "node_modules/eventemitter3": { + "version": "5.0.1", "license": "MIT" }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "license": "ISC" - }, - "node_modules/content-disposition": { - "version": "0.5.4", + "node_modules/events": { + "version": "3.3.0", + "dev": true, "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, "engines": { - "node": ">= 0.6" + "node": ">=0.8.x" } }, - "node_modules/content-type": { - "version": "1.0.5", + "node_modules/execa": { + "version": "5.1.1", + "dev": true, "license": "MIT", + "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": ">= 0.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/convert-source-map": { - "version": "2.0.0", + "node_modules/executable": { + "version": "4.1.1", "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.5.0", "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "pify": "^2.2.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/cookie-parser": { - "version": "1.3.5", - "license": "MIT", - "dependencies": { - "cookie": "0.1.3", - "cookie-signature": "1.0.6" - }, + "node_modules/exit": { + "version": "0.1.2", + "dev": true, "engines": { "node": ">= 0.8.0" } }, - "node_modules/cookie-parser/node_modules/cookie": { - "version": "0.1.3", + "node_modules/expect": { + "version": "29.7.0", + "dev": true, "license": "MIT", + "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": "*" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "license": "MIT" - }, - "node_modules/cookiejar": { - "version": "2.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "license": "MIT" + "node_modules/exponential-backoff": { + "version": "3.1.1", + "license": "Apache-2.0" }, - "node_modules/cors": { - "version": "2.8.5", + "node_modules/express": { + "version": "4.18.2", "license": "MIT", "dependencies": { - "object-assign": "^4", - "vary": "^1" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": ">= 0.10" + "node": ">= 0.10.0" } }, - "node_modules/cosmiconfig": { - "version": "7.1.0", + "node_modules/express-session": { + "version": "1.17.3", "license": "MIT", "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "cookie": "0.4.2", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" }, "engines": { - "node": ">=10" + "node": ">= 0.8.0" } }, - "node_modules/crc": { - "version": "3.8.0", + "node_modules/express-session/node_modules/cookie": { + "version": "0.4.2", "license": "MIT", - "dependencies": { - "buffer": "^5.1.0" + "engines": { + "node": ">= 0.6" } }, - "node_modules/create-jest": { - "version": "29.7.0", - "dev": true, + "node_modules/express-session/node_modules/debug": { + "version": "2.6.9", "license": "MIT", "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" + "ms": "2.0.0" } }, - "node_modules/create-require": { - "version": "1.1.1", - "dev": true, + "node_modules/express-session/node_modules/ms": { + "version": "2.0.0", "license": "MIT" }, - "node_modules/cron-parser": { - "version": "4.9.0", + "node_modules/express-socket.io-session": { + "version": "1.3.5", "license": "MIT", "dependencies": { - "luxon": "^3.2.1" - }, - "engines": { - "node": ">=12.0.0" + "cookie-parser": "~1.3.3", + "crc": "^3.3.0", + "debug": "~2.6.0" } }, - "node_modules/cross-env": { - "version": "7.0.3", - "dev": true, + "node_modules/express-socket.io-session/node_modules/debug": { + "version": "2.6.9", "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" + "ms": "2.0.0" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", + "node_modules/express-socket.io-session/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" - }, - "node_modules/dapp-ui": { - "resolved": "sites/dapp-ui", - "link": true - }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", - "dev": true, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" + "ms": "2.0.0" } }, - "node_modules/debug": { - "version": "4.3.4", + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.7", + "license": "MIT" + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", "license": "MIT", "dependencies": { - "ms": "2.1.2" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 0.8" } }, - "node_modules/decompress-response": { - "version": "6.0.0", + "node_modules/ext-list": { + "version": "2.2.2", "dev": true, "license": "MIT", "optional": true, "peer": true, "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" + "mime-db": "^1.28.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", + "node_modules/ext-name": { + "version": "5.0.0", "dev": true, "license": "MIT", "optional": true, "peer": true, - "engines": { - "node": ">=10" + "dependencies": { + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/dedent": { - "version": "1.5.1", + "node_modules/external-editor": { + "version": "3.1.0", "dev": true, "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } + "engines": { + "node": ">=4" } }, - "node_modules/deep-is": { - "version": "0.1.4", + "node_modules/fast-deep-equal": { + "version": "3.1.3", "dev": true, "license": "MIT" }, - "node_modules/deepmerge": { - "version": "4.3.1", + "node_modules/fast-diff": { + "version": "1.3.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "license": "Apache-2.0" }, - "node_modules/default-browser": { - "version": "4.0.0", + "node_modules/fast-glob": { + "version": "3.3.2", "dev": true, "license": "MIT", "dependencies": { - "bundle-name": "^3.0.0", - "default-browser-id": "^3.0.0", - "execa": "^7.1.1", - "titleize": "^3.0.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.6.0" } }, - "node_modules/default-browser-id": { - "version": "3.0.0", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", "dev": true, - "license": "MIT", - "dependencies": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/default-browser/node_modules/execa": { - "version": "7.2.0", + "node_modules/fast-levenshtein": { + "version": "2.0.6", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.15.0", + "dev": true, + "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "reusify": "^1.0.4" } }, - "node_modules/default-browser/node_modules/human-signals": { - "version": "4.3.1", + "node_modules/fb-watchman": { + "version": "2.0.2", "dev": true, "license": "Apache-2.0", - "engines": { - "node": ">=14.18.0" + "dependencies": { + "bser": "2.1.1" } }, - "node_modules/default-browser/node_modules/is-stream": { - "version": "3.0.0", + "node_modules/figures": { + "version": "3.2.0", "dev": true, "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/default-browser/node_modules/mimic-fn": { - "version": "4.0.0", + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.0" } }, - "node_modules/default-browser/node_modules/npm-run-path": { - "version": "5.1.0", + "node_modules/file-entry-cache": { + "version": "6.0.1", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^4.0.0" + "flat-cache": "^3.0.4" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/default-browser/node_modules/onetime": { - "version": "6.0.0", + "node_modules/file-type": { + "version": "17.1.6", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "mimic-fn": "^4.0.0" + "readable-web-to-node-stream": "^3.0.2", + "strtok3": "^7.0.0-alpha.9", + "token-types": "^5.0.0-alpha.2" }, "engines": { - "node": ">=12" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/file-type?sponsor=1" } }, - "node_modules/default-browser/node_modules/path-key": { - "version": "4.0.0", + "node_modules/filelist": { + "version": "1.0.4", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" } }, - "node_modules/default-browser/node_modules/strip-final-newline": { - "version": "3.0.0", + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/defaults": { - "version": "1.0.4", + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "clone": "^1.0.2" + "brace-expansion": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, - "node_modules/defer-to-connect": { - "version": "2.0.1", + "node_modules/filename-reserved-regex": { + "version": "3.0.0", "dev": true, "license": "MIT", "optional": true, "peer": true, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", + "node_modules/filenamify": { + "version": "5.1.1", "dev": true, "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "filename-reserved-regex": "^3.0.0", + "strip-outer": "^2.0.0", + "trim-repeated": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", + "node_modules/fill-range": { + "version": "7.0.1", "dev": true, "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, "engines": { - "node": ">=0.4.0" + "node": ">=8" } }, - "node_modules/delegates": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/denque": { - "version": "2.1.0", - "license": "Apache-2.0", + "node_modules/finalhandler": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, "engines": { - "node": ">=0.10" + "node": ">= 0.8" } }, - "node_modules/depd": { - "version": "2.0.0", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", "license": "MIT", - "engines": { - "node": ">= 0.8" + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/destroy": { - "version": "1.2.0", + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/find-root": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/find-up": { + "version": "5.0.0", + "dev": true, "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/detect-libc": { - "version": "2.0.2", - "license": "Apache-2.0", + "node_modules/find-versions": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "semver-regex": "^4.0.5" + }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/detect-newline": { + "node_modules/flat-cache": { "version": "3.1.0", "dev": true, "license": "MIT", + "dependencies": { + "flatted": "^3.2.7", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, "engines": { - "node": ">=8" + "node": ">=12.0.0" } }, - "node_modules/dezalgo": { - "version": "1.0.4", + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", "dev": true, "license": "ISC", "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/diff": { - "version": "4.0.2", + "node_modules/flatted": { + "version": "3.2.7", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } + "license": "ISC" }, - "node_modules/diff-sequences": { - "version": "29.6.3", + "node_modules/for-each": { + "version": "0.3.3", "dev": true, "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "8.0.0", "dev": true, + "license": "MIT", "dependencies": { - "path-type": "^4.0.0" + "@babel/code-frame": "^7.16.7", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "fs-extra": "^10.0.0", + "memfs": "^3.4.1", + "minimatch": "^3.0.4", + "node-abort-controller": "^3.0.1", + "schema-utils": "^3.1.1", + "semver": "^7.3.5", + "tapable": "^2.2.1" }, "engines": { - "node": ">=8" + "node": ">=12.13.0", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "typescript": ">3.6.0", + "webpack": "^5.11.0" } }, - "node_modules/doctrine": { - "version": "3.0.0", + "node_modules/form-data": { + "version": "4.0.0", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "esutils": "^2.0.2" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=6.0.0" + "node": ">= 6" } }, - "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==", + "node_modules/formidable": { + "version": "2.1.2", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" } }, - "node_modules/dotenv": { - "version": "16.3.1", - "license": "BSD-2-Clause", + "node_modules/forwarded": { + "version": "0.2.0", + "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" + "node": ">= 0.6" } }, - "node_modules/dotenv-expand": { - "version": "10.0.0", - "license": "BSD-2-Clause", + "node_modules/fresh": { + "version": "0.5.2", + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 0.6" } }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "node_modules/fs-extra": { + "version": "10.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "readable-stream": "^2.0.2" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "license": "MIT" + "node_modules/fs-minipass": { + "version": "3.0.3", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "node_modules/ee-first": { - "version": "1.1.1", - "license": "MIT" + "node_modules/fs-minipass/node_modules/minipass": { + "version": "7.0.4", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } }, - "node_modules/electron-to-chromium": { - "version": "1.4.513", + "node_modules/fs-monkey": { + "version": "1.0.4", "dev": true, + "license": "Unlicense" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", "license": "ISC" }, - "node_modules/elliptic": { - "version": "6.5.4", + "node_modules/function-bind": { + "version": "1.1.2", "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/emittery": { - "version": "0.13.1", + "node_modules/function.prototype.name": { + "version": "1.1.6", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "1.0.2", + "node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/encoding": { - "version": "0.1.13", - "license": "MIT", - "optional": true, + "node_modules/gauge": { + "version": "4.0.4", + "license": "ISC", "dependencies": { - "iconv-lite": "^0.6.2" + "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": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", + "node_modules/generic-pool": { + "version": "3.9.0", "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 4" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", + "node_modules/gensync": { + "version": "1.0.0-beta.2", "dev": true, "license": "MIT", - "dependencies": { - "once": "^1.4.0" + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/engine.io": { - "version": "6.5.3", + "node_modules/get-intrinsic": { + "version": "1.2.4", "license": "MIT", "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.2.1", - "ws": "~8.11.0" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "engines": { - "node": ">=10.2.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/engine.io-client": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz", - "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1", - "engine.io-parser": "~5.2.1", - "ws": "~8.11.0", - "xmlhttprequest-ssl": "~2.0.0" - } + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "dev": true, + "license": "ISC" }, - "node_modules/engine.io-parser": { - "version": "5.2.1", + "node_modules/get-package-type": { + "version": "0.1.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=10.0.0" + "node": ">=8.0.0" } }, - "node_modules/engine.io/node_modules/cookie": { - "version": "0.4.2", + "node_modules/get-stream": { + "version": "6.0.1", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", + "node_modules/get-symbol-description": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "license": "MIT", + "node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "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": ">=6" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/err-code": { - "version": "2.0.3", - "license": "MIT" - }, - "node_modules/error-ex": { - "version": "1.3.2", - "license": "MIT", + "node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", "dependencies": { - "is-arrayish": "^0.2.1" + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/es-module-lexer": { - "version": "1.3.1", + "node_modules/glob-to-regexp": { + "version": "0.4.1", "dev": true, - "license": "MIT" + "license": "BSD-2-Clause" }, - "node_modules/esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "node_modules/globals": { + "version": "13.24.0", "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" }, "engines": { - "node": ">=12" + "node": ">=8" }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escape-html": { + "node_modules/globalthis": { "version": "1.0.3", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", + "dev": true, "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "node_modules/globby": { + "version": "11.1.0", "dev": true, + "license": "MIT", "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", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-config-prettier": { - "version": "9.0.0", - "dev": true, + "node_modules/gopd": { + "version": "1.0.1", "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" + "dependencies": { + "get-intrinsic": "^1.1.3" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-prettier": { - "version": "5.0.0", + "node_modules/got": { + "version": "11.8.6", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.5" + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">=10.19.0" }, "funding": { - "url": "https://opencollective.com/prettier" + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/handlebars": { + "version": "4.7.7", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "prettier": ">=3.0.0" + "bin": { + "handlebars": "bin/handlebars" }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "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==", + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.5.tgz", - "integrity": "sha512-D53FYKJa+fDmZMtriODxvhwrO+IOqrxoEo21gMA0sjHdU6dPVH4OhyFip9ypl8HOF5RV5KdTo+rBQLvnY2cO8w==", + "node_modules/has-bigints": { + "version": "1.0.2", "dev": true, - "peerDependencies": { - "eslint": ">=7" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", + "node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-own-prop": { + "version": "2.0.0", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "dev": true, - "license": "Apache-2.0", + "node_modules/has-proto": { + "version": "1.0.3", + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "dev": true, + "node_modules/has-symbols": { + "version": "1.0.3", "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", + "node_modules/has-tostringtag": { + "version": "1.0.2", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" + "has-symbols": "^1.0.3" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" + "node_modules/has-unicode": { + "version": "2.0.1", + "license": "ISC" }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, + "node_modules/hash.js": { + "version": "1.1.7", + "license": "MIT", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">= 0.4" } }, - "node_modules/esprima": { - "version": "4.0.1", + "node_modules/hexoid": { + "version": "1.0.0", "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/esquery": { - "version": "1.5.0", - "dev": true, + "node_modules/hi-base32": { + "version": "0.5.1", + "license": "MIT" + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", "license": "BSD-3-Clause", "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" + "react-is": "^16.7.0" } }, - "node_modules/esrecurse": { - "version": "4.3.0", + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT" + }, + "node_modules/html-tokenize": { + "version": "2.0.1", + "license": "MIT", "dependencies": { - "estraverse": "^5.2.0" + "buffer-from": "~0.1.1", + "inherits": "~2.0.1", + "minimist": "~1.2.5", + "readable-stream": "~1.0.27-1", + "through2": "~0.4.1" }, - "engines": { - "node": ">=4.0" + "bin": { + "html-tokenize": "bin/cmd.js" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } + "node_modules/html-tokenize/node_modules/buffer-from": { + "version": "0.1.2", + "license": "MIT" }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" + "node_modules/html-tokenize/node_modules/isarray": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/html-tokenize/node_modules/readable-stream": { + "version": "1.0.34", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "node_modules/etag": { - "version": "1.8.1", + "node_modules/html-tokenize/node_modules/string_decoder": { + "version": "0.10.31", + "license": "MIT" + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "license": "BSD-2-Clause" + }, + "node_modules/http-errors": { + "version": "2.0.0", "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, - "node_modules/events": { - "version": "3.3.0", - "dev": true, + "node_modules/http-proxy-agent": { + "version": "5.0.0", "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, "engines": { - "node": ">=0.8.x" + "node": ">= 6" } }, - "node_modules/execa": { - "version": "5.1.1", + "node_modules/http2-wrapper": { + "version": "1.0.3", "dev": true, "license": "MIT", + "optional": true, + "peer": 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" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=10.19.0" } - }, - "node_modules/executable": { - "version": "4.1.1", - "dev": true, + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "pify": "^2.2.0" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/exit": { - "version": "0.1.2", + "node_modules/human-signals": { + "version": "2.1.0", "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">= 0.8.0" + "node": ">=10.17.0" } }, - "node_modules/expect": { - "version": "29.7.0", - "dev": true, + "node_modules/humanize-ms": { + "version": "1.2.1", "license": "MIT", "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" + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=0.10.0" } }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "license": "Apache-2.0" + "node_modules/idb": { + "version": "7.1.1", + "dev": true, + "license": "ISC" }, - "node_modules/express": { - "version": "4.18.2", + "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" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.2.4", + "dev": true, "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, "engines": { - "node": ">= 0.10.0" + "node": ">= 4" } }, - "node_modules/express-session": { - "version": "1.17.3", + "node_modules/import-fresh": { + "version": "3.3.0", "license": "MIT", "dependencies": { - "cookie": "0.4.2", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-headers": "~1.0.2", - "parseurl": "~1.3.3", - "safe-buffer": "5.2.1", - "uid-safe": "~2.1.5" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/express-session/node_modules/cookie": { - "version": "0.4.2", + "node_modules/import-local": { + "version": "3.1.0", + "dev": true, "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, "engines": { - "node": ">= 0.6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/express-session/node_modules/debug": { - "version": "2.6.9", + "node_modules/imurmurhash": { + "version": "0.1.4", "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">=0.8.19" } }, - "node_modules/express-session/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/express-socket.io-session": { - "version": "1.3.5", + "node_modules/indent-string": { + "version": "4.0.0", "license": "MIT", - "dependencies": { - "cookie-parser": "~1.3.3", - "crc": "^3.3.0", - "debug": "~2.6.0" + "engines": { + "node": ">=8" } }, - "node_modules/express-socket.io-session/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", "dependencies": { - "ms": "2.0.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/express-socket.io-session/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", + "node_modules/inquirer": { + "version": "8.2.6", + "dev": true, "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=12.0.0" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", + "node_modules/internal-slot": { + "version": "1.0.7", + "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "license": "MIT" - }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", + "node_modules/interpret": { + "version": "1.4.0", + "dev": true, "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, "engines": { - "node": ">= 0.8" + "node": ">= 0.10" } }, - "node_modules/ext-list": { - "version": "2.2.2", - "dev": true, + "node_modules/ioredis": { + "version": "5.3.2", "license": "MIT", "optional": true, "peer": true, "dependencies": { - "mime-db": "^1.28.0" + "@ioredis/commands": "^1.1.1", + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.4", + "denque": "^2.1.0", + "lodash.defaults": "^4.2.0", + "lodash.isarguments": "^3.1.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=12.22.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" } }, - "node_modules/ext-name": { - "version": "5.0.0", - "dev": true, + "node_modules/ip": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" - }, "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "node_modules/external-editor": { - "version": "3.1.0", + "node_modules/is-array-buffer": { + "version": "3.0.4", "dev": true, "license": "MIT", "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, + "node_modules/is-arrayish": { + "version": "0.2.1", "license": "MIT" }, - "node_modules/fast-diff": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-glob": { - "version": "3.3.1", + "node_modules/is-bigint": { + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "has-bigints": "^1.0.1" }, - "engines": { - "node": ">=8.6.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fast-json-stable-stringify": { + "node_modules/is-binary-path": { "version": "2.1.0", "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.15.0", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "bser": "2.1.1" + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/figures": { - "version": "3.2.0", + "node_modules/is-boolean-object": { + "version": "1.1.2", "dev": true, "license": "MIT", "dependencies": { - "escape-string-regexp": "^1.0.5" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", + "node_modules/is-callable": { + "version": "1.2.7", "dev": true, "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "dev": true, + "node_modules/is-core-module": { + "version": "2.13.1", "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "hasown": "^2.0.0" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/file-type": { - "version": "17.1.6", + "node_modules/is-data-view": { + "version": "1.0.1", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "readable-web-to-node-stream": "^3.0.2", - "strtok3": "^7.0.0-alpha.9", - "token-types": "^5.0.0-alpha.2" + "is-typed-array": "^1.1.13" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/filename-reserved-regex": { - "version": "3.0.0", + "node_modules/is-date-object": { + "version": "1.0.5", "dev": true, "license": "MIT", - "optional": true, - "peer": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/filenamify": { - "version": "5.1.1", + "node_modules/is-extglob": { + "version": "2.1.1", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "filename-reserved-regex": "^3.0.0", - "strip-outer": "^2.0.0", - "trim-repeated": "^2.0.0" - }, "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "dev": true, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, "engines": { "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "1.2.0", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", + "node_modules/is-interactive": { + "version": "1.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", + "node_modules/is-lambda": { + "version": "1.0.1", "license": "MIT" }, - "node_modules/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + "node_modules/is-module": { + "version": "1.0.0", + "dev": true, + "license": "MIT" }, - "node_modules/find-up": { - "version": "5.0.0", + "node_modules/is-negative-zero": { + "version": "2.0.3", "dev": true, "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/find-versions": { - "version": "5.1.0", + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "semver-regex": "^4.0.5" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/flat-cache": { - "version": "3.1.0", + "node_modules/is-obj": { + "version": "1.0.1", "dev": true, "license": "MIT", - "dependencies": { - "flatted": "^3.2.7", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, "engines": { - "node": ">=12.0.0" + "node": ">=0.10.0" } }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", + "node_modules/is-path-inside": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "glob": "^7.1.3" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/flatted": { - "version": "3.2.7", + "node_modules/is-regexp": { + "version": "1.0.0", "dev": true, - "license": "ISC" - }, - "node_modules/foreachasync": { - "version": "3.0.0", - "license": "Apache2" + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "node_modules/foreground-child": { - "version": "3.1.1", - "license": "ISC", + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "dev": true, + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" + "call-bind": "^1.0.7" }, "engines": { - "node": ">=14" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "license": "ISC", + "node_modules/is-stream": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=14" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "8.0.0", + "node_modules/is-string": { + "version": "1.0.7", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.16.7", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "fs-extra": "^10.0.0", - "memfs": "^3.4.1", - "minimatch": "^3.0.4", - "node-abort-controller": "^3.0.1", - "schema-utils": "^3.1.1", - "semver": "^7.3.5", - "tapable": "^2.2.1" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=12.13.0", - "yarn": ">=1.0.0" + "node": ">= 0.4" }, - "peerDependencies": { - "typescript": ">3.6.0", - "webpack": "^5.11.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/form-data": { - "version": "4.0.0", + "node_modules/is-symbol": { + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/formidable": { - "version": "2.1.2", + "node_modules/is-typed-array": { + "version": "1.1.13", "dev": true, "license": "MIT", "dependencies": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.0" + "which-typed-array": "^1.1.14" }, - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fresh": { - "version": "0.5.2", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fs-extra": { - "version": "10.1.0", + "node_modules/is-weakref": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" + "call-bind": "^1.0.2" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "7.0.4", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fs-monkey": { - "version": "1.0.4", - "dev": true, - "license": "Unlicense" - }, - "node_modules/fs.realpath": { + "node_modules/isarray": { "version": "1.0.0", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", "license": "ISC" }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "BSD-3-Clause", "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=8" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/gauge": { - "version": "4.0.4", - "license": "ISC", + "node_modules/istanbul-lib-instrument": { + "version": "6.0.0", + "dev": true, + "license": "BSD-3-Clause", "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": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" + "@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": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/generic-pool": { - "version": "3.9.0", - "license": "MIT", - "engines": { - "node": ">= 4" + "node": ">=10" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=6.9.0" + "node": ">=10" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/get-package-type": { - "version": "0.1.0", + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "engines": { - "node": ">=8.0.0" + "node": ">=0.10.0" } }, - "node_modules/get-port": { - "version": "5.1.1", - "license": "MIT", + "node_modules/istanbul-reports": { + "version": "3.1.6", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-stream": { - "version": "6.0.1", - "dev": true, - "license": "MIT", + "node_modules/iterare": { + "version": "1.2.1", + "license": "ISC", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/glob": { - "version": "7.2.3", - "license": "ISC", + "node_modules/jackspeak": { + "version": "2.3.6", + "license": "BlueOak-1.0.0", "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" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": "*" + "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/glob-parent": { - "version": "5.1.2", + "node_modules/jake": { + "version": "10.8.7", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "is-glob": "^4.0.1" + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" }, "engines": { - "node": ">= 6" + "node": ">=10" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/jest": { + "version": "29.7.0", "dev": true, + "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" + "@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": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/jest-changed-files": { + "version": "29.7.0", "dev": true, + "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/got": { - "version": "11.8.6", + "node_modules/jest-circus": { + "version": "29.7.0", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" + "@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": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", + "node_modules/jest-cli": { + "version": "29.7.0", "dev": true, - "license": "MIT" - }, - "node_modules/handlebars": { - "version": "4.7.7", "license": "MIT", "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" + "@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": { - "handlebars": "bin/handlebars" + "jest": "bin/jest.js" }, "engines": { - "node": ">=0.4.7" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.6.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/has": { - "version": "1.0.3", + "node_modules/jest-config": { + "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.1" + "@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": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" + "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/has-own-prop": { - "version": "2.0.0", + "node_modules/jest-diff": { + "version": "29.7.0", "dev": true, "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/has-proto": { - "version": "1.0.1", + "node_modules/jest-docblock": { + "version": "29.7.0", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "detect-newline": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "license": "ISC" - }, - "node_modules/hash.js": { - "version": "1.1.7", + "node_modules/jest-each": { + "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "@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/hbs": { - "version": "4.2.0", + "node_modules/jest-environment-node": { + "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { - "handlebars": "4.7.7", - "walk": "2.3.15" + "@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": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/hexoid": { - "version": "1.0.0", + "node_modules/jest-get-type": { + "version": "29.6.3", "dev": true, "license": "MIT", "engines": { - "node": ">=8" - } - }, - "node_modules/hi-base32": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/hi-base32/-/hi-base32-0.5.1.tgz", - "integrity": "sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==" - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.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-escaper": { - "version": "2.0.2", + "node_modules/jest-haste-map": { + "version": "29.7.0", "dev": true, - "license": "MIT" - }, - "node_modules/html-tokenize": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-tokenize/-/html-tokenize-2.0.1.tgz", - "integrity": "sha512-QY6S+hZ0f5m1WT8WffYN+Hg+xm/w5I8XeUcAq/ZYP5wVC8xbKi4Whhru3FtrAebD5EhBW8rmFzkDI6eCAuFe2w==", + "license": "MIT", "dependencies": { - "buffer-from": "~0.1.1", - "inherits": "~2.0.1", - "minimist": "~1.2.5", - "readable-stream": "~1.0.27-1", - "through2": "~0.4.1" + "@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" }, - "bin": { - "html-tokenize": "bin/cmd.js" - } - }, - "node_modules/html-tokenize/node_modules/buffer-from": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz", - "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==" - }, - "node_modules/html-tokenize/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/html-tokenize/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/html-tokenize/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "license": "BSD-2-Clause" - }, - "node_modules/http-errors": { - "version": "2.0.0", + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">= 0.8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">= 6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/http2-wrapper": { - "version": "1.0.3", + "node_modules/jest-message-util": { + "version": "29.7.0", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" + "@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": ">=10.19.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", + "node_modules/jest-mock": { + "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { - "agent-base": "6", - "debug": "4" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, "engines": { - "node": ">= 6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/human-signals": { - "version": "2.1.0", + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "engines": { - "node": ">=10.17.0" + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } } }, - "node_modules/humanize-ms": { - "version": "1.2.1", + "node_modules/jest-regex-util": { + "version": "29.6.3", + "dev": true, "license": "MIT", - "dependencies": { - "ms": "^2.0.0" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", + "node_modules/jest-resolve": { + "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "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": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "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" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.2.4", + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", "dev": true, "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/import-local": { - "version": "3.1.0", + "node_modules/jest-runner": { + "version": "29.7.0", "dev": true, "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "@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": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "license": "MIT", + "node_modules/jest-runner/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=0.8.19" + "node": ">=0.10.0" } }, - "node_modules/indent-string": { - "version": "4.0.0", + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/inquirer": { - "version": "8.2.6", + "node_modules/jest-runtime": { + "version": "29.7.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" + "@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": ">=12.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/interpret": { - "version": "1.4.0", + "node_modules/jest-snapshot": { + "version": "29.7.0", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ioredis": { - "version": "5.3.2", - "license": "MIT", "dependencies": { - "@ioredis/commands": "^1.1.1", - "cluster-key-slot": "^1.1.0", - "debug": "^4.3.4", - "denque": "^2.1.0", - "lodash.defaults": "^4.2.0", - "lodash.isarguments": "^3.1.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0", - "standard-as-callback": "^2.1.0" - }, - "engines": { - "node": ">=12.22.0" + "@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" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ioredis" - } - }, - "node_modules/ip": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "license": "MIT", "engines": { - "node": ">= 0.10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", + "node_modules/jest-util": { + "version": "29.7.0", "dev": true, "license": "MIT", "dependencies": { - "binary-extensions": "^2.0.0" + "@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": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-core-module": { - "version": "2.13.0", + "node_modules/jest-validate": { + "version": "29.7.0", + "dev": true, "license": "MIT", "dependencies": { - "has": "^1.0.3" + "@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" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-docker": { - "version": "3.0.0", + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", "dev": true, "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extglob": { - "version": "2.1.1", + "node_modules/jest-watcher": { + "version": "29.7.0", "dev": true, "license": "MIT", + "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": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/jest-worker": { + "version": "29.7.0", + "dev": true, "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", "dev": true, "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/is-glob": { - "version": "4.0.3", + "node_modules/jju": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/js-sha256": { + "version": "0.9.0", + "license": "MIT" + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "license": "MIT" + }, + "node_modules/js-sha512": { + "version": "0.8.0", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", "dev": true, "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", + "node_modules/jsesc": { + "version": "2.5.2", "dev": true, "license": "MIT", - "dependencies": { - "is-docker": "^3.0.0" - }, "bin": { - "is-inside-container": "cli.js" + "jsesc": "bin/jsesc" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/is-interactive": { + "node_modules/json-bigint": { "version": "1.0.0", - "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "bignumber.js": "^9.0.0" } }, - "node_modules/is-lambda": { - "version": "1.0.1", + "node_modules/json-buffer": { + "version": "3.0.1", + "dev": true, "license": "MIT" }, - "node_modules/is-number": { - "version": "7.0.0", + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } + "license": "(AFL-2.1 OR BSD-3-Clause)" }, - "node_modules/is-path-inside": { - "version": "3.0.3", + "node_modules/json-schema-traverse": { + "version": "1.0.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/is-plain-obj": { - "version": "1.1.0", + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } + "license": "MIT" }, - "node_modules/is-stream": { - "version": "2.0.1", + "node_modules/json5": { + "version": "2.2.3", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "bin": { + "json5": "lib/cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", + "node_modules/jsonc-parser": { + "version": "3.2.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/is-wsl": { - "version": "2.2.0", + "node_modules/jsonfile": { + "version": "6.1.0", "dev": true, "license": "MIT", "dependencies": { - "is-docker": "^2.0.0" + "universalify": "^2.0.0" }, - "engines": { - "node": ">=8" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/is-wsl/node_modules/is-docker": { - "version": "2.2.1", + "node_modules/jsonpointer": { + "version": "5.0.1", "dev": true, "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/isarray": { - "version": "1.0.0", - "license": "MIT" + "node_modules/jsrsasign": { + "version": "10.8.6", + "license": "MIT", + "funding": { + "url": "https://github.com/kjur/jsrsasign#donations" + } }, - "node_modules/isexe": { - "version": "2.0.0", - "license": "ISC" + "node_modules/jwk-to-pem": { + "version": "2.0.5", + "license": "Apache-2.0", + "dependencies": { + "asn1.js": "^5.3.0", + "elliptic": "^6.5.4", + "safe-buffer": "^5.0.1" + } }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/kareem": { + "version": "2.5.1", + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": ">=12.0.0" } }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.0", + "node_modules/keyv": { + "version": "4.5.3", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "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" + "json-buffer": "3.0.1" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", + "node_modules/kleur": { + "version": "3.0.3", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/kruptein": { + "version": "3.0.6", + "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "asn1.js": "^5.4.1" }, "engines": { - "node": ">=10" + "node": ">8" } }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", + "node_modules/leven": { + "version": "3.1.0", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/istanbul-reports": { - "version": "3.1.6", + "node_modules/levn": { + "version": "0.4.1", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/iterare": { - "version": "1.2.1", - "license": "ISC", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=6.11.5" } }, - "node_modules/jackspeak": { - "version": "2.3.6", - "license": "BlueOak-1.0.0", + "node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=14" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest": { - "version": "29.7.0", + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", "dev": true, + "license": "MIT" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", "license": "MIT", - "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" + "optional": true, + "peer": true + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "dev": true, + "node_modules/loose-envify": { + "version": "1.4.0", "license": "MIT", "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" + "js-tokens": "^3.0.0 || ^4.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "bin": { + "loose-envify": "cli.js" } }, - "node_modules/jest-circus": { - "version": "29.7.0", + "node_modules/lowercase-keys": { + "version": "2.0.0", "dev": true, "license": "MIT", - "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" - }, + "optional": true, + "peer": true, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-cli": { - "version": "29.7.0", + "node_modules/lru_map": { + "version": "0.3.3", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", "dev": true, - "license": "MIT", + "license": "ISC", "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 - } + "yallist": "^3.0.2" } }, - "node_modules/jest-config": { - "version": "29.7.0", + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "node_modules/macos-release": { + "version": "2.5.1", "dev": true, "license": "MIT", - "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" + "node": ">=6" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-diff": { - "version": "29.7.0", + "node_modules/magic-string": { + "version": "0.30.1", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "@jridgewell/sourcemap-codec": "^1.4.15" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/jest-docblock": { - "version": "29.7.0", + "node_modules/make-dir": { + "version": "4.0.0", "dev": true, "license": "MIT", "dependencies": { - "detect-newline": "^3.0.0" + "semver": "^7.5.3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-each": { - "version": "29.7.0", + "node_modules/make-error": { + "version": "1.3.6", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/make-fetch-happen": { + "version": "11.1.1", + "license": "ISC", "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" + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/jest-environment-node": { - "version": "29.7.0", + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "5.0.0", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "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" + "tmpl": "1.0.5" } }, - "node_modules/jest-get-type": { - "version": "29.6.3", + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", "dev": true, - "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 12" } }, - "node_modules/jest-haste-map": { - "version": "29.7.0", + "node_modules/mdn-data": { + "version": "2.0.30", "dev": true, + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", "license": "MIT", - "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": ">= 0.6" } }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", + "node_modules/memfs": { + "version": "3.5.3", "dev": true, - "license": "MIT", + "license": "Unlicense", "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "fs-monkey": "^1.0.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 4.0.0" } }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", + "node_modules/memory-pager": { + "version": "1.5.0", + "license": "MIT", + "optional": true + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", "dev": true, "license": "MIT", - "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": ">= 8" } }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "dev": true, + "node_modules/methods": { + "version": "1.1.2", "license": "MIT", - "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": ">= 0.6" } }, - "node_modules/jest-mock": { - "version": "29.7.0", + "node_modules/micromatch": { + "version": "4.0.5", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8.6" } }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "dev": true, + "node_modules/mime": { + "version": "1.6.0", "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" + "bin": { + "mime": "cli.js" }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } + "engines": { + "node": ">=4" } }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "dev": true, + "node_modules/mime-db": { + "version": "1.52.0", "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.6" } }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "dev": true, + "node_modules/mime-types": { + "version": "2.1.35", "license": "MIT", "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" + "mime-db": "1.52.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 0.6" } }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", + "node_modules/mimic-fn": { + "version": "2.1.0", "dev": true, "license": "MIT", - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6" } }, - "node_modules/jest-runner": { - "version": "29.7.0", + "node_modules/mimic-response": { + "version": "1.0.1", "dev": true, "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", "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" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "*" } }, - "node_modules/jest-runner/node_modules/source-map": { - "version": "0.6.1", + "node_modules/minimist": { + "version": "1.2.8", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "4.2.8", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "dev": true, - "license": "MIT", + "node_modules/minipass-collect": { + "version": "1.0.2", + "license": "ISC", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "dev": true, - "license": "MIT", + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "license": "ISC", "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" + "yallist": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "dev": true, + "node_modules/minipass-collect/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/minipass-fetch": { + "version": "3.0.4", "license": "MIT", "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" + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.0.4", + "license": "ISC", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/jest-util": { - "version": "29.7.0", - "dev": true, - "license": "MIT", + "node_modules/minipass-flush": { + "version": "1.0.5", + "license": "ISC", "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" + "minipass": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 8" } }, - "node_modules/jest-validate": { - "version": "29.7.0", - "dev": true, - "license": "MIT", + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "license": "ISC", "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" + "yallist": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "dev": true, - "license": "MIT", + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "license": "ISC", "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" + "yallist": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-worker": { - "version": "29.7.0", - "dev": true, - "license": "MIT", + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "license": "ISC", "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "minipass": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "dev": true, - "license": "MIT", + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=8" } }, - "node_modules/js-sha256": { - "version": "0.9.0", - "license": "MIT" + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" }, - "node_modules/js-sha3": { - "version": "0.8.0", - "license": "MIT" + "node_modules/minizlib": { + "version": "2.1.2", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } }, - "node_modules/js-sha512": { - "version": "0.8.0", - "license": "MIT" + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/js-tokens": { + "node_modules/minizlib/node_modules/yallist": { "version": "4.0.0", - "license": "MIT" + "license": "ISC" }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "node_modules/mkdirp": { + "version": "0.5.6", + "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "minimist": "^1.2.6" }, "bin": { - "js-yaml": "bin/js-yaml.js" + "mkdirp": "bin/cmd.js" } }, - "node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" + "node_modules/mongodb": { + "version": "5.9.0", + "license": "Apache-2.0", + "dependencies": { + "bson": "^5.5.0", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" }, "engines": { - "node": ">=4" + "node": ">=14.20.1" + }, + "optionalDependencies": { + "@mongodb-js/saslprep": "^1.1.0" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.0.0", + "kerberos": "^1.0.0 || ^2.0.0", + "mongodb-client-encryption": ">=2.3.0 <3", + "snappy": "^7.2.2" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + } } }, - "node_modules/json-bigint": { - "version": "1.0.0", - "license": "MIT", + "node_modules/mongodb-connection-string-url": { + "version": "2.6.0", + "license": "Apache-2.0", "dependencies": { - "bignumber.js": "^9.0.0" + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "dev": true, + "node_modules/mongodb-connection-string-url/node_modules/tr46": { + "version": "3.0.0", "license": "MIT", - "bin": { - "json5": "lib/cli.js" + "dependencies": { + "punycode": "^2.1.1" }, "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "dev": true, - "license": "MIT" + "node_modules/mongodb-connection-string-url/node_modules/webidl-conversions": { + "version": "7.0.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "dev": true, + "node_modules/mongodb-connection-string-url/node_modules/whatwg-url": { + "version": "11.0.0", "license": "MIT", "dependencies": { - "universalify": "^2.0.0" + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=12" } }, - "node_modules/jsrsasign": { - "version": "10.8.6", + "node_modules/mongoose": { + "version": "7.6.3", "license": "MIT", + "dependencies": { + "bson": "^5.5.0", + "kareem": "2.5.1", + "mongodb": "5.9.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "16.0.1" + }, + "engines": { + "node": ">=14.20.1" + }, "funding": { - "url": "https://github.com/kjur/jsrsasign#donations" + "type": "opencollective", + "url": "https://opencollective.com/mongoose" } }, - "node_modules/jwk-to-pem": { - "version": "2.0.5", - "license": "Apache-2.0", - "dependencies": { - "asn1.js": "^5.3.0", - "elliptic": "^6.5.4", - "safe-buffer": "^5.0.1" - } + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" }, - "node_modules/kareem": { - "version": "2.5.1", - "license": "Apache-2.0", + "node_modules/mpath": { + "version": "0.9.0", + "license": "MIT", "engines": { - "node": ">=12.0.0" + "node": ">=4.0.0" } }, - "node_modules/keyv": { - "version": "4.5.3", - "dev": true, + "node_modules/mquery": { + "version": "5.0.0", "license": "MIT", "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "dev": true, - "license": "MIT", + "debug": "4.x" + }, "engines": { - "node": ">=6" + "node": ">=14.0.0" } }, - "node_modules/kruptein": { - "version": "3.0.6", + "node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/multer": { + "version": "1.4.4-lts.1", "license": "MIT", "dependencies": { - "asn1.js": "^5.4.1" + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" }, "engines": { - "node": ">8" + "node": ">= 6.0.0" } }, - "node_modules/leven": { - "version": "3.1.0", - "dev": true, + "node_modules/multipipe": { + "version": "1.0.2", "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "duplexer2": "^0.1.2", + "object-assign": "^4.1.0" } }, - "node_modules/levn": { - "version": "0.4.1", + "node_modules/mute-stream": { + "version": "0.0.8", + "dev": true, + "license": "ISC" + }, + "node_modules/nanoid": { + "version": "3.3.7", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">= 0.8.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, "license": "MIT" }, - "node_modules/loader-runner": { - "version": "4.3.0", - "dev": true, + "node_modules/negotiator": { + "version": "0.6.3", "license": "MIT", "engines": { - "node": ">=6.11.5" + "node": ">= 0.6" } }, - "node_modules/locate-path": { - "version": "6.0.0", + "node_modules/neo-async": { + "version": "2.6.2", "dev": true, + "license": "MIT" + }, + "node_modules/node-abi": { + "version": "3.51.0", "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "semver": "^7.3.5" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash": { - "version": "4.17.21", - "license": "MIT" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "license": "MIT" - }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", + "node_modules/node-abort-controller": { + "version": "3.1.1", "dev": true, "license": "MIT" }, - "node_modules/lodash.merge": { - "version": "4.6.2", + "node_modules/node-emoji": { + "version": "1.11.0", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21" + } }, - "node_modules/log-symbols": { - "version": "4.1.0", - "dev": true, + "node_modules/node-fetch": { + "version": "2.7.0", "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=10" + "node": "4.x || >=6.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/node-gyp": { + "version": "9.4.0", + "license": "MIT", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" }, "bin": { - "loose-envify": "cli.js" + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" } }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=8" + "node_modules/node-gyp/node_modules/rimraf": { + "version": "3.0.2", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/lru_map": { - "version": "0.3.3", + "node_modules/node-int64": { + "version": "0.4.0", + "dev": true, "license": "MIT" }, - "node_modules/lru-cache": { - "version": "5.1.1", + "node_modules/node-releases": { + "version": "2.0.14", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/node-rsa": { + "version": "1.1.1", + "license": "MIT", "dependencies": { - "yallist": "^3.0.2" + "asn1": "^0.2.4" } }, - "node_modules/luxon": { - "version": "3.4.3", + "node_modules/nofilter": { + "version": "1.0.4", "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/macos-release": { - "version": "2.5.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "node_modules/nopt": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "abbrev": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } - }, - "node_modules/magic-string": { - "version": "0.30.1", + }, + "node_modules/normalize-path": { + "version": "3.0.0", "dev": true, "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/make-dir": { - "version": "4.0.0", + "node_modules/normalize-url": { + "version": "6.1.0", "dev": true, "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, + "optional": true, + "peer": true, "engines": { "node": ">=10" }, @@ -9088,692 +11484,744 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-error": { - "version": "1.3.6", - "dev": true, - "license": "ISC" + "node_modules/notepack.io": { + "version": "3.0.1", + "license": "MIT" }, - "node_modules/make-fetch-happen": { - "version": "11.1.1", - "license": "ISC", + "node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" + "path-key": "^3.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "7.18.3", - "license": "ISC", - "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/make-fetch-happen/node_modules/minipass": { - "version": "5.0.0", + "node_modules/npmlog": { + "version": "6.0.2", "license": "ISC", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/makeerror": { - "version": "1.0.12", + "node_modules/nth-check": { + "version": "2.1.1", "dev": true, - "license": "BSD-3-Clause", + "license": "BSD-2-Clause", "dependencies": { - "tmpl": "1.0.5" + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/media-typer": { - "version": "0.3.0", + "node_modules/object-assign": { + "version": "4.1.1", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/memfs": { - "version": "3.5.3", - "dev": true, - "license": "Unlicense", - "dependencies": { - "fs-monkey": "^1.0.4" - }, + "node_modules/object-hash": { + "version": "3.0.0", + "license": "MIT", "engines": { - "node": ">= 4.0.0" + "node": ">= 6" } }, - "node_modules/memory-pager": { - "version": "1.5.0", + "node_modules/object-inspect": { + "version": "1.13.1", "license": "MIT", - "optional": true - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "license": "MIT" + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, + "node_modules/object-keys": { + "version": "0.4.0", "license": "MIT" }, - "node_modules/merge2": { - "version": "1.4.1", + "node_modules/object.assign": { + "version": "4.1.5", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, "engines": { - "node": ">= 8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/methods": { - "version": "1.1.2", + "node_modules/object.assign/node_modules/object-keys": { + "version": "1.1.1", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.4" } }, - "node_modules/micromatch": { - "version": "4.0.5", - "dev": true, + "node_modules/on-finished": { + "version": "2.4.1", "license": "MIT", "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "ee-first": "1.1.1" }, "engines": { - "node": ">=8.6" + "node": ">= 0.8" } }, - "node_modules/mime": { - "version": "1.6.0", + "node_modules/on-headers": { + "version": "1.0.2", "license": "MIT", - "bin": { - "mime": "cli.js" - }, "engines": { - "node": ">=4" + "node": ">= 0.8" } }, - "node_modules/mime-db": { - "version": "1.52.0", + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "dev": true, "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mime-types": { - "version": "2.1.35", + "node_modules/optionator": { + "version": "0.9.3", + "dev": true, "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "@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" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8.0" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", + "node_modules/ora": { + "version": "5.4.1", "dev": true, "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mimic-response": { - "version": "1.0.1", + "node_modules/os-filter-obj": { + "version": "2.0.0", "dev": true, "license": "MIT", "optional": true, "peer": true, + "dependencies": { + "arch": "^2.1.0" + }, "engines": { "node": ">=4" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "license": "ISC" - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", + "node_modules/os-name": { + "version": "4.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "macos-release": "^2.5.0", + "windows-release": "^4.0.0" }, "engines": { - "node": "*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minimist": { - "version": "1.2.8", + "node_modules/os-tmpdir": { + "version": "1.0.2", + "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/minipass": { - "version": "4.2.8", + "node_modules/p-cancelable": { + "version": "2.1.1", "dev": true, - "license": "ISC", + "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": ">=8" } }, - "node_modules/minipass-collect": { - "version": "1.0.2", - "license": "ISC", + "node_modules/p-finally": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">= 8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "license": "ISC", + "node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-collect/node_modules/yallist": { + "node_modules/p-map": { "version": "4.0.0", - "license": "ISC" - }, - "node_modules/minipass-fetch": { - "version": "3.0.4", "license": "MIT", "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "aggregate-error": "^3.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" }, - "optionalDependencies": { - "encoding": "^0.1.13" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.0.4", - "license": "ISC", + "node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=6" } }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "license": "ISC", + "node_modules/parent-module": { + "version": "1.0.1", + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" + "callsites": "^3.0.0" }, "engines": { - "node": ">= 8" + "node": ">=6" } }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "license": "ISC", + "node_modules/parse-json": { + "version": "5.2.0", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "@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/minipass-flush/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" + "node_modules/parseurl": { + "version": "1.3.3", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" + "node_modules/path-parse": { + "version": "1.0.7", + "license": "MIT" }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "license": "ISC", + "node_modules/path-scurry": { + "version": "1.10.1", + "license": "BlueOak-1.0.0", "dependencies": { - "minipass": "^3.0.0" + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.1", "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": "14 || >=16.14" } }, - "node_modules/minipass-sized/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/minizlib": { - "version": "2.1.2", - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.0.3", + "license": "ISC", "engines": { - "node": ">= 8" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, + "node_modules/path-to-regexp": { + "version": "3.2.0", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" + "node_modules/pathe": { + "version": "1.1.2", + "dev": true, + "license": "MIT" }, - "node_modules/mkdirp": { - "version": "0.5.6", + "node_modules/peek-readable": { + "version": "5.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" + "optional": true, + "peer": true, + "engines": { + "node": ">=14.16" }, - "bin": { - "mkdirp": "bin/cmd.js" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/mongodb": { - "version": "5.9.0", - "license": "Apache-2.0", - "dependencies": { - "bson": "^5.5.0", - "mongodb-connection-string-url": "^2.6.0", - "socks": "^2.7.1" - }, + "node_modules/picocolors": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=14.20.1" - }, - "optionalDependencies": { - "@mongodb-js/saslprep": "^1.1.0" - }, - "peerDependencies": { - "@aws-sdk/credential-providers": "^3.188.0", - "@mongodb-js/zstd": "^1.0.0", - "kerberos": "^1.0.0 || ^2.0.0", - "mongodb-client-encryption": ">=2.3.0 <3", - "snappy": "^7.2.2" + "node": ">=8.6" }, - "peerDependenciesMeta": { - "@aws-sdk/credential-providers": { - "optional": true - }, - "@mongodb-js/zstd": { - "optional": true - }, - "kerberos": { - "optional": true - }, - "mongodb-client-encryption": { - "optional": true - }, - "snappy": { - "optional": true - } - } - }, - "node_modules/mongodb-connection-string-url": { - "version": "2.6.0", - "license": "Apache-2.0", - "dependencies": { - "@types/whatwg-url": "^8.2.1", - "whatwg-url": "^11.0.0" + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/mongodb-connection-string-url/node_modules/tr46": { - "version": "3.0.0", + "node_modules/pify": { + "version": "2.3.0", + "dev": true, "license": "MIT", - "dependencies": { - "punycode": "^2.1.1" - }, + "optional": true, + "peer": true, "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/mongodb-connection-string-url/node_modules/webidl-conversions": { - "version": "7.0.0", - "license": "BSD-2-Clause", + "node_modules/pirates": { + "version": "4.0.6", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 6" } }, - "node_modules/mongodb-connection-string-url/node_modules/whatwg-url": { - "version": "11.0.0", + "node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, "license": "MIT", "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" + "find-up": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/mongoose": { - "version": "7.6.3", + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "dev": true, "license": "MIT", "dependencies": { - "bson": "^5.5.0", - "kareem": "2.5.1", - "mongodb": "5.9.0", - "mpath": "0.9.0", - "mquery": "5.0.0", - "ms": "2.1.3", - "sift": "16.0.1" - }, - "engines": { - "node": ">=14.20.1" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mongoose" - } - }, - "node_modules/mongoose/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/mpath": { - "version": "0.9.0", - "license": "MIT", "engines": { - "node": ">=4.0.0" + "node": ">=8" } }, - "node_modules/mquery": { + "node_modules/pkg-dir/node_modules/locate-path": { "version": "5.0.0", + "dev": true, "license": "MIT", "dependencies": { - "debug": "4.x" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/msgpackr": { - "version": "1.9.9", - "license": "MIT", - "optionalDependencies": { - "msgpackr-extract": "^3.0.2" + "node": ">=8" } }, - "node_modules/msgpackr-extract": { - "version": "3.0.2", - "hasInstallScript": true, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "node-gyp-build-optional-packages": "5.0.7" + "p-try": "^2.0.0" }, - "bin": { - "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + "engines": { + "node": ">=6" }, - "optionalDependencies": { - "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.2", - "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.2", - "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.2", - "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.2", - "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.2", - "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.2" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/multer": { - "version": "1.4.4-lts.1", + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, "license": "MIT", "dependencies": { - "append-field": "^1.0.0", - "busboy": "^1.0.0", - "concat-stream": "^1.5.2", - "mkdirp": "^0.5.4", - "object-assign": "^4.1.1", - "type-is": "^1.6.4", - "xtend": "^4.0.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">= 6.0.0" + "node": ">=8" } }, - "node_modules/multipipe": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-1.0.2.tgz", - "integrity": "sha512-6uiC9OvY71vzSGX8lZvSqscE7ft9nPupJ8fMjrCNRAUy2LREUW42UL+V/NTrogr6rFgRydUrCX4ZitfpSNkSCQ==", - "dependencies": { - "duplexer2": "^0.1.2", - "object-assign": "^4.1.0" + "node_modules/pluralize": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" } }, - "node_modules/mute-stream": { - "version": "0.0.8", + "node_modules/possible-typed-array-names": { + "version": "1.0.0", "dev": true, - "license": "ISC" + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "node_modules/postcss": { + "version": "8.4.38", "dev": true, "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" } ], - "bin": { - "nanoid": "bin/nanoid.cjs" + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": "^10 || ^12 || >=14" } }, - "node_modules/natural-compare": { - "version": "1.4.0", + "node_modules/prelude-ls": { + "version": "1.2.1", "dev": true, - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "0.6.3", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8.0" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "license": "MIT" + "node_modules/prettier": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } }, - "node_modules/node-abi": { - "version": "3.51.0", + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "dev": true, "license": "MIT", "dependencies": { - "semver": "^7.3.5" + "fast-diff": "^1.1.2" }, "engines": { - "node": ">=10" + "node": ">=6.0.0" } }, - "node_modules/node-abort-controller": { - "version": "3.1.1", + "node_modules/pretty-bytes": { + "version": "6.1.1", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/node-emoji": { - "version": "1.11.0", + "node_modules/pretty-format": { + "version": "29.7.0", "dev": true, "license": "MIT", "dependencies": { - "lodash": "^4.17.21" + "@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/node-fetch": { - "version": "2.7.0", + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "dev": true, "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, "engines": { - "node": "4.x || >=6.0.0" + "node": ">=10" }, - "peerDependencies": { - "encoding": "^0.1.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "engines": { + "node": ">=10" } }, - "node_modules/node-gyp": { - "version": "9.4.0", + "node_modules/prompts": { + "version": "2.4.2", + "dev": true, "license": "MIT", "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" }, - "bin": { - "node-gyp": "bin/node-gyp.js" + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" }, "engines": { - "node": "^12.13 || ^14.13 || >=16" + "node": ">= 0.10" } }, - "node_modules/node-gyp-build-optional-packages": { - "version": "5.0.7", - "license": "MIT", + "node_modules/pseudomap": { + "version": "1.0.2", + "dev": true, + "license": "ISC", "optional": true, - "bin": { - "node-gyp-build-optional-packages": "bin.js", - "node-gyp-build-optional-packages-optional": "optional.js", - "node-gyp-build-optional-packages-test": "build-test.js" - } + "peer": true }, - "node_modules/node-gyp/node_modules/rimraf": { - "version": "3.0.2", - "license": "ISC", + "node_modules/pump": { + "version": "3.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "dev": true, - "license": "MIT" + "node_modules/punycode": { + "version": "2.3.0", + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/node-releases": { - "version": "2.0.13", + "node_modules/pure-rand": { + "version": "6.0.3", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], "license": "MIT" }, - "node_modules/node-rsa": { - "version": "1.1.1", + "node_modules/pvtsutils": { + "version": "1.3.5", "license": "MIT", "dependencies": { - "asn1": "^0.2.4" + "tslib": "^2.6.1" } }, - "node_modules/nofilter": { - "version": "1.0.4", + "node_modules/pvutils": { + "version": "1.1.3", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6.0.0" } }, - "node_modules/nopt": { - "version": "6.0.0", - "license": "ISC", + "node_modules/qr-code-styling": { + "version": "1.6.0-rc.1", + "license": "MIT", "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" + "qrcode-generator": "^1.4.3" + } + }, + "node_modules/qrcode-generator": { + "version": "1.4.4", + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.11.0", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/normalize-path": { - "version": "3.0.0", + "node_modules/queue-microtask": { + "version": "1.2.3", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, - "node_modules/normalize-url": { - "version": "6.1.0", + "node_modules/quick-lru": { + "version": "5.1.1", "dev": true, "license": "MIT", "optional": true, @@ -9785,1849 +12233,2049 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/notepack.io": { - "version": "3.0.1", - "license": "MIT" - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "dev": true, + "node_modules/random-bytes": { + "version": "1.0.0", "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "6.0.2", - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 0.8" } }, - "node_modules/object-assign": { - "version": "4.1.1", + "node_modules/randombytes": { + "version": "2.1.0", + "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "safe-buffer": "^5.1.0" } }, - "node_modules/object-hash": { - "version": "3.0.0", + "node_modules/range-parser": { + "version": "1.2.1", "license": "MIT", "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6" } }, - "node_modules/object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==" - }, - "node_modules/on-finished": { - "version": "2.4.1", + "node_modules/raw-body": { + "version": "2.5.2", "license": "MIT", "dependencies": { - "ee-first": "1.1.1" + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, "engines": { "node": ">= 0.8" } }, - "node_modules/on-headers": { - "version": "1.0.2", + "node_modules/react": { + "version": "18.2.0", "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", + "node_modules/react-dom": { + "version": "18.2.0", + "license": "MIT", "dependencies": { - "wrappy": "1" + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" } }, - "node_modules/onetime": { - "version": "5.1.2", - "dev": true, + "node_modules/react-is": { + "version": "18.2.0", + "license": "MIT" + }, + "node_modules/react-router": { + "version": "6.22.3", "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" + "@remix-run/router": "1.15.3" }, "engines": { - "node": ">=6" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "react": ">=16.8" } }, - "node_modules/open": { - "version": "9.1.0", - "dev": true, + "node_modules/react-router-dom": { + "version": "6.22.3", "license": "MIT", "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" + "@remix-run/router": "1.15.3", + "react-router": "6.22.3" }, "engines": { - "node": ">=14.16" + "node": ">=14.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/optionator": { - "version": "0.9.3", - "dev": true, - "license": "MIT", + "node_modules/react-transition-group": { + "version": "4.4.5", + "license": "BSD-3-Clause", "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" + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" }, - "engines": { - "node": ">= 0.8.0" + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/ora": { - "version": "5.4.1", + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/readable-web-to-node-stream": { + "version": "3.0.2", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" + "readable-stream": "^3.6.0" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/os-filter-obj": { - "version": "2.0.0", + "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { + "version": "3.6.2", "dev": true, "license": "MIT", "optional": true, "peer": true, "dependencies": { - "arch": "^2.1.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" }, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/os-name": { - "version": "4.0.1", + "node_modules/readdirp": { + "version": "3.6.0", "dev": true, "license": "MIT", "dependencies": { - "macos-release": "^2.5.0", - "windows-release": "^4.0.0" + "picomatch": "^2.2.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.10.0" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", + "node_modules/rechoir": { + "version": "0.6.2", "dev": true, - "license": "MIT", + "dependencies": { + "resolve": "^1.1.6" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "dev": true, + "node_modules/redis": { + "version": "4.6.10", + "license": "MIT", + "workspaces": [ + "./packages/*" + ], + "dependencies": { + "@redis/bloom": "1.2.0", + "@redis/client": "1.5.11", + "@redis/graph": "1.1.0", + "@redis/json": "1.0.6", + "@redis/search": "1.1.5", + "@redis/time-series": "1.0.5" + } + }, + "node_modules/redis-errors": { + "version": "1.2.0", "license": "MIT", "optional": true, "peer": true, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/p-finally": { - "version": "1.0.0", - "dev": true, + "node_modules/redis-parser": { + "version": "3.0.0", "license": "MIT", "optional": true, "peer": true, + "dependencies": { + "redis-errors": "^1.0.0" + }, "engines": { "node": ">=4" } }, - "node_modules/p-limit": { - "version": "3.1.0", + "node_modules/reflect-metadata": { + "version": "0.1.13", + "license": "Apache-2.0" + }, + "node_modules/regenerate": { + "version": "1.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", "dev": true, "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "regenerate": "^1.4.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/p-locate": { - "version": "5.0.0", + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@babel/runtime": "^7.8.4" } }, - "node_modules/p-map": { - "version": "4.0.0", + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "dev": true, "license": "MIT", "dependencies": { - "aggregate-error": "^3.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": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/p-try": { - "version": "2.2.0", + "node_modules/regexpu-core": { + "version": "5.3.2", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "license": "MIT", "dependencies": { - "callsites": "^3.0.0" + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "license": "MIT", + "node_modules/regjsparser": { + "version": "0.9.1", + "dev": true, + "license": "BSD-2-Clause", "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" + "jsesc": "~0.5.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "regjsparser": "bin/parser" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "license": "MIT", - "engines": { - "node": ">= 0.8" + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" } }, - "node_modules/path-exists": { - "version": "4.0.0", + "node_modules/repeat-string": { + "version": "1.6.1", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", + "node_modules/require-directory": { + "version": "2.1.1", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/path-key": { - "version": "3.1.1", + "node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.10.1", - "license": "BlueOak-1.0.0", + "node_modules/resolve": { + "version": "1.22.4", + "license": "MIT", "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=16 || 14 >=14.17" + "bin": { + "resolve": "bin/resolve" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.1", - "license": "ISC", + "node_modules/resolve-alpn": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, "engines": { - "node": "14 || >=16.14" + "node": ">=8" } }, - "node_modules/path-scurry/node_modules/minipass": { - "version": "7.0.3", - "license": "ISC", + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=8" } }, - "node_modules/path-to-regexp": { - "version": "3.2.0", - "license": "MIT" - }, - "node_modules/path-type": { + "node_modules/resolve-from": { "version": "4.0.0", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/peek-readable": { - "version": "5.0.0", + "node_modules/resolve.exports": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/responselike": { + "version": "2.0.1", "dev": true, "license": "MIT", "optional": true, "peer": true, - "engines": { - "node": ">=14.16" + "dependencies": { + "lowercase-keys": "^2.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/picocolors": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", + "node_modules/restore-cursor": { + "version": "3.1.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=8.6" + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "engines": { + "node": ">=8" } }, - "node_modules/pify": { - "version": "2.3.0", - "dev": true, + "node_modules/retry": { + "version": "0.12.0", "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": ">=0.10.0" + "node": ">= 4" } }, - "node_modules/pirates": { - "version": "4.0.6", + "node_modules/reusify": { + "version": "1.0.4", "dev": true, "license": "MIT", "engines": { - "node": ">= 6" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", + "node_modules/rimraf": { + "version": "4.4.1", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "find-up": "^4.0.0" + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" + "balanced-match": "^1.0.0" } }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", + "node_modules/rimraf/node_modules/glob": { + "version": "9.3.5", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "p-locate": "^4.1.0" + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", + "node_modules/rimraf/node_modules/minimatch": { + "version": "8.0.4", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "p-try": "^2.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", + "node_modules/rollup": { + "version": "4.14.3", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=8" + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.14.3", + "@rollup/rollup-android-arm64": "4.14.3", + "@rollup/rollup-darwin-arm64": "4.14.3", + "@rollup/rollup-darwin-x64": "4.14.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.14.3", + "@rollup/rollup-linux-arm-musleabihf": "4.14.3", + "@rollup/rollup-linux-arm64-gnu": "4.14.3", + "@rollup/rollup-linux-arm64-musl": "4.14.3", + "@rollup/rollup-linux-powerpc64le-gnu": "4.14.3", + "@rollup/rollup-linux-riscv64-gnu": "4.14.3", + "@rollup/rollup-linux-s390x-gnu": "4.14.3", + "@rollup/rollup-linux-x64-gnu": "4.14.3", + "@rollup/rollup-linux-x64-musl": "4.14.3", + "@rollup/rollup-win32-arm64-msvc": "4.14.3", + "@rollup/rollup-win32-ia32-msvc": "4.14.3", + "@rollup/rollup-win32-x64-msvc": "4.14.3", + "fsevents": "~2.3.2" } }, - "node_modules/pluralize": { - "version": "8.0.0", + "node_modules/run-async": { + "version": "2.4.1", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=0.12.0" } }, - "node_modules/postcss": { - "version": "8.4.33", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", - "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "node_modules/run-parallel": { + "version": "1.2.0", "dev": true, "funding": [ { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "type": "github", + "url": "https://github.com/sponsors/feross" }, { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" + "type": "patreon", + "url": "https://www.patreon.com/feross" }, { - "type": "github", - "url": "https://github.com/sponsors/ai" + "type": "consulting", + "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "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" + } + ], + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/prettier": { - "version": "3.0.3", + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/scheduler": { + "version": "0.23.0", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "3.3.0", "dev": true, "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=14" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", + "node_modules/schema-utils/node_modules/ajv": { + "version": "6.12.6", "dev": true, "license": "MIT", "dependencies": { - "fast-diff": "^1.1.2" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=6.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/pretty-format": { - "version": "29.7.0", + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "3.5.2", "dev": true, "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.6.0", + "license": "ISC", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-regex": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=12" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", + "node_modules/semver-truncate": { + "version": "3.0.0", "dev": true, "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "semver": "^7.3.5" + }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "license": "MIT" - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "license": "MIT", + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" + "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, - "node_modules/prompts": { - "version": "2.4.2", - "dev": true, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/send": { + "version": "0.18.0", "license": "MIT", "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, "engines": { - "node": ">= 6" + "node": ">= 0.8.0" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "license": "MIT", "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "ms": "2.0.0" } }, - "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/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" }, - "node_modules/proxy-addr": { - "version": "2.0.7", + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", "license": "MIT", "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 0.8.0" } }, - "node_modules/pseudomap": { - "version": "1.0.2", - "dev": true, - "license": "ISC", - "optional": true, - "peer": true + "node_modules/set-blocking": { + "version": "2.0.0", + "license": "ISC" }, - "node_modules/pump": { - "version": "3.0.0", - "dev": true, + "node_modules/set-function-length": { + "version": "1.2.1", "license": "MIT", "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/punycode": { - "version": "2.3.0", + "node_modules/set-function-name": { + "version": "2.0.1", + "dev": true, "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" } }, - "node_modules/pure-rand": { - "version": "6.0.3", + "node_modules/setprototypeof": { + "version": "1.2.0", + "license": "ISC" + }, + "node_modules/sharp": { + "version": "0.33.2", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.2", + "semver": "^7.5.4" + }, + "engines": { + "libvips": ">=8.15.1", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.2", + "@img/sharp-darwin-x64": "0.33.2", + "@img/sharp-libvips-darwin-arm64": "1.0.1", + "@img/sharp-libvips-darwin-x64": "1.0.1", + "@img/sharp-libvips-linux-arm": "1.0.1", + "@img/sharp-libvips-linux-arm64": "1.0.1", + "@img/sharp-libvips-linux-s390x": "1.0.1", + "@img/sharp-libvips-linux-x64": "1.0.1", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.1", + "@img/sharp-libvips-linuxmusl-x64": "1.0.1", + "@img/sharp-linux-arm": "0.33.2", + "@img/sharp-linux-arm64": "0.33.2", + "@img/sharp-linux-s390x": "0.33.2", + "@img/sharp-linux-x64": "0.33.2", + "@img/sharp-linuxmusl-arm64": "0.33.2", + "@img/sharp-linuxmusl-x64": "0.33.2", + "@img/sharp-wasm32": "0.33.2", + "@img/sharp-win32-ia32": "0.33.2", + "@img/sharp-win32-x64": "0.33.2" + } }, - "node_modules/pvtsutils": { - "version": "1.3.5", + "node_modules/shebang-command": { + "version": "2.0.0", "license": "MIT", "dependencies": { - "tslib": "^2.6.1" + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/pvutils": { - "version": "1.1.3", + "node_modules/shebang-regex": { + "version": "3.0.0", "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/qr-code-styling": { - "version": "1.6.0-rc.1", - "resolved": "https://registry.npmjs.org/qr-code-styling/-/qr-code-styling-1.6.0-rc.1.tgz", - "integrity": "sha512-ModRIiW6oUnsP18QzrRYZSc/CFKFKIdj7pUs57AEVH20ajlglRpN3HukjHk0UbNMTlKGuaYl7Gt6/O5Gg2NU2Q==", - "dependencies": { - "qrcode-generator": "^1.4.3" + "node_modules/shell-quote": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/qrcode-generator": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz", - "integrity": "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==" - }, - "node_modules/qs": { - "version": "6.11.0", + "node_modules/shelljs": { + "version": "0.8.5", + "dev": true, "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" }, "engines": { - "node": ">=0.6" + "node": ">=4" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/sift": { + "version": "16.0.1", "license": "MIT" }, - "node_modules/quick-lru": { - "version": "5.1.1", + "node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "is-arrayish": "^0.3.1" } }, - "node_modules/random-bytes": { - "version": "1.0.0", + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "dev": true, + "license": "MIT" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/randombytes": { - "version": "2.1.0", - "dev": true, + "node_modules/smart-buffer": { + "version": "4.2.0", "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" } }, - "node_modules/range-parser": { - "version": "1.2.1", + "node_modules/socket.io": { + "version": "4.7.2", "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, "engines": { - "node": ">= 0.6" + "node": ">=10.2.0" } }, - "node_modules/raw-body": { + "node_modules/socket.io-adapter": { "version": "2.5.2", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" + "ws": "~8.11.0" } }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "node_modules/socket.io-client": { + "version": "4.7.5", + "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0" + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.5.2", + "socket.io-parser": "~4.2.4" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.0.0" } }, - "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==", + "node_modules/socket.io-parser": { + "version": "4.2.4", + "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" }, - "peerDependencies": { - "react": "^18.2.0" + "engines": { + "node": ">=10.0.0" } }, - "node_modules/react-is": { - "version": "18.2.0", - "license": "MIT" - }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "node_modules/socks": { + "version": "2.7.1", + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" } }, - "node_modules/readable-stream": { - "version": "2.3.8", + "node_modules/socks-proxy-agent": { + "version": "7.0.0", "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" } }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/readable-web-to-node-stream": { - "version": "3.0.2", + "node_modules/sort-keys": { + "version": "1.1.2", "dev": true, "license": "MIT", "optional": true, "peer": true, "dependencies": { - "readable-stream": "^3.6.0" + "is-plain-obj": "^1.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "node": ">=0.10.0" } }, - "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { - "version": "3.6.2", + "node_modules/sort-keys-length": { + "version": "1.0.1", "dev": true, "license": "MIT", "optional": true, "peer": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "sort-keys": "^1.0.0" }, "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, - "node_modules/readdirp": { - "version": "3.6.0", + "node_modules/source-map": { + "version": "0.7.4", "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">=8.10.0" + "node": ">= 8" } }, - "node_modules/rechoir": { - "version": "0.6.2", + "node_modules/source-map-js": { + "version": "1.2.0", "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/redis": { - "version": "4.6.10", + "node_modules/source-map-support": { + "version": "0.5.21", + "dev": true, "license": "MIT", - "workspaces": [ - "./packages/*" - ], "dependencies": { - "@redis/bloom": "1.2.0", - "@redis/client": "1.5.11", - "@redis/graph": "1.1.0", - "@redis/json": "1.0.6", - "@redis/search": "1.1.5", - "@redis/time-series": "1.0.5" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/redis-errors": { - "version": "1.2.0", - "license": "MIT", + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/redis-parser": { - "version": "3.0.0", + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "dev": true, + "license": "MIT" + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", "license": "MIT", + "optional": true, "dependencies": { - "redis-errors": "^1.0.0" - }, - "engines": { - "node": ">=4" + "memory-pager": "^1.0.2" } }, - "node_modules/reflect-metadata": { - "version": "0.1.13", - "license": "Apache-2.0" - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + "node_modules/spawn-command": { + "version": "0.0.2", + "dev": true }, - "node_modules/repeat-string": { - "version": "1.6.1", + "node_modules/sprintf-js": { + "version": "1.0.3", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } + "license": "BSD-3-Clause" }, - "node_modules/require-directory": { - "version": "2.1.1", - "dev": true, - "license": "MIT", + "node_modules/ssri": { + "version": "10.0.5", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "license": "MIT", + "node_modules/ssri/node_modules/minipass": { + "version": "7.0.4", + "license": "ISC", "engines": { - "node": ">=0.10.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/resolve": { - "version": "1.22.4", + "node_modules/stack-utils": { + "version": "2.0.6", + "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "escape-string-regexp": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", "dev": true, "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "dev": true, + "node_modules/standard-as-callback": { + "version": "2.1.0", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/statuses": { + "version": "2.0.1", "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "license": "MIT", + "node_modules/streamsearch": { + "version": "1.1.0", "engines": { - "node": ">=4" + "node": ">=10.0.0" } }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "dev": true, + "node_modules/string_decoder": { + "version": "1.1.1", "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/responselike": { - "version": "2.0.1", + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/string-length": { + "version": "4.0.2", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "lowercase-keys": "^2.0.0" + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "dev": true, + "node_modules/string-width": { + "version": "4.2.3", "license": "MIT", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/retry": { - "version": "0.12.0", + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">= 4" + "node": ">=8" } }, - "node_modules/reusify": { - "version": "1.0.4", + "node_modules/string.prototype.matchall": { + "version": "4.0.10", "dev": true, "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rimraf": { - "version": "4.4.1", + "node_modules/string.prototype.trim": { + "version": "1.2.9", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "glob": "^9.2.0" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=14" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "2.0.1", + "node_modules/string.prototype.trimend": { + "version": "1.0.8", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "9.3.5", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "8.0.4", + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rollup": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", - "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==", + "node_modules/stringify-object": { + "version": "3.3.0", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@types/estree": "1.0.5" - }, - "bin": { - "rollup": "dist/bin/rollup" + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" }, "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.9.6", - "@rollup/rollup-android-arm64": "4.9.6", - "@rollup/rollup-darwin-arm64": "4.9.6", - "@rollup/rollup-darwin-x64": "4.9.6", - "@rollup/rollup-linux-arm-gnueabihf": "4.9.6", - "@rollup/rollup-linux-arm64-gnu": "4.9.6", - "@rollup/rollup-linux-arm64-musl": "4.9.6", - "@rollup/rollup-linux-riscv64-gnu": "4.9.6", - "@rollup/rollup-linux-x64-gnu": "4.9.6", - "@rollup/rollup-linux-x64-musl": "4.9.6", - "@rollup/rollup-win32-arm64-msvc": "4.9.6", - "@rollup/rollup-win32-ia32-msvc": "4.9.6", - "@rollup/rollup-win32-x64-msvc": "4.9.6", - "fsevents": "~2.3.2" + "node": ">=4" } }, - "node_modules/run-applescript": { - "version": "5.0.0", - "dev": true, + "node_modules/strip-ansi": { + "version": "6.0.1", "license": "MIT", "dependencies": { - "execa": "^5.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/run-async": { - "version": "2.4.1", - "dev": true, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">=0.12.0" + "node": ">=8" } }, - "node_modules/run-parallel": { - "version": "1.2.0", + "node_modules/strip-bom": { + "version": "4.0.0", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "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" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" + "engines": { + "node": ">=8" } }, - "node_modules/schema-utils": { - "version": "3.3.0", + "node_modules/strip-comments": { + "version": "2.0.1", "dev": true, "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">=10" } }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "6.12.6", + "node_modules/strip-eof": { + "version": "1.0.0", "dev": true, "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "3.5.2", + "node_modules/strip-final-newline": { + "version": "2.0.0", "dev": true, "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.5.4", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/semver-regex": { - "version": "4.0.5", + "node_modules/strip-json-comments": { + "version": "3.1.1", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semver-truncate": { - "version": "3.0.0", + "node_modules/strip-outer": { + "version": "2.0.0", "dev": true, "license": "MIT", "optional": true, "peer": true, - "dependencies": { - "semver": "^7.3.5" - }, "engines": { - "node": ">=12" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", + "node_modules/strtok3": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "yallist": "^4.0.0" + "@tokenizer/token": "^0.3.0", + "peek-readable": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" + "node_modules/stylis": { + "version": "4.2.0", + "license": "MIT" }, - "node_modules/send": { - "version": "0.18.0", + "node_modules/superagent": { + "version": "8.1.2", + "dev": true, "license": "MIT", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.1.2", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0", + "semver": "^7.3.8" }, "engines": { - "node": ">= 0.8.0" + "node": ">=6.4.0 <13 || >=14" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "dev": true, "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", + "node_modules/supertest": { + "version": "6.3.3", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" + "methods": "^1.1.2", + "superagent": "^8.0.5" }, "engines": { - "node": ">= 0.8.0" + "node": ">=6.4.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "license": "ISC" - }, - "node_modules/shebang-command": { - "version": "2.0.0", + "node_modules/supports-color": { + "version": "7.2.0", "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", "license": "MIT", "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true, + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/shelljs": { - "version": "0.8.5", + "node_modules/svgo": { + "version": "3.2.0", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" }, "bin": { - "shjs": "bin/shjs" + "svgo": "bin/svgo" }, "engines": { - "node": ">=4" + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" } }, - "node_modules/side-channel": { - "version": "1.0.4", + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/synckit": { + "version": "0.8.8", + "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/unts" } }, - "node_modules/sift": { - "version": "16.0.1", - "license": "MIT" + "node_modules/tapable": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "license": "ISC" + "node_modules/tar": { + "version": "6.2.0", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } }, - "node_modules/sisteransi": { - "version": "1.0.5", - "dev": true, - "license": "MIT" + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } }, - "node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "license": "MIT", + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "license": "ISC", "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "node": ">=8" } }, - "node_modules/socket.io": { - "version": "4.7.2", + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "cors": "~2.8.5", - "debug": "~4.3.2", - "engine.io": "~6.5.2", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.4" + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { - "node": ">=10.2.0" + "node": ">=10" } }, - "node_modules/socket.io-adapter": { - "version": "2.5.2", + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "ws": "~8.11.0" + "engines": { + "node": ">=8" } }, - "node_modules/socket.io-client": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.4.tgz", - "integrity": "sha512-wh+OkeF0rAVCrABWQBaEjLfb7DVPotMbu0cgWgyR0v6eA4EoVnAwcIeIbcdTE3GT/H3kbdLl7OoH2+asoDRIIg==", + "node_modules/tempy": { + "version": "0.6.0", + "dev": true, + "license": "MIT", "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.2", - "engine.io-client": "~6.5.2", - "socket.io-parser": "~4.2.4" + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/socket.io-parser": { - "version": "4.2.4", - "license": "MIT", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/socks": { - "version": "2.7.1", - "license": "MIT", + "node_modules/terser": { + "version": "5.19.4", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" }, "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" + "node": ">=10" } }, - "node_modules/socks-proxy-agent": { - "version": "7.0.0", + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" }, "engines": { - "node": ">= 10" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } } }, - "node_modules/sort-keys": { - "version": "1.1.2", + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "is-plain-obj": "^1.0.0" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, - "node_modules/sort-keys-length": { - "version": "1.0.1", + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "sort-keys": "^1.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/source-map": { - "version": "0.7.4", + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } + "license": "MIT" }, - "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==", + "node_modules/test-exclude": { + "version": "6.0.0", "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/source-map-support": { - "version": "0.5.21", + "node_modules/text-table": { + "version": "0.2.0", "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "license": "MIT" + }, + "node_modules/through2": { + "version": "0.4.2", "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "readable-stream": "~1.0.17", + "xtend": "~2.1.1" } }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } + "node_modules/through2/node_modules/isarray": { + "version": "0.0.1", + "license": "MIT" }, - "node_modules/sparse-bitfield": { - "version": "3.0.3", + "node_modules/through2/node_modules/readable-stream": { + "version": "1.0.34", "license": "MIT", - "optional": true, "dependencies": { - "memory-pager": "^1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "node_modules/spawn-command": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", - "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", - "dev": true - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" + "node_modules/through2/node_modules/string_decoder": { + "version": "0.10.31", + "license": "MIT" }, - "node_modules/ssri": { - "version": "10.0.5", - "license": "ISC", + "node_modules/through2/node_modules/xtend": { + "version": "2.1.2", "dependencies": { - "minipass": "^7.0.3" + "object-keys": "~0.4.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ssri/node_modules/minipass": { - "version": "7.0.4", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=0.4" } }, - "node_modules/stack-utils": { - "version": "2.0.6", + "node_modules/tmp": { + "version": "0.0.33", "dev": true, "license": "MIT", "dependencies": { - "escape-string-regexp": "^2.0.0" + "os-tmpdir": "~1.0.2" }, "engines": { - "node": ">=10" + "node": ">=0.6.0" } }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", + "node_modules/tmpl": { + "version": "1.0.5", "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/standard-as-callback": { - "version": "2.1.0", - "license": "MIT" - }, - "node_modules/statuses": { - "version": "2.0.1", + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=8.0" } }, - "node_modules/streamsearch": { - "version": "1.1.0", + "node_modules/toidentifier": { + "version": "1.0.1", + "license": "MIT", "engines": { - "node": ">=10.0.0" + "node": ">=0.6" } }, - "node_modules/string_decoder": { - "version": "1.1.1", + "node_modules/token-types": { + "version": "5.0.1", + "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "safe-buffer": "~5.1.0" + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" } }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", + "node_modules/tr46": { + "version": "0.0.3", "license": "MIT" - }, - "node_modules/string-length": { - "version": "4.0.2", + }, + "node_modules/tree-kill": { + "version": "1.2.2", "dev": true, "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" + "bin": { + "tree-kill": "cli.js" } }, - "node_modules/string-width": { - "version": "4.2.3", + "node_modules/trim-repeated": { + "version": "2.0.0", + "dev": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "escape-string-regexp": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", + "node_modules/trim-repeated/node_modules/escape-string-regexp": { + "version": "5.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, + "optional": true, + "peer": true, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/ts-api-utils": { + "version": "1.3.0", + "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", + "node_modules/ts-jest": { + "version": "29.1.1", + "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "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": ">=8" + "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/strip-bom": { - "version": "4.0.0", + "node_modules/ts-loader": { + "version": "9.4.4", "dev": true, "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, "engines": { - "node": ">=8" + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" } }, - "node_modules/strip-eof": { - "version": "1.0.0", + "node_modules/ts-node": { + "version": "10.9.1", "dev": true, "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "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/strip-final-newline": { - "version": "2.0.0", + "node_modules/tsconfig-paths": { + "version": "4.2.0", "dev": true, "license": "MIT", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, "engines": { "node": ">=6" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", + "node_modules/tsconfig-paths-webpack-plugin": { + "version": "4.1.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^4.1.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10.13.0" } }, - "node_modules/strip-outer": { - "version": "2.0.0", + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/strtok3": { - "version": "7.0.0", + "node_modules/tslib": { + "version": "2.6.2", + "license": "0BSD" + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.4.0", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@tokenizer/token": "^0.3.0", - "peek-readable": "^5.0.0" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "node": ">= 0.8.0" } }, - "node_modules/stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" - }, - "node_modules/superagent": { - "version": "8.1.2", + "node_modules/type-detect": { + "version": "4.0.8", "dev": true, "license": "MIT", - "dependencies": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.4", - "debug": "^4.3.4", - "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.0", - "formidable": "^2.1.2", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" - }, "engines": { - "node": ">=6.4.0 <13 || >=14" + "node": ">=4" } }, - "node_modules/superagent/node_modules/mime": { - "version": "2.6.0", + "node_modules/type-fest": { + "version": "0.20.2", "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=4.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/supertest": { - "version": "6.3.3", - "dev": true, + "node_modules/type-is": { + "version": "1.6.18", "license": "MIT", "dependencies": { - "methods": "^1.1.2", - "superagent": "^8.0.5" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" }, "engines": { - "node": ">=6.4.0" + "node": ">= 0.6" } }, - "node_modules/supports-color": { - "version": "7.2.0", + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, "engines": { "node": ">= 0.4" }, @@ -11635,1024 +14283,1146 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/symbol-observable": { - "version": "4.0.0", + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", "dev": true, "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, "engines": { - "node": ">=0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/synckit": { - "version": "0.8.5", + "node_modules/typed-array-length": { + "version": "1.0.6", "dev": true, "license": "MIT", "dependencies": { - "@pkgr/utils": "^2.3.1", - "tslib": "^2.5.0" + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tapable": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } + "node_modules/typedarray": { + "version": "0.0.6", + "license": "MIT" }, - "node_modules/tar": { - "version": "6.2.0", - "license": "ISC", + "node_modules/typedoc": { + "version": "0.25.13", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.13.tgz", + "integrity": "sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==", + "dev": true, "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.3", + "shiki": "^0.14.7" + }, + "bin": { + "typedoc": "bin/typedoc" }, "engines": { - "node": ">=10" + "node": ">= 16" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x" } }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "license": "ISC", + "node_modules/typedoc-plugin-markdown": { + "version": "4.0.0-next.55", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.0.0-next.55.tgz", + "integrity": "sha512-bwEEBkAP0kHnjE10QzPBXAri5yHYmgb+vZP+xn9GirBLCk3lt7SMUiUx0fj7lEtTmbgIH0rv20f3xP+JWxCPHg==", + "dev": true, + "peerDependencies": { + "typedoc": "0.25.x" + } + }, + "node_modules/typedoc/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": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" + "balanced-match": "^1.0.0" } }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "license": "ISC", + "node_modules/typedoc/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, "dependencies": { - "yallist": "^4.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "license": "ISC", - "engines": { - "node": ">=8" + "node_modules/typedoc/node_modules/shiki": { + "version": "0.14.7", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz", + "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==", + "dev": true, + "dependencies": { + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" } }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "license": "MIT", + "node_modules/typescript": { + "version": "5.4.5", + "dev": true, + "license": "Apache-2.0", "bin": { - "mkdirp": "bin/cmd.js" + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=10" + "node": ">=14.17" } }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" + "node_modules/ua-parser-js": { + "version": "1.0.36", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "license": "MIT", + "engines": { + "node": "*" + } }, - "node_modules/terser": { - "version": "5.19.4", + "node_modules/uglify-js": { + "version": "3.17.4", "dev": true, "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, + "optional": true, "bin": { - "terser": "bin/terser" + "uglifyjs": "bin/uglifyjs" }, "engines": { - "node": ">=10" + "node": ">=0.8.0" } }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "dev": true, + "node_modules/uid": { + "version": "2.0.2", "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" + "@lukeed/csprng": "^1.0.0" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } + "node": ">=8" } }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "dev": true, + "node_modules/uid-safe": { + "version": "2.1.5", "license": "MIT", "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "random-bytes": "~1.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 0.8" } }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", + "node_modules/uid2": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "node_modules/test-exclude": { - "version": "6.0.0", + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/text-table": { - "version": "0.2.0", + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", "dev": true, - "license": "MIT" - }, - "node_modules/through": { - "version": "2.3.8", - "license": "MIT" - }, - "node_modules/through2": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", - "integrity": "sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==", - "dependencies": { - "readable-stream": "~1.0.17", - "xtend": "~2.1.1" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "node_modules/through2/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" } }, - "node_modules/through2/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, - "node_modules/through2/node_modules/xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "node_modules/unique-filename": { + "version": "3.0.0", + "license": "ISC", "dependencies": { - "object-keys": "~0.4.0" + "unique-slug": "^4.0.0" }, "engines": { - "node": ">=0.4" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/titleize": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/unique-slug": { + "version": "4.0.0", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/tmp": { - "version": "0.0.33", + "node_modules/unique-string": { + "version": "2.0.0", "dev": true, "license": "MIT", "dependencies": { - "os-tmpdir": "~1.0.2" + "crypto-random-string": "^2.0.0" }, "engines": { - "node": ">=0.6.0" + "node": ">=8" } }, - "node_modules/tmpl": { - "version": "1.0.5", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/to-fast-properties": { + "node_modules/universalify": { "version": "2.0.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 10.0.0" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, + "node_modules/unpipe": { + "version": "1.0.0", "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, "engines": { - "node": ">=8.0" + "node": ">= 0.8" } }, - "node_modules/toidentifier": { - "version": "1.0.1", + "node_modules/upath": { + "version": "1.2.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.6" + "node": ">=4", + "yarn": "*" } }, - "node_modules/token-types": { - "version": "5.0.1", + "node_modules/update-browserslist-db": { + "version": "1.0.13", "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" + } + ], "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" }, - "engines": { - "node": ">=14.16" + "bin": { + "update-browserslist-db": "cli.js" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "node_modules/tr46": { - "version": "0.0.3", + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", "license": "MIT" }, - "node_modules/tree-kill": { - "version": "1.2.2", - "dev": true, + "node_modules/utils-merge": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.0", "license": "MIT", "bin": { - "tree-kill": "cli.js" + "uuid": "dist/bin/uuid" } }, - "node_modules/trim-repeated": { - "version": "2.0.0", + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.1.0", + "dev": true, + "license": "ISC", "dependencies": { - "escape-string-regexp": "^5.0.0" + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" }, "engines": { - "node": ">=12" + "node": ">=10.12.0" } }, - "node_modules/trim-repeated/node_modules/escape-string-regexp": { - "version": "5.0.0", + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/ts-api-utils": { - "version": "1.0.3", - "dev": true, + "node_modules/vary": { + "version": "1.1.2", "license": "MIT", "engines": { - "node": ">=16.13.0" - }, - "peerDependencies": { - "typescript": ">=4.2.0" + "node": ">= 0.8" } }, - "node_modules/ts-jest": { - "version": "29.1.1", + "node_modules/vite": { + "version": "5.2.9", "dev": true, "license": "MIT", "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" + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" }, "bin": { - "ts-jest": "cli.js" + "vite": "bin/vite.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" }, "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" + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" }, "peerDependenciesMeta": { - "@babel/core": { + "@types/node": { "optional": true }, - "@jest/types": { + "less": { "optional": true }, - "babel-jest": { + "lightningcss": { "optional": true }, - "esbuild": { + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { "optional": true } } }, - "node_modules/ts-loader": { - "version": "9.4.4", + "node_modules/vite-plugin-image-optimizer": { + "version": "1.1.7", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" + "ansi-colors": "^4.1.3", + "pathe": "^1.1.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=14" }, "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" + "vite": ">=3" } }, - "node_modules/ts-node": { - "version": "10.9.1", + "node_modules/vite-plugin-pwa": { + "version": "0.18.1", "dev": true, "license": "MIT", "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" + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "pretty-bytes": "^6.1.1", + "workbox-build": "^7.0.0", + "workbox-window": "^7.0.0" + }, + "engines": { + "node": ">=16.0.0" }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0", + "workbox-build": "^7.0.0", + "workbox-window": "^7.0.0" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.20.2", + "dev": true, + "hasInstallScript": true, + "license": "MIT", "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" + "esbuild": "bin/esbuild" }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" + "engines": { + "node": ">=12" }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" } }, - "node_modules/tsconfig-paths": { - "version": "4.2.0", + "node_modules/vlq": { + "version": "2.0.4", + "license": "MIT" + }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true + }, + "node_modules/walker": { + "version": "1.0.8", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" + "makeerror": "1.0.12" } }, - "node_modules/tsconfig-paths-webpack-plugin": { - "version": "4.1.0", + "node_modules/watchpack": { + "version": "2.4.0", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.7.0", - "tsconfig-paths": "^4.1.2" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" }, "engines": { "node": ">=10.13.0" } }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", + "node_modules/wcwidth": { + "version": "1.0.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=4" + "dependencies": { + "defaults": "^1.0.3" } }, - "node_modules/tslib": { - "version": "2.6.2", - "license": "0BSD" - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "license": "Unlicense" + "node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" }, - "node_modules/type-check": { - "version": "0.4.0", + "node_modules/webpack": { + "version": "5.88.2", "dev": true, "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1" + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" }, "engines": { - "node": ">= 0.8.0" + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/type-detect": { - "version": "4.0.8", + "node_modules/webpack-node-externals": { + "version": "3.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=6" } }, - "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==", + "node_modules/webpack-sources": { + "version": "3.2.3", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.13.0" } }, - "node_modules/type-is": { - "version": "1.6.18", - "license": "MIT", + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">= 0.6" + "node": ">=8.0.0" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "license": "MIT" - }, - "node_modules/typescript": { - "version": "5.3.3", + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "license": "BSD-2-Clause", "engines": { - "node": ">=14.17" + "node": ">=4.0" } }, - "node_modules/ua-parser-js": { - "version": "1.0.36", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], + "node_modules/whatwg-url": { + "version": "5.0.0", "license": "MIT", - "engines": { - "node": "*" + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "node_modules/uglify-js": { - "version": "3.17.4", - "license": "BSD-2-Clause", - "optional": true, + "node_modules/which": { + "version": "2.0.2", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, "bin": { - "uglifyjs": "bin/uglifyjs" + "node-which": "bin/node-which" }, "engines": { - "node": ">=0.8.0" + "node": ">= 8" } }, - "node_modules/uid": { - "version": "2.0.2", + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "dev": true, "license": "MIT", "dependencies": { - "@lukeed/csprng": "^1.0.0" + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/uid-safe": { - "version": "2.1.5", + "node_modules/which-typed-array": { + "version": "1.1.15", + "dev": true, "license": "MIT", "dependencies": { - "random-bytes": "~1.0.0" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/uid2": { - "version": "1.0.0", + "node_modules/wide-align": { + "version": "1.1.5", + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/windows-release": { + "version": "4.0.0", + "dev": true, "license": "MIT", + "dependencies": { + "execa": "^4.0.2" + }, "engines": { - "node": ">= 4.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/unique-filename": { - "version": "3.0.0", - "license": "ISC", + "node_modules/windows-release/node_modules/execa": { + "version": "4.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "unique-slug": "^4.0.0" + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/unique-slug": { - "version": "4.0.0", - "license": "ISC", + "node_modules/windows-release/node_modules/get-stream": { + "version": "5.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "imurmurhash": "^0.1.4" + "pump": "^3.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/universalify": { - "version": "2.0.0", + "node_modules/windows-release/node_modules/human-signals": { + "version": "1.1.1", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": ">= 10.0.0" + "node": ">=8.12.0" } }, - "node_modules/unpipe": { + "node_modules/wordwrap": { "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/workbox-background-sync": { + "version": "7.0.0", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8" + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.0.0" } }, - "node_modules/untildify": { - "version": "4.0.0", + "node_modules/workbox-broadcast-update": { + "version": "7.0.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "workbox-core": "7.0.0" } }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", + "node_modules/workbox-build": { + "version": "7.0.0", "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" - } - ], "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "@apideck/better-ajv-errors": "^0.3.1", + "@babel/core": "^7.11.1", + "@babel/preset-env": "^7.11.0", + "@babel/runtime": "^7.11.2", + "@rollup/plugin-babel": "^5.2.0", + "@rollup/plugin-node-resolve": "^11.2.1", + "@rollup/plugin-replace": "^2.4.1", + "@surma/rollup-plugin-off-main-thread": "^2.2.3", + "ajv": "^8.6.0", + "common-tags": "^1.8.0", + "fast-json-stable-stringify": "^2.1.0", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "lodash": "^4.17.20", + "pretty-bytes": "^5.3.0", + "rollup": "^2.43.1", + "rollup-plugin-terser": "^7.0.0", + "source-map": "^0.8.0-beta.0", + "stringify-object": "^3.3.0", + "strip-comments": "^2.0.1", + "tempy": "^0.6.0", + "upath": "^1.2.0", + "workbox-background-sync": "7.0.0", + "workbox-broadcast-update": "7.0.0", + "workbox-cacheable-response": "7.0.0", + "workbox-core": "7.0.0", + "workbox-expiration": "7.0.0", + "workbox-google-analytics": "7.0.0", + "workbox-navigation-preload": "7.0.0", + "workbox-precaching": "7.0.0", + "workbox-range-requests": "7.0.0", + "workbox-recipes": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0", + "workbox-streams": "7.0.0", + "workbox-sw": "7.0.0", + "workbox-window": "7.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/workbox-build/node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" }, - "bin": { - "update-browserslist-db": "cli.js" + "engines": { + "node": ">= 10.0.0" }, "peerDependencies": { - "browserslist": ">= 4.21.0" + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } } }, - "node_modules/uri-js": { - "version": "4.4.1", + "node_modules/workbox-build/node_modules/@rollup/plugin-node-resolve": { + "version": "11.2.1", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "punycode": "^2.1.0" - } - }, - "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==", + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "rollup": "^1.20.0||^2.0.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", + "node_modules/workbox-build/node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4.0" + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" } }, - "node_modules/uuid": { - "version": "9.0.0", + "node_modules/workbox-build/node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "dev": true, "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", + "node_modules/workbox-build/node_modules/@types/estree": { + "version": "0.0.39", "dev": true, "license": "MIT" }, - "node_modules/v8-to-istanbul": { + "node_modules/workbox-build/node_modules/fs-extra": { "version": "9.1.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=10.12.0" + "node": ">=10" } }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", + "node_modules/workbox-build/node_modules/jest-worker": { + "version": "26.6.2", "dev": true, - "license": "MIT" - }, - "node_modules/vary": { - "version": "1.1.2", "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vite": { - "version": "5.0.12", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz", - "integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==", - "dev": true, "dependencies": { - "esbuild": "^0.19.3", - "postcss": "^8.4.32", - "rollup": "^4.2.0" - }, - "bin": { - "vite": "bin/vite.js" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" }, "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "node": ">= 10.13.0" } }, - "node_modules/vlq": { - "version": "2.0.4", - "license": "MIT" - }, - "node_modules/walk": { - "version": "2.3.15", - "license": "(MIT OR Apache-2.0)", + "node_modules/workbox-build/node_modules/magic-string": { + "version": "0.25.9", + "dev": true, + "license": "MIT", "dependencies": { - "foreachasync": "^3.0.0" + "sourcemap-codec": "^1.4.8" } }, - "node_modules/walker": { - "version": "1.0.8", + "node_modules/workbox-build/node_modules/pretty-bytes": { + "version": "5.6.0", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/watchpack": { - "version": "2.4.0", + "node_modules/workbox-build/node_modules/rollup": { + "version": "2.79.1", "dev": true, "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=10.13.0" + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/wcwidth": { - "version": "1.0.1", + "node_modules/workbox-build/node_modules/rollup-plugin-terser": { + "version": "7.0.2", "dev": true, "license": "MIT", "dependencies": { - "defaults": "^1.0.3" + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "license": "BSD-2-Clause" - }, - "node_modules/webpack": { - "version": "5.88.2", + "node_modules/workbox-build/node_modules/serialize-javascript": { + "version": "4.0.0", "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/workbox-build/node_modules/source-map": { + "version": "0.8.0-beta.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "whatwg-url": "^7.0.0" }, "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } + "node": ">= 8" } }, - "node_modules/webpack-node-externals": { - "version": "3.0.0", + "node_modules/workbox-build/node_modules/tr46": { + "version": "1.0.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "punycode": "^2.1.0" } }, - "node_modules/webpack-sources": { - "version": "3.2.3", + "node_modules/workbox-build/node_modules/webidl-conversions": { + "version": "4.0.2", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/workbox-build/node_modules/whatwg-url": { + "version": "7.1.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=10.13.0" + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", + "node_modules/workbox-cacheable-response": { + "version": "7.0.0", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" + "workbox-core": "7.0.0" } }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", + "node_modules/workbox-core": { + "version": "7.0.0", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" + "license": "MIT" + }, + "node_modules/workbox-expiration": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "idb": "^7.0.1", + "workbox-core": "7.0.0" } }, - "node_modules/whatwg-url": { - "version": "5.0.0", + "node_modules/workbox-google-analytics": { + "version": "7.0.0", + "dev": true, "license": "MIT", "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "workbox-background-sync": "7.0.0", + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" } }, - "node_modules/which": { - "version": "2.0.2", - "license": "ISC", + "node_modules/workbox-navigation-preload": { + "version": "7.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" + "workbox-core": "7.0.0" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "license": "ISC", + "node_modules/workbox-precaching": { + "version": "7.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" } }, - "node_modules/windows-release": { - "version": "4.0.0", + "node_modules/workbox-range-requests": { + "version": "7.0.0", "dev": true, "license": "MIT", "dependencies": { - "execa": "^4.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "workbox-core": "7.0.0" } }, - "node_modules/windows-release/node_modules/execa": { - "version": "4.1.0", + "node_modules/workbox-recipes": { + "version": "7.0.0", "dev": true, "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "workbox-cacheable-response": "7.0.0", + "workbox-core": "7.0.0", + "workbox-expiration": "7.0.0", + "workbox-precaching": "7.0.0", + "workbox-routing": "7.0.0", + "workbox-strategies": "7.0.0" } }, - "node_modules/windows-release/node_modules/get-stream": { - "version": "5.2.0", + "node_modules/workbox-routing": { + "version": "7.0.0", "dev": true, "license": "MIT", "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "workbox-core": "7.0.0" } }, - "node_modules/windows-release/node_modules/human-signals": { - "version": "1.1.1", + "node_modules/workbox-strategies": { + "version": "7.0.0", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" + "license": "MIT", + "dependencies": { + "workbox-core": "7.0.0" } }, - "node_modules/wordwrap": { - "version": "1.0.0", + "node_modules/workbox-streams": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "workbox-core": "7.0.0", + "workbox-routing": "7.0.0" + } + }, + "node_modules/workbox-sw": { + "version": "7.0.0", + "dev": true, "license": "MIT" }, + "node_modules/workbox-window": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/trusted-types": "^2.0.2", + "workbox-core": "7.0.0" + } + }, "node_modules/wrap-ansi": { "version": "6.2.0", "dev": true, @@ -12719,8 +15489,6 @@ }, "node_modules/xmlhttprequest-ssl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", - "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", "engines": { "node": ">=0.4.0" } @@ -12798,8 +15566,7 @@ }, "node_modules/zustand": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.0.tgz", - "integrity": "sha512-zlVFqS5TQ21nwijjhJlx4f9iGrXSL0o/+Dpy4txAP22miJ8Ti6c1Ol1RLNN98BMib83lmDH/2KmLwaNXpjrO1A==", + "license": "MIT", "dependencies": { "use-sync-external-store": "1.2.0" }, @@ -12823,129 +15590,13 @@ } } }, - "packages/avicennia-api": { - "name": "@algorandfoundation/avicennia-js", - "version": "1.0.0-beta.1", - "extraneous": true, - "license": "UNLICENSED", - "workspaces": [ - "./packages/**" - ], - "dependencies": { - "@nestjs/common": "^10.2.6", - "@nestjs/config": "^3.1.1", - "@nestjs/core": "^10.2.6", - "@nestjs/microservices": "^10.2.7", - "@nestjs/mongoose": "^10.0.1", - "@nestjs/platform-express": "^10.2.6", - "@nestjs/platform-socket.io": "^10.2.7", - "@nestjs/websockets": "^10.2.7", - "@sentry/node": "^7.74.1", - "@sentry/profiling-node": "^1.2.1", - "@simplewebauthn/server": "^0.10.3", - "@socket.io/redis-adapter": "^8.2.1", - "base64url": "^3.0.1", - "bull": "^4.11.4", - "connect-mongo": "^5.0.0", - "express-session": "^1.17.3", - "express-socket.io-session": "^1.3.5", - "hbs": "^4.2.0", - "mongoose": "^7.6.3", - "redis": "^4.6.10", - "reflect-metadata": "^0.1.13", - "rxjs": "^7.8.1", - "ua-parser-js": "^1.0.36" - }, - "devDependencies": { - "@nestjs/cli": "^10.1.18", - "@nestjs/schematics": "^10.0.2", - "@nestjs/testing": "^10.2.6", - "@types/express": "^4.17.18", - "@types/express-session": "^1.17.8", - "@types/express-socket.io-session": "^1.3.7", - "@types/hbs": "^4.0.2", - "@types/jest": "^29.5.5", - "@types/node": "^20.7.0", - "@types/supertest": "^2.0.13", - "@types/ua-parser-js": "^0.7.37", - "@typescript-eslint/eslint-plugin": "^6.7.3", - "@typescript-eslint/parser": "^6.7.3", - "algosdk": "^2.6.0", - "cross-env": "^7.0.3", - "eslint": "^8.50.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^5.0.0", - "jest": "^29.7.0", - "prettier": "^3.0.3", - "source-map-support": "^0.5.21", - "supertest": "^6.3.3", - "ts-jest": "^29.1.1", - "ts-loader": "^9.4.4", - "ts-node": "^10.9.1", - "tsconfig-paths": "^4.2.0", - "typescript": "^5.3.3" - }, - "engines": { - "node": ">=18.0.0 <21.0.0" - } - }, - "packages/dapp-ui": { - "version": "0.0.1", - "extraneous": true, - "license": "UNLICENSED", - "dependencies": { - "@algorandfoundation/propagule-js": "^1.0.0", - "@emotion/react": "^11.11.3", - "@emotion/server": "^11.11.0", - "@emotion/styled": "^11.11.0", - "@mui/icons-material": "^5.15.4", - "@mui/material": "^5.15.4", - "@tanstack/react-query": "^5.17.15", - "qr-code-styling": "^1.6.0-rc.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "reflect-metadata": "^0.1.13", - "socket.io-client": "^4.7.4", - "zustand": "^4.4.7" - }, - "devDependencies": { - "@types/react": "^18.2.43", - "@types/react-dom": "^18.2.17", - "@typescript-eslint/eslint-plugin": "^6.14.0", - "@typescript-eslint/parser": "^6.14.0", - "@vitejs/plugin-react-swc": "^3.5.0", - "eslint": "^8.55.0", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.4.5", - "mkdirp": "^3.0.1", - "typescript": "^5.2.2", - "vite": "^5.0.8" - } - }, - "packages/propagule-js": { - "name": "@algorandfoundation/propagule-js", - "version": "1.0.0", - "extraneous": true, - "license": "MIT", - "dependencies": { - "qrcode": "^1.5.3" - }, - "devDependencies": { - "@types/qrcode": "^1.5.5", - "c8": "^9.1.0", - "typescript": "^5.3.3" - }, - "peerDependencies": { - "algosdk": "^2.7.0", - "tweetnacl": "^1.0.3" - } - }, "services/liquid-auth-api-js": { "name": "@liquid/auth-api", "version": "1.0.0-beta.1", "hasInstallScript": true, "license": "MIT", "dependencies": { + "@liquid/core": "^1.0.0", "@nestjs/common": "^10.2.6", "@nestjs/config": "^3.1.1", "@nestjs/core": "^10.2.6", @@ -12958,12 +15609,11 @@ "@sentry/profiling-node": "^1.2.1", "@simplewebauthn/server": "^0.10.3", "@socket.io/redis-adapter": "^8.2.1", + "algosdk": "^2.7.0", "base64url": "^3.0.1", - "bull": "^4.11.4", "connect-mongo": "^5.0.0", "express-session": "^1.17.3", "express-socket.io-session": "^1.3.5", - "hbs": "^4.2.0", "hi-base32": "^0.5.1", "mongoose": "^7.6.3", "redis": "^4.6.10", @@ -12985,7 +15635,6 @@ "@types/ua-parser-js": "^0.7.37", "@typescript-eslint/eslint-plugin": "^6.7.3", "@typescript-eslint/parser": "^6.7.3", - "algosdk": "^2.7.0", "cross-env": "^7.0.3", "eslint": "^8.50.0", "eslint-config-prettier": "^9.0.0", @@ -13014,10 +15663,12 @@ "@liquid/auth-client": "^1.0.0", "@mui/icons-material": "^5.15.4", "@mui/material": "^5.15.4", - "@tanstack/react-query": "^5.17.15", + "@tanstack/react-query": "^5.20.5", + "@tanstack/react-query-devtools": "^5.20.5", "qr-code-styling": "^1.6.0-rc.1", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-router-dom": "^6.22.3", "reflect-metadata": "^0.1.13", "socket.io-client": "^4.7.4", "zustand": "^4.4.7" @@ -13029,18 +15680,23 @@ "@typescript-eslint/parser": "^6.14.0", "@vitejs/plugin-react-swc": "^3.5.0", "eslint": "^8.55.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.5", "mkdirp": "^3.0.1", + "sharp": "^0.33.2", + "svgo": "^3.2.0", "typescript": "^5.2.2", - "vite": "^5.0.8" + "vite": "^5.0.8", + "vite-plugin-image-optimizer": "^1.1.7", + "vite-plugin-pwa": "^0.18.1" } }, "sites/dapp-ui/node_modules/mkdirp": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -13050,6 +15706,17 @@ "funding": { "url": "https://github.com/sponsors/isaacs" } + }, + "sites/major-zero": { + "version": "0.0.1", + "extraneous": true, + "dependencies": { + "@astrojs/check": "^0.5.10", + "@astrojs/starlight": "^0.21.5", + "astro": "^4.3.5", + "sharp": "^0.32.5", + "typescript": "^5.4.5" + } } } } diff --git a/package.json b/package.json index ff93347..79fb660 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,13 @@ "scripts": { "dev": "concurrently \"npm:dev:*\"", "dev:api": "npm run dev --if-present --workspace @liquid/auth-api", + "dev:core": "npm run dev --if-present --workspace @liquid/core", "dev:sdk": "npm run dev --if-present --workspace @liquid/auth-client", "dev:ui": "npm run dev --if-present --workspace dapp-ui", - "build": "npm run build --workspace @liquid/auth-client && npm run build --workspace @liquid/auth-api && npm run build --workspace dapp-ui", + "build": "npm run build --workspace @liquid/core && npm run build --workspace @liquid/auth-client && npm run build --workspace @liquid/auth-api && npm run build --workspace dapp-ui", "lint": "npm run lint --if-present --ws", + "test": "npm run test --if-present --ws", + "test:cov": "npm run test:cov --if-present --ws", "start": "npm run start:prod --workspace @liquid/auth-api" }, "workspaces": [ diff --git a/services/liquid-auth-api-js/.eslintrc.json b/services/liquid-auth-api-js/.eslintrc.json index 8277ad8..8cd93a2 100644 --- a/services/liquid-auth-api-js/.eslintrc.json +++ b/services/liquid-auth-api-js/.eslintrc.json @@ -21,6 +21,7 @@ "dist/**" ], "rules": { + "@typescript-eslint/ban-ts-comment": "warn", "@typescript-eslint/interface-name-prefix": "off", "@typescript-eslint/explicit-function-return-type": "off", "@typescript-eslint/explicit-module-boundary-types": "off", diff --git a/services/liquid-auth-api-js/package.json b/services/liquid-auth-api-js/package.json index 3a43478..1bcd41e 100644 --- a/services/liquid-auth-api-js/package.json +++ b/services/liquid-auth-api-js/package.json @@ -23,6 +23,7 @@ "sentry:sourcemaps": "sentry-cli sourcemaps inject --org phearzero --project node-express dist && sentry-cli sourcemaps upload --org phearzero --project node-express dist" }, "dependencies": { + "@liquid/core": "^1.0.0", "@nestjs/common": "^10.2.6", "@nestjs/config": "^3.1.1", "@nestjs/core": "^10.2.6", @@ -35,12 +36,11 @@ "@sentry/profiling-node": "^1.2.1", "@simplewebauthn/server": "^0.10.3", "@socket.io/redis-adapter": "^8.2.1", + "algosdk": "^2.7.0", "base64url": "^3.0.1", - "bull": "^4.11.4", "connect-mongo": "^5.0.0", "express-session": "^1.17.3", "express-socket.io-session": "^1.3.5", - "hbs": "^4.2.0", "hi-base32": "^0.5.1", "mongoose": "^7.6.3", "redis": "^4.6.10", @@ -62,7 +62,6 @@ "@types/ua-parser-js": "^0.7.37", "@typescript-eslint/eslint-plugin": "^6.7.3", "@typescript-eslint/parser": "^6.7.3", - "algosdk": "^2.7.0", "cross-env": "^7.0.3", "eslint": "^8.50.0", "eslint-config-prettier": "^9.0.0", @@ -100,6 +99,12 @@ "collectCoverageFrom": [ "**/*.(t|j)s" ], + "coveragePathIgnorePatterns": [ + "/node_modules/", + "/test/", + "/dist/", + "/src/main.ts" + ], "coverageDirectory": "../coverage", "testEnvironment": "node" } diff --git a/services/liquid-auth-api-js/src/__fixtures__/session.fixtures.json b/services/liquid-auth-api-js/src/__fixtures__/session.fixtures.json new file mode 100644 index 0000000..218b24e --- /dev/null +++ b/services/liquid-auth-api-js/src/__fixtures__/session.fixtures.json @@ -0,0 +1,6 @@ +{ + "authorized": { + "wallet": "B7WYCZ6HRBGCH452D24TYAK7BXKNCHEXY2X7S7FWZXMHDVTDOARAOURJEU" + }, + "unauthorized": {} +} diff --git a/services/liquid-auth-api-js/src/__mocks__/assertion.service.mock.ts b/services/liquid-auth-api-js/src/__mocks__/assertion.service.mock.ts index ae31d76..d59ef3e 100644 --- a/services/liquid-auth-api-js/src/__mocks__/assertion.service.mock.ts +++ b/services/liquid-auth-api-js/src/__mocks__/assertion.service.mock.ts @@ -1,4 +1,4 @@ -import { dummyUsers, dummyOptions } from '../../tests/constants'; +import { dummyUsers, dummyOptions } from '../../tests/constants.js'; export const mockAssertionService = { request: jest.fn().mockReturnValue(dummyOptions), diff --git a/services/liquid-auth-api-js/src/__mocks__/attestation.service.mock.ts b/services/liquid-auth-api-js/src/__mocks__/attestation.service.mock.ts index 9867b75..ab062ee 100644 --- a/services/liquid-auth-api-js/src/__mocks__/attestation.service.mock.ts +++ b/services/liquid-auth-api-js/src/__mocks__/attestation.service.mock.ts @@ -1,4 +1,4 @@ -import { dummyAttestationOptions } from '../../tests/constants'; +import { dummyAttestationOptions } from '../../tests/constants.js'; export const mockAttestationService = { request: jest.fn().mockReturnValue(dummyAttestationOptions), diff --git a/services/liquid-auth-api-js/src/__mocks__/auth.service.mock.ts b/services/liquid-auth-api-js/src/__mocks__/auth.service.mock.ts index f74cd1c..3cfcb99 100644 --- a/services/liquid-auth-api-js/src/__mocks__/auth.service.mock.ts +++ b/services/liquid-auth-api-js/src/__mocks__/auth.service.mock.ts @@ -1,4 +1,4 @@ -import { dummyUsers } from '../../tests/constants'; +import { dummyUsers } from '../../tests/constants.js'; const dummyUser = dummyUsers[0]; diff --git a/services/liquid-auth-api-js/src/adapters/redis-io.adapter.ts b/services/liquid-auth-api-js/src/adapters/redis-io.adapter.ts index 8f4c4f1..27a1307 100644 --- a/services/liquid-auth-api-js/src/adapters/redis-io.adapter.ts +++ b/services/liquid-auth-api-js/src/adapters/redis-io.adapter.ts @@ -1,8 +1,7 @@ import { IoAdapter } from '@nestjs/platform-socket.io'; -import { ServerOptions, Socket } from 'socket.io'; +import { ServerOptions } from 'socket.io'; import { createAdapter } from '@socket.io/redis-adapter'; -import Redis from 'ioredis'; -import socketSessions from 'express-socket.io-session'; +import { Redis } from 'ioredis'; import { NestExpressApplication } from '@nestjs/platform-express'; import { RequestHandler } from 'express'; import { ConfigService } from '@nestjs/config'; @@ -14,7 +13,7 @@ export class RedisIoAdapter extends IoAdapter { private readonly sessionHandler: RequestHandler; private adapterConstructor: ReturnType; private pubClient: Redis; - private subClient: Redis; + public subClient: Redis; constructor(app: NestExpressApplication, sessionHandler: RequestHandler) { super(app); @@ -35,13 +34,7 @@ export class RedisIoAdapter extends IoAdapter { createIOServer(port: number, options?: ServerOptions): any { const server = super.createIOServer(port, options); - const wrap = - (middleware: (request: any, options: any, next: any) => any) => - (socket: Socket, next: (err?: Error) => void) => { - return middleware(socket.request, {}, next); - }; - server.use(wrap(this.sessionHandler)); - server.use(socketSessions(this.sessionHandler, { autoSave: true })); + server.engine.use(this.sessionHandler); server.adapter(this.adapterConstructor); return server; } diff --git a/services/liquid-auth-api-js/src/algod/algod.service.ts b/services/liquid-auth-api-js/src/algod/algod.service.ts index 34922e7..5678325 100644 --- a/services/liquid-auth-api-js/src/algod/algod.service.ts +++ b/services/liquid-auth-api-js/src/algod/algod.service.ts @@ -11,4 +11,3 @@ export class AlgodService extends algosdk.Algodv2 { super(token, server, port); } } - diff --git a/services/liquid-auth-api-js/src/android/android.controller.spec.ts b/services/liquid-auth-api-js/src/android/android.controller.spec.ts new file mode 100644 index 0000000..88a47f5 --- /dev/null +++ b/services/liquid-auth-api-js/src/android/android.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { AndroidController } from './android.controller.js'; + +describe('AndroidController', () => { + let controller: AndroidController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [AndroidController], + }).compile(); + + controller = module.get(AndroidController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/services/liquid-auth-api-js/src/android/android.controller.ts b/services/liquid-auth-api-js/src/android/android.controller.ts new file mode 100644 index 0000000..172350a --- /dev/null +++ b/services/liquid-auth-api-js/src/android/android.controller.ts @@ -0,0 +1,57 @@ +import { Controller, Get, Logger, Req, Res } from '@nestjs/common'; +import type { Response } from 'express'; +//@ts-ignore, required for jest +import assetLinks from '../../assetlinks.json' assert { type: 'json' }; +@Controller('.well-known') +export class AndroidController { + private readonly logger = new Logger(AndroidController.name); + + /** + * Well-Known Asset Links + * + * @see https://developer.android.com/training/app-links/verify-android-applinks + * @param req + * @param res + * + */ + @Get('/assetlinks.json') + assetLinks(@Req() req: Request, @Res() res: Response) { + this.logger.debug( + `GET /.well-known/assetlinks.json ${req.headers['user-agent']}`, + ); + // In Development, allow for overriding the asset links + if (process.env.NODE_ENV === 'development') { + const relation = [ + 'delegate_permission/common.handle_all_urls', + 'delegate_permission/common.get_login_creds', + ]; + if (!assetLinks.some((al) => al.target.site === process.env.ORIGIN)) { + assetLinks.push({ + relation, + target: { + namespace: 'web', + site: process.env.ORIGIN, + }, + }); + } + + if ( + process.env.ANDROID_PACKAGENAME && + process.env.ANDROID_SHA256HASH && + !assetLinks.some( + (al) => al.target.package_name === process.env.ANDROID_PACKAGENAME, + ) + ) { + assetLinks.push({ + relation, + target: { + namespace: 'android_app', + package_name: process.env.ANDROID_PACKAGENAME, + sha256_cert_fingerprints: [process.env.ANDROID_SHA256HASH], + }, + }); + } + } + res.json(assetLinks); + } +} diff --git a/services/liquid-auth-api-js/src/app.controller.ts b/services/liquid-auth-api-js/src/app.controller.ts index 3aa909b..866b9cd 100644 --- a/services/liquid-auth-api-js/src/app.controller.ts +++ b/services/liquid-auth-api-js/src/app.controller.ts @@ -1,62 +1,10 @@ import { Controller, Get, Logger, Req, Res, Session } from '@nestjs/common'; import type { Response } from 'express'; -// ignore due to jest -// @ts-ignore -import assetLinks from '../assetlinks.json' with { type: 'json' }; - @Controller() export class AppController { private readonly logger = new Logger(AppController.name); - /** - * Well-Known Asset Links - * - * - * @see https://developer.android.com/training/app-links/verify-android-applinks - * @param req - * @param res - * - */ - @Get('/.well-known/assetlinks.json') - assetLinks(@Req() req: Request, @Res() res: Response) { - this.logger.debug( - `GET /.well-known/assetlinks.json ${req.headers['user-agent']}`, - ); - // In Development, allow for overriding the asset links - if(process.env.NODE_ENV === 'development'){ - const relation = [ - 'delegate_permission/common.handle_all_urls', - 'delegate_permission/common.get_login_creds', - ]; - if(!assetLinks.some((al)=>al.target.site === process.env.ORIGIN)) { - assetLinks.push({ - relation, - target: { - namespace: 'web', - site: process.env.ORIGIN, - }, - }); - } - - if ( - process.env.ANDROID_PACKAGENAME && - process.env.ANDROID_SHA256HASH && - !assetLinks.some((al)=>al.target.package_name === process.env.ANDROID_PACKAGENAME) - ) { - assetLinks.push({ - relation, - target: { - namespace: 'android_app', - package_name: process.env.ANDROID_PACKAGENAME, - sha256_cert_fingerprints: [process.env.ANDROID_SHA256HASH], - }, - }); - } - } - res.json(assetLinks); - } - /** * Serve the SPA * @@ -71,9 +19,9 @@ export class AppController { @Session() session: Record, ) { session.active = true; - this.logger.log( - `GET / Render for Session: ${session.id} UA: ${req.headers['user-agent']}`, - ); - res.render('index'); + this.logger.log( + `GET / Render for Session: ${session.id} UA: ${req.headers['user-agent']}`, + ); + res.render('index'); } } diff --git a/services/liquid-auth-api-js/src/app.module.ts b/services/liquid-auth-api-js/src/app.module.ts index 4d5fb7c..d21f66c 100644 --- a/services/liquid-auth-api-js/src/app.module.ts +++ b/services/liquid-auth-api-js/src/app.module.ts @@ -1,13 +1,22 @@ import { Module } from '@nestjs/common'; -import { AuthModule } from './auth/auth.module.js'; -import { AppController } from './app.controller.js'; + import { MongooseModule } from '@nestjs/mongoose'; import { ConfigModule, ConfigService } from '@nestjs/config'; + +import configuration from './config/configuration.js'; + +// FIDO import { AttestationModule } from './attestation/attestation.module.js'; import { AssertionModule } from './assertion/assertion.module.js'; -import { AppService } from './app.service.js'; + +import { AndroidController } from './android/android.controller.js'; +// User Endpoints +import { AuthModule } from './auth/auth.module.js'; + +// Connect/Signals import { ConnectModule } from './connect/connect.module.js'; -import configuration from './config/configuration.js'; +import { SignalsModule } from './signals/signals.module.js'; +import { AppController } from './app.controller.js'; @Module({ imports: [ @@ -17,7 +26,6 @@ import configuration from './config/configuration.js'; useFactory: async (configService: ConfigService) => { const database = configService.get('database'); const { host, username, password, name, atlas: isAtlas } = database; - //mongodb+srv://algorand:@fido2.ccg8rav.mongodb.net/?retryWrites=true&w=majority const uri = `mongodb${ isAtlas ? '+srv' : '' }://${username}:${password}@${host}/${name}?authSource=admin&retryWrites=true&w=majority`; @@ -31,8 +39,8 @@ import configuration from './config/configuration.js'; AttestationModule, AssertionModule, ConnectModule, + SignalsModule, ], - controllers: [AppController], - providers: [AppService], + controllers: [AndroidController, AppController], }) export class AppModule {} diff --git a/services/liquid-auth-api-js/src/app.service.ts b/services/liquid-auth-api-js/src/app.service.ts index 2d2e705..dc1526f 100644 --- a/services/liquid-auth-api-js/src/app.service.ts +++ b/services/liquid-auth-api-js/src/app.service.ts @@ -1,10 +1,10 @@ import { Injectable, Logger } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import UAParser from 'ua-parser-js'; +import { toBase64URL } from '@liquid/core'; -// ignore due to jest -// @ts-ignore -import assetLinks from '../assetlinks.json' with { type: 'json' }; +//@ts-ignore, required for jest +import assetLinks from '../assetlinks.json' assert { type: 'json' }; @Injectable() export class AppService { @@ -18,14 +18,16 @@ export class AppService { parser.getOS().name.includes('Android') && typeof parser.getBrowser().name !== 'string' ) { - const pkgName = ua.split('/')[0] + const pkgName = ua.split('/')[0]; + console.log(pkgName); const statement = assetLinks.filter( (al) => al?.target?.package_name === pkgName, ); // TODO: better lookup for fingerprints using Headers - const octArray: unknown = statement[0].target.sha256_cert_fingerprints[0].split(':') + const octArray: number[] = statement[0].target.sha256_cert_fingerprints[0] + .split(':') .map((h) => parseInt(h, 16)); - const androidHash = (octArray as Buffer).toString('base64url'); + const androidHash = toBase64URL(new Uint8Array(octArray)); origin = `android:apk-key-hash:${androidHash}`; } // Web Origin diff --git a/services/liquid-auth-api-js/src/assertion/assertion.controller.ts b/services/liquid-auth-api-js/src/assertion/assertion.controller.ts index ab24433..584c81a 100644 --- a/services/liquid-auth-api-js/src/assertion/assertion.controller.ts +++ b/services/liquid-auth-api-js/src/assertion/assertion.controller.ts @@ -1,7 +1,8 @@ import { Body, Controller, - Get, Inject, + Get, + Inject, Logger, Post, Req, @@ -148,7 +149,7 @@ export class AssertionController { await this.authService.update(user); const credential = await this.authService.findCredential(body.id); - console.log(credential) + console.log(credential); delete session.challenge; session.wallet = user.wallet; diff --git a/services/liquid-auth-api-js/src/assertion/assertion.module.ts b/services/liquid-auth-api-js/src/assertion/assertion.module.ts index a4790e9..af4e9cb 100644 --- a/services/liquid-auth-api-js/src/assertion/assertion.module.ts +++ b/services/liquid-auth-api-js/src/assertion/assertion.module.ts @@ -7,11 +7,15 @@ import { MongooseModule } from '@nestjs/mongoose'; import { User, UserSchema } from '../auth/auth.schema.js'; import { AppService } from '../app.service.js'; import { ClientsModule, Transport } from '@nestjs/microservices'; +import { Session, SessionSchema } from '../auth/session.schema.js'; @Module({ imports: [ ConfigModule, - MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]), + MongooseModule.forFeature([ + { name: User.name, schema: UserSchema }, + { name: Session.name, schema: SessionSchema }, + ]), ClientsModule.register([ { name: 'ACCOUNT_LINK_SERVICE', diff --git a/services/liquid-auth-api-js/src/assertion/assertion.service.ts b/services/liquid-auth-api-js/src/assertion/assertion.service.ts index 7549fe6..9ff0930 100644 --- a/services/liquid-auth-api-js/src/assertion/assertion.service.ts +++ b/services/liquid-auth-api-js/src/assertion/assertion.service.ts @@ -38,7 +38,7 @@ export class AssertionService { rpID: this.configService.get('hostname'), allowCredentials, /** - * This optional value controls whether or not the authenticator needs be able to uniquely + * This optional value controls whether the authenticator needs to be able to uniquely * identify the user interacting with it (via built-in PIN pad, fingerprint scanner, etc...) */ userVerification, diff --git a/services/liquid-auth-api-js/src/attestation/attestation.controller.ts b/services/liquid-auth-api-js/src/attestation/attestation.controller.ts index 1642c36..80d3743 100644 --- a/services/liquid-auth-api-js/src/attestation/attestation.controller.ts +++ b/services/liquid-auth-api-js/src/attestation/attestation.controller.ts @@ -84,7 +84,6 @@ export class AttestationController { @Req() req: Request, @Res() res: Response, ) { - console.log(req.headers.host); this.logger.log( `POST /attestation/request for Session: ${session.id} and Wallet: ${session.wallet}`, ); diff --git a/services/liquid-auth-api-js/src/attestation/attestation.module.ts b/services/liquid-auth-api-js/src/attestation/attestation.module.ts index 427e368..785c3ad 100644 --- a/services/liquid-auth-api-js/src/attestation/attestation.module.ts +++ b/services/liquid-auth-api-js/src/attestation/attestation.module.ts @@ -7,11 +7,15 @@ import { AppService } from '../app.service.js'; import { MongooseModule } from '@nestjs/mongoose'; import { User, UserSchema } from '../auth/auth.schema.js'; import { ClientsModule, Transport } from '@nestjs/microservices'; +import { Session, SessionSchema } from '../auth/session.schema.js'; @Module({ imports: [ ConfigModule, - MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]), + MongooseModule.forFeature([ + { name: User.name, schema: UserSchema }, + { name: Session.name, schema: SessionSchema }, + ]), ClientsModule.register([ { name: 'ACCOUNT_LINK_SERVICE', diff --git a/services/liquid-auth-api-js/src/attestation/attestation.service.ts b/services/liquid-auth-api-js/src/attestation/attestation.service.ts index c8bce80..8191bc5 100644 --- a/services/liquid-auth-api-js/src/attestation/attestation.service.ts +++ b/services/liquid-auth-api-js/src/attestation/attestation.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { AppService } from '../app.service.js'; import fido2 from '@simplewebauthn/server'; -import { AttestationSelectorDto } from './attestation.dto'; +import { AttestationSelectorDto } from './attestation.dto.js'; import { User } from '../auth/auth.schema.js'; import type { AttestationCredentialJSON } from '@simplewebauthn/typescript-types'; @Injectable() @@ -63,6 +63,7 @@ export class AttestationService { credential: AttestationCredentialJSON & { device?: string }, ) { const expectedOrigin = this.appService.getOrigin(ua); + console.log(expectedOrigin); const expectedRPID = this.configService.get('hostname'); const verifiedAttestation = await fido2.verifyAttestationResponse({ credential, diff --git a/services/liquid-auth-api-js/src/auth/auth.controller.ts b/services/liquid-auth-api-js/src/auth/auth.controller.ts index d830bde..96ac704 100644 --- a/services/liquid-auth-api-js/src/auth/auth.controller.ts +++ b/services/liquid-auth-api-js/src/auth/auth.controller.ts @@ -1,9 +1,7 @@ import { - Body, Controller, Delete, Get, - Post, Req, Res, Session, @@ -13,9 +11,6 @@ import type { Request, Response } from 'express'; import { AuthService } from './auth.service.js'; import { AuthGuard } from './auth.guard.js'; -type LoginRequestDTO = { - wallet: string; -}; @Controller('auth') export class AuthController { constructor(private authService: AuthService) {} @@ -78,41 +73,6 @@ export class AuthController { delete session.requestId; res.redirect(302, '/'); } - /** - * Create Session / Login - * - * @remarks - * Post credentials to the server, creates a new credential if it does not exist. - * If this route has not been called, the application should not allow access to private - * routes - * - * @param session - The session object - * @param userLoginDto - The credentials to post - * @param res - The response object - */ - @Post('/session') - async create( - @Session() session: Record, - @Body() userLoginDto: LoginRequestDTO, - @Res() res: Response, - ) { - if ( - typeof userLoginDto.wallet !== 'string' || - userLoginDto.wallet.length !== 58 - ) { - res - .status(400) - .json({ reason: 'invalid_input', error: 'Invalid wallet' }); - } else { - try { - const user = await this.authService.init(userLoginDto.wallet); - session.wallet = user.wallet; - res.json(user); - } catch (e) { - res.status(500).json({ error: e.message }); - } - } - } /** * Read Session * @@ -120,8 +80,18 @@ export class AuthController { */ @Get('/session') async read(@Session() session: Record) { - session.connected = true; const user = await this.authService.find(session.wallet); - return user || {}; + return ( + { + user: user + ? { + id: user.id, + wallet: user.wallet, + credentials: user.credentials, + } + : null, + session, + } || {} + ); } } diff --git a/services/liquid-auth-api-js/src/auth/auth.guard.ts b/services/liquid-auth-api-js/src/auth/auth.guard.ts index dbf3102..b29a387 100644 --- a/services/liquid-auth-api-js/src/auth/auth.guard.ts +++ b/services/liquid-auth-api-js/src/auth/auth.guard.ts @@ -7,9 +7,11 @@ export class AuthGuard implements CanActivate { context: ExecutionContext, ): boolean | Promise | Observable { const request = context.switchToHttp().getRequest(); + const session = request.session || request.handshake.session; return ( - typeof request.session.wallet === 'string' && - request.session.wallet.length === 58 + typeof session !== 'undefined' && + typeof session.wallet === 'string' && + session.wallet.length === 58 ); } } diff --git a/services/liquid-auth-api-js/src/auth/auth.module.ts b/services/liquid-auth-api-js/src/auth/auth.module.ts index 68730ee..6d389c1 100644 --- a/services/liquid-auth-api-js/src/auth/auth.module.ts +++ b/services/liquid-auth-api-js/src/auth/auth.module.ts @@ -3,10 +3,14 @@ import { AuthController } from './auth.controller.js'; import { AuthService } from './auth.service.js'; import { MongooseModule } from '@nestjs/mongoose'; import { User, UserSchema } from './auth.schema.js'; +import { Session, SessionSchema } from './session.schema.js'; @Module({ imports: [ - MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]), + MongooseModule.forFeature([ + { name: User.name, schema: UserSchema }, + { name: Session.name, schema: SessionSchema }, + ]), ], controllers: [AuthController], providers: [AuthService], diff --git a/services/liquid-auth-api-js/src/auth/auth.service.ts b/services/liquid-auth-api-js/src/auth/auth.service.ts index 6545c2c..fafccad 100644 --- a/services/liquid-auth-api-js/src/auth/auth.service.ts +++ b/services/liquid-auth-api-js/src/auth/auth.service.ts @@ -1,15 +1,19 @@ import * as crypto from 'node:crypto'; -import { Injectable } from '@nestjs/common'; +import { Injectable, Logger } from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; import { Model } from 'mongoose'; -import base64url from 'base64url'; - +import { toBase64URL } from '@liquid/core/encoding'; import type { FilterQuery } from 'mongoose'; import { Credential, User } from './auth.schema.js'; +import { Session } from './session.schema.js'; @Injectable() export class AuthService { - constructor(@InjectModel(User.name) private userModel: Model) {} + private readonly logger = new Logger(AuthService.name); + constructor( + @InjectModel(User.name) private userModel: Model, + @InjectModel(Session.name) private sessionModel: Model, + ) {} /** * Initialize a User @@ -36,7 +40,7 @@ export class AuthService { */ async create(wallet: string): Promise { const createdUser = new this.userModel({ - id: base64url.encode(crypto.randomBytes(32)), + id: toBase64URL(crypto.randomBytes(32)), wallet, credentials: [], }); @@ -63,7 +67,9 @@ export class AuthService { return this.userModel.findOneAndUpdate({ id: user.id }, user).exec(); } async findCredential(credId: string) { - const user = await this.userModel.findOne({ 'credentials.credId': credId }).exec(); + const user = await this.userModel + .findOne({ 'credentials.credId': credId }) + .exec(); if (user) { return user.credentials.find((cred) => cred.credId === credId); } @@ -92,4 +98,35 @@ export class AuthService { async all() { return this.userModel.find({}).exec(); } + + /** + * Find a Session by ID + * + * @param sid - Session ID + */ + async findSession(sid: string): Promise { + this.logger.log(`Finding session ${sid}`); + return this.sessionModel.findOne({ _id: sid }).exec(); + } + + /** + * Update Wallet by Session ID + * @param session - The stored Session + * @param wallet - The Wallet Address + */ + async updateSessionWallet( + session: Session, + wallet: string, + ): Promise { + const data = JSON.parse(session.session); + data.wallet = wallet; + return this.sessionModel + .findOneAndUpdate( + { _id: session._id }, + { + session: JSON.stringify(data), + }, + ) + .exec(); + } } diff --git a/services/liquid-auth-api-js/src/connect/session.schema.ts b/services/liquid-auth-api-js/src/auth/session.schema.ts similarity index 100% rename from services/liquid-auth-api-js/src/connect/session.schema.ts rename to services/liquid-auth-api-js/src/auth/session.schema.ts diff --git a/services/liquid-auth-api-js/src/connect/AlgoEncoder.ts b/services/liquid-auth-api-js/src/connect/AlgoEncoder.ts deleted file mode 100644 index 0436e56..0000000 --- a/services/liquid-auth-api-js/src/connect/AlgoEncoder.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { sha512_256 } from 'js-sha512'; -import * as base32 from 'hi-base32'; - -const ALGORAND_PUBLIC_KEY_BYTE_LENGTH = 32; -const ALGORAND_ADDRESS_BYTE_LENGTH = 36; -const ALGORAND_CHECKSUM_BYTE_LENGTH = 4; -const ALGORAND_ADDRESS_LENGTH = 58; -const HASH_BYTES_LENGTH = 32; -export const MALFORMED_ADDRESS_ERROR_MSG = 'Malformed address'; -export const ALGORAND_ADDRESS_BAD_CHECKSUM_ERROR_MSG = 'Bad checksum'; - -export class AlgorandEncoder { - /** - * decodeAddress takes an Algorand address in string form and decodes it into a Uint8Array. - * @param address - an Algorand address with checksum. - * @returns the decoded form of the address's public key and checksum - */ - decodeAddress(address: string): Uint8Array { - if ( - typeof address !== 'string' || - address.length !== ALGORAND_ADDRESS_LENGTH - ) - throw new Error(MALFORMED_ADDRESS_ERROR_MSG); - - // try to decode - const decoded = base32.decode.asBytes(address.toString()); - - // Find publickey and checksum - const pk = new Uint8Array( - decoded.slice( - 0, - ALGORAND_ADDRESS_BYTE_LENGTH - ALGORAND_CHECKSUM_BYTE_LENGTH, - ), - ); - const cs = new Uint8Array( - decoded.slice( - ALGORAND_PUBLIC_KEY_BYTE_LENGTH, - ALGORAND_ADDRESS_BYTE_LENGTH, - ), - ); - - // Compute checksum - const checksum = sha512_256 - .array(pk) - .slice( - HASH_BYTES_LENGTH - ALGORAND_CHECKSUM_BYTE_LENGTH, - HASH_BYTES_LENGTH, - ); - - // Check if the checksum and the address are equal - if ( - checksum.length !== cs.length || - !Array.from(checksum).every((val, i) => val === cs[i]) - ) { - throw new Error(ALGORAND_ADDRESS_BAD_CHECKSUM_ERROR_MSG); - } - - return pk; - } -} diff --git a/services/liquid-auth-api-js/src/connect/connect.controller.spec.ts b/services/liquid-auth-api-js/src/connect/connect.controller.spec.ts index 0f9a6d1..0608e06 100644 --- a/services/liquid-auth-api-js/src/connect/connect.controller.spec.ts +++ b/services/liquid-auth-api-js/src/connect/connect.controller.spec.ts @@ -1,11 +1,11 @@ import { Test, TestingModule } from '@nestjs/testing'; -import { AlgodService } from '../algod/algod.service'; -import { ConnectController } from './connect.controller'; -import { AuthService } from '../auth/auth.service'; -import { Session } from './session.schema'; -import { accFixture } from '../../tests/constants'; -import { mockAuthService } from '../__mocks__/auth.service.mock'; -import { mockAccountLinkService } from '../__mocks__/account-link.service.mock'; +import { AlgodService } from '../algod/algod.service.js'; +import { ConnectController } from './connect.controller.js'; +import { AuthService } from '../auth/auth.service.js'; +import { Session } from '../auth/session.schema.js'; +import { accFixture } from '../../tests/constants.js'; +import { mockAuthService } from '../__mocks__/auth.service.mock.js'; +import { mockAccountLinkService } from '../__mocks__/account-link.service.mock.js'; describe('ConnectController', () => { let connectController: ConnectController; diff --git a/services/liquid-auth-api-js/src/connect/connect.controller.ts b/services/liquid-auth-api-js/src/connect/connect.controller.ts index a058947..2625fd3 100644 --- a/services/liquid-auth-api-js/src/connect/connect.controller.ts +++ b/services/liquid-auth-api-js/src/connect/connect.controller.ts @@ -11,18 +11,8 @@ import { import { ClientProxy } from '@nestjs/microservices'; import { AuthService } from '../auth/auth.service.js'; import { AlgodService } from '../algod/algod.service.js'; -import { AlgorandEncoder } from './AlgoEncoder.js'; -import * as nacl from 'tweetnacl'; - -const algoEncoder = new AlgorandEncoder(); - -const base64ToUint8Array = (encoded) => { - return new Uint8Array( - atob(encoded) - .split('') - .map((c) => c.charCodeAt(0)), - ); -}; +import nacl from 'tweetnacl'; +import { decodeAddress, fromBase64Url } from '@liquid/core/encoding'; type LinkResponseDTO = { credId?: string; @@ -60,14 +50,11 @@ export class ConnectController { this.logger.log( `POST /connect/response for RequestId: ${requestId} Session: ${session.id} with Wallet: ${wallet}`, ); - // Decode Address - const publicKey = algoEncoder.decodeAddress(wallet); + const publicKey = decodeAddress(wallet); // Decode signature - const uint8Signature = base64ToUint8Array( - signature.replace(/-/g, '+').replace(/_/g, '/').replace(/\s/g, ''), - ); + const uint8Signature = fromBase64Url(signature); // Validate Signature const encoder = new TextEncoder(); @@ -95,7 +82,7 @@ export class ConnectController { throw new HttpException('Invalid signature', HttpStatus.FORBIDDEN); } - const authPublicKey = algoEncoder.decodeAddress(accountInfo['auth-addr']); + const authPublicKey = decodeAddress(accountInfo['auth-addr']); // Validate Auth Address Signature if ( diff --git a/services/liquid-auth-api-js/src/connect/connect.dto.ts b/services/liquid-auth-api-js/src/connect/connect.dto.ts new file mode 100644 index 0000000..0c10c2f --- /dev/null +++ b/services/liquid-auth-api-js/src/connect/connect.dto.ts @@ -0,0 +1,15 @@ +export type RTCIceCandidateDto = { + address: string; + candidate: string; + component: string; + foundation: string; + port: number; + priority: number; + protocol: string; + relatedAddress: string; + relatedPort: number; + sdpMid: string; + sdpMLineIndex: number; + tcpType: string; + usernameFragment?: string; +}; diff --git a/services/liquid-auth-api-js/src/connect/connect.gateway.ts b/services/liquid-auth-api-js/src/connect/connect.gateway.ts index 1277490..060cb80 100644 --- a/services/liquid-auth-api-js/src/connect/connect.gateway.ts +++ b/services/liquid-auth-api-js/src/connect/connect.gateway.ts @@ -1,105 +1,101 @@ -import type { Handshake, Server, Socket } from 'socket.io'; -import Redis from 'ioredis'; +import type { Server, Socket } from 'socket.io'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { ConnectedSocket, MessageBody, + OnGatewayConnection, + OnGatewayDisconnect, + OnGatewayInit, SubscribeMessage, WebSocketGateway, - WebSocketServer, } from '@nestjs/websockets'; -import { SessionService } from './session.service.js'; -import { Logger, Session, Req, Res } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; -import {Request, Response} from 'express' +import { Logger } from '@nestjs/common'; +import { AuthService } from '../auth/auth.service.js'; +import { RedisIoAdapter } from '../adapters/redis-io.adapter.js'; @WebSocketGateway({ cors: { origin: '*', }, }) -export class ConnectGateway { - private subClient: Redis; +export class ConnectGateway + implements OnGatewayInit, OnGatewayConnection, OnGatewayDisconnect +{ + private timers = new Map(); + private ioAdapter: RedisIoAdapter; private readonly logger = new Logger(ConnectGateway.name); + constructor(private authService: AuthService) {} - constructor( - private configService: ConfigService, - private sessionService: SessionService, - ) { - this.subClient = new Redis({ - host: configService.get('socket.host'), - port: configService.get('socket.port'), - username: configService.get('socket.username'), - password: configService.get('socket.password'), - lazyConnect: true, - }); - // Connect to the redis feed - if (this.subClient.status !== 'ready') { - this.subClient.connect(); - } + /** + * Initialize the Gateway + * + * Pulls the RedisIoAdapter instance from the server + * + * @param server + */ + afterInit(server: Server) { + this.ioAdapter = server.sockets.adapter as unknown as RedisIoAdapter; } - @WebSocketServer() - server: Server; - handleConnection(@Session() session: Record) { - session.connected = true; - this.logger.debug(`WSS / Client Connected with Session: ${session.id}`); - } - @SubscribeMessage('hello') - async hello(@MessageBody() data: string, @ConnectedSocket() client: Socket) { - const handshake = client.handshake as Handshake; - const session = await this.sessionService.find(handshake.sessionID); - console.log('Hello triggered', session); - return data; - } - @SubscribeMessage('wait') - async waitOnRegistration( - @Res() res: Response, - @Req() req: Request, - @Session() sessionz: Record, - @ConnectedSocket() client: Socket, - @MessageBody() body: { wallet: string }, - ) { - console.log('waiting', sessionz); - const handshake = (req as any).handshake as Handshake; - console.log(sessionz, ((req as any).handshake as Handshake).sessionID); - // Find the stored session - const sessionRecord = await this.sessionService.find(handshake.sessionID); + /** + * Handle Connection + * + * Automatically join the client to the public key's room + * + * @param client + */ + async handleConnection(socket: Socket) { + const request = socket.request as Record; + const session = request.session as Record; - console.log(sessionRecord); + const timer = setInterval(() => { + session.reload((err) => { + // console.log('Reloaded session') + if (err) { + // forces the client to reconnect + socket.conn.close(); + // you can also use socket.disconnect(), but in that case the client + // will not try to reconnect + } else { + if ( + typeof session.wallet === 'string' && + socket.rooms.has(session.wallet) === false + ) { + this.logger.debug(`(*) Client Joining Room ${session.wallet}`); + socket.join(session.wallet); + } + } + }); + }, 200); - if(sessionRecord) { - const session = JSON.parse(sessionRecord.session); - console.log(session) + if (this.timers.has(request.sessionID)) { + clearInterval(this.timers.get(request.sessionID)); + } + + this.timers.set(request.sessionID, timer); + this.logger.debug( + `(*) Client Connected with Session: ${request.sessionID}${ + session.wallet ? ` and PublicKey: ${session.wallet}` : '' + }`, + ); + if (typeof session.wallet === 'string') { + this.logger.debug(`(*) Client Joining Room ${session.wallet}`); + await socket.join(session.wallet); } - // TODO: restrict to session - this.subClient.subscribe('auth-interaction'); + } - // Handle messages - const obs$: Observable = new Observable((observer) => { - this.subClient.on('message', async (channel, eventMessage) => { - console.log(eventMessage); - const { data } = JSON.parse(eventMessage); - console.log(body.wallet, data.wallet); - if (body.wallet === data.wallet) { - observer.next(data); - // this.subClient.disconnect(); - observer.complete(); - } - }); - }); - return obs$.pipe( - map((obs$) => ({ - data: { - device: obs$.credential.device, - credId: obs$.credential.credId, - wallet: obs$.wallet, - }, - })), + handleDisconnect(socket: Socket) { + const request = socket.request as Record; + this.logger.debug( + `(*) Client Disconnected with Session: ${request.sessionID}`, ); + if (this.timers.has(request.sessionID)) { + clearInterval(this.timers.get(request.sessionID)); + } } + /** * On Link Connection, wait for the wallet to connect * @param client @@ -107,36 +103,43 @@ export class ConnectGateway { */ @SubscribeMessage('link') async linkAccount( - @Req() req: Request, - @Session() sessionz: Record, @ConnectedSocket() client: Socket, @MessageBody() body: { requestId: string | number }, ): Promise< Observable<{ data: { requestId: string | number; wallet: string } }> > { - console.log(sessionz, ((req as any).handshake as Handshake).sessionID); - const handshake = client.handshake as Handshake; + const request = client.request as Record; this.logger.debug( - `WSS / Event: link for Session: ${handshake.sessionID} with RequestId: ${body.requestId}`, + `(link): link for Session: ${request.sessionID} with RequestId: ${body.requestId}`, ); // Find the stored session - const session = await this.sessionService.find(handshake.sessionID); - if(session){ - this.subClient.subscribe('auth'); + const session = await this.authService.findSession(request.sessionID); + console.log('Session', session); + if (session) { + console.log('Listening to auth messages'); + await this.ioAdapter.subClient.subscribe('auth'); // Handle messages const obs$: Observable = new Observable((observer) => { - this.subClient.on('message', async (channel, eventMessage) => { + const handleAuthMessage = async (channel, eventMessage) => { + console.log('Link->Message', channel, eventMessage); const { data } = JSON.parse(eventMessage); console.log(body.requestId, data.requestId, data, body); if (body.requestId === data.requestId) { - await this.sessionService.updateWallet(session, data.wallet); + this.logger.debug( + `(*) Linking Wallet: ${data.wallet} to Session: ${request.sessionID}`, + ); + await this.authService.updateSessionWallet(session, data.wallet); + this.logger.debug(`(*) Joining Room: ${data.wallet}`); + await client.join(data.wallet); observer.next(data); - // this.subClient.disconnect(); + this.ioAdapter.subClient.off('message', handleAuthMessage); observer.complete(); } - }); + }; + + this.ioAdapter.subClient.on('message', handleAuthMessage); }); return obs$.pipe( map((obs$) => ({ @@ -148,6 +151,5 @@ export class ConnectGateway { })), ); } - } } diff --git a/services/liquid-auth-api-js/src/connect/connect.module.ts b/services/liquid-auth-api-js/src/connect/connect.module.ts index 1aca4d2..49f7556 100644 --- a/services/liquid-auth-api-js/src/connect/connect.module.ts +++ b/services/liquid-auth-api-js/src/connect/connect.module.ts @@ -1,11 +1,13 @@ import { Module } from '@nestjs/common'; -import { ConnectController } from './connect.controller.js'; -import { ConnectGateway } from './connect.gateway.js'; import { ClientsModule, Transport } from '@nestjs/microservices'; import { MongooseModule } from '@nestjs/mongoose'; -import { Session, SessionSchema } from './session.schema.js'; -import { SessionService } from './session.service.js'; + +// Connect +import { ConnectController } from './connect.controller.js'; +import { ConnectGateway } from './connect.gateway.js'; +// Auth import { AuthService } from '../auth/auth.service.js'; +import { Session, SessionSchema } from '../auth/session.schema.js'; import { User, UserSchema } from '../auth/auth.schema.js'; import { AlgodService } from '../algod/algod.service.js'; @@ -30,6 +32,6 @@ import { AlgodService } from '../algod/algod.service.js'; ]), ], controllers: [ConnectController], - providers: [AuthService, SessionService, ConnectGateway, AlgodService], + providers: [AuthService, ConnectGateway, AlgodService], }) export class ConnectModule {} diff --git a/services/liquid-auth-api-js/src/connect/session.service.ts b/services/liquid-auth-api-js/src/connect/session.service.ts deleted file mode 100644 index 323ed6e..0000000 --- a/services/liquid-auth-api-js/src/connect/session.service.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { InjectModel } from '@nestjs/mongoose'; -import { Model } from 'mongoose'; - -import { Session } from './session.schema.js'; - -/** - * Session Service - * - * Bypass Nest.js/Express opinions and directly modify the SessionStore - */ -@Injectable() -export class SessionService { - private readonly logger = new Logger(SessionService.name); - /** - * Construct SessionService - * @param sessionModel - Session Mongoose Model - */ - constructor( - @InjectModel(Session.name) private sessionModel: Model, - ) {} - - /** - * Find a Session by ID - * - * @param sid - Session ID - */ - async find(sid: string): Promise { - this.logger.log(`Finding session ${sid}`); - return this.sessionModel.findOne({ _id: sid }).exec(); - } - - /** - * Update Wallet by Session ID - * @param session - The stored Session - * @param wallet - The Wallet Address - */ - async updateWallet(session: Session, wallet: string): Promise { - console.log(`!!!!!!!!!!!${session}`) - const data = JSON.parse(session.session); - data.wallet = wallet; - return this.sessionModel - .findOneAndUpdate( - { _id: session._id }, - { - session: JSON.stringify(data), - }, - ) - .exec(); - } -} diff --git a/services/liquid-auth-api-js/src/main.ts b/services/liquid-auth-api-js/src/main.ts index 01ee257..1d08066 100644 --- a/services/liquid-auth-api-js/src/main.ts +++ b/services/liquid-auth-api-js/src/main.ts @@ -1,43 +1,50 @@ import 'dotenv/config'; -import { resolve } from 'node:path'; import { HttpAdapterHost, NestFactory } from '@nestjs/core'; import type { NestExpressApplication } from '@nestjs/platform-express'; -import session from 'express-session'; -import hbs from 'hbs'; -import MongoStore from 'connect-mongo'; +import { ConfigService } from '@nestjs/config'; + +// Application import { AppModule } from './app.module.js'; import { RedisIoAdapter } from './adapters/redis-io.adapter.js'; -import { ConfigService } from '@nestjs/config'; + +// Session +import session from 'express-session'; +import MongoStore from 'connect-mongo'; + +// Sentry import * as Sentry from '@sentry/node'; import { ProfilingIntegration } from '@sentry/profiling-node'; import { SentryFilter } from './sentry.filter.js'; + async function bootstrap() { const app = await NestFactory.create(AppModule, { logger: ['error', 'warn', 'debug', 'log', 'verbose'], }); - Sentry.init({ - dsn: process.env.SENTRY_DNS, - integrations: [ - // enable HTTP calls tracing - new Sentry.Integrations.Http({ tracing: true }), - new ProfilingIntegration(), - ], - // Performance Monitoring - tracesSampleRate: 1.0, - // Set sampling rate for profiling - this is relative to tracesSampleRate - profilesSampleRate: 1.0, - }); - const { httpAdapter } = app.get(HttpAdapterHost); - app.useGlobalFilters(new SentryFilter(httpAdapter)); - const config = app.get(ConfigService); - const env = config.get('env'); + const isSentryEnabled = + config.get('sentry') || typeof process.env.SENTRY_DNS !== 'undefined'; + if (isSentryEnabled) { + Sentry.init({ + dsn: process.env.SENTRY_DNS, + integrations: [ + // enable HTTP calls tracing + new Sentry.Integrations.Http({ tracing: true }), + new ProfilingIntegration(), + ], + // Performance Monitoring + tracesSampleRate: 1.0, + // Set sampling rate for profiling - this is relative to tracesSampleRate + profilesSampleRate: 1.0, + }); + const { httpAdapter } = app.get(HttpAdapterHost); + app.useGlobalFilters(new SentryFilter(httpAdapter)); + } const username = config.get('database.username'); const host = config.get('database.host'); const password = config.get('database.password'); const name = config.get('database.name'); - const isAtlas = config.get('database.atlas') + const isAtlas = config.get('database.atlas'); const uri = `mongodb${ isAtlas ? '+srv' : '' }://${username}:${password}@${host}/${name}?authSource=admin&retryWrites=true&w=majority`; @@ -49,8 +56,8 @@ async function bootstrap() { const sessionHandler = session({ secret: 'my-secret', + saveUninitialized: true, resave: false, - saveUninitialized: false, cookie: { httpOnly: true, secure: false, // TODO: Secure the cookie @@ -63,11 +70,7 @@ async function bootstrap() { app.useWebSocketAdapter(redisIoAdapter); - app.useStaticAssets(resolve('./public')); - app.setBaseViewsDir(resolve('./views')); - app.setViewEngine('html'); - app.engine('html', hbs.__express); await app.listen(process.env.PORT || 3000); } -bootstrap(); +await bootstrap(); diff --git a/services/liquid-auth-api-js/src/signals/__fixtures__/candidate.fixture.json b/services/liquid-auth-api-js/src/signals/__fixtures__/candidate.fixture.json new file mode 100644 index 0000000..9380cad --- /dev/null +++ b/services/liquid-auth-api-js/src/signals/__fixtures__/candidate.fixture.json @@ -0,0 +1,5 @@ +{ + "candidate": "candidate:344579997 1 tcp 1517952767 127.0.0.1 52619 typ host tcptype passive generation 0 ufrag NXxR network-id 1", + "sdpMid": "data", + "sdpMLineIndex": 0 +} diff --git a/services/liquid-auth-api-js/src/signals/__fixtures__/sdp.fixtures.json b/services/liquid-auth-api-js/src/signals/__fixtures__/sdp.fixtures.json new file mode 100644 index 0000000..7f39639 --- /dev/null +++ b/services/liquid-auth-api-js/src/signals/__fixtures__/sdp.fixtures.json @@ -0,0 +1,4 @@ +{ + "call": "v=0\no=- 872275877217328554 2 IN IP4 127.0.0.1\ns=-\nt=0 0\na=group:BUNDLE data\na=msid-semantic: WMS\nm=application 9 UDP/DTLS/SCTP webrtc-datachannel\nc=IN IP4 0.0.0.0\na=ice-ufrag:NXxR\na=ice-pwd:PGHIKpCaFejy4Sadz+snc5UN\na=ice-options:trickle renomination\na=fingerprint:sha-256 9D:60:CD:39:4A:DC:B5:01:B3:F1:08:84:B9:4E:B5:6B:98:61:57:15:8B:1B:64:D6:C6:5B:AF:3D:5B:EF:48:4B\na=setup:actpass\na=mid:data\na=sctp-port:5000\na=max-message-size:262144", + "answer": "v=0\no=- 1147071363730077050 2 IN IP4 127.0.0.1\ns=-\nt=0 0\na=group:BUNDLE data\na=msid-semantic: WMS\nm=application 9 UDP/DTLS/SCTP webrtc-datachannel\nc=IN IP4 0.0.0.0\na=ice-ufrag:v0OA\na=ice-pwd:DzuJ/M1IneOLTOKOMC3XPWWF\na=ice-options:trickle\na=fingerprint:sha-256 25:0A:8E:3E:EB:31:86:0E:EA:2E:32:A1:2D:BE:C4:73:C7:A0:D4:43:D0:A7:B6:BB:C6:D3:68:23:85:C0:18:3C\na=setup:active\na=mid:data\na=sctp-port:5000\na=max-message-size:262144" +} diff --git a/services/liquid-auth-api-js/src/signals/signals.gateway.spec.ts b/services/liquid-auth-api-js/src/signals/signals.gateway.spec.ts new file mode 100644 index 0000000..4d069db --- /dev/null +++ b/services/liquid-auth-api-js/src/signals/signals.gateway.spec.ts @@ -0,0 +1,80 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { SignalsGateway } from './signals.gateway.js'; +import { Server, Socket } from 'socket.io'; + +// eslint-disable-next-line @typescript-eslint/no-var-requires +const candidateFixture = require('./__fixtures__/candidate.fixture.json'); +// eslint-disable-next-line @typescript-eslint/no-var-requires +const sdpFixtures = require('./__fixtures__/sdp.fixtures.json'); +// eslint-disable-next-line @typescript-eslint/no-var-requires +const sessionFixtures = require('../__fixtures__/session.fixtures.json'); + +const clientFixture = { + request: { + session: sessionFixtures.authorized, + }, +} as unknown as Socket; + +jest.mock('socket.io', () => { + return { + Server: jest.fn().mockImplementation(() => { + return { + emit: jest.fn(), + in: jest.fn().mockReturnThis(), + }; + }), + }; +}); + +describe('SignalsGateway', () => { + let gateway: SignalsGateway; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [SignalsGateway], + }).compile(); + + gateway = module.get(SignalsGateway); + gateway.server = new Server(); + }); + it('should signal a offer-description', () => { + gateway.onCallDescription(sdpFixtures.call, clientFixture); + expect(gateway.server.in).toHaveBeenCalledWith( + (clientFixture.request as any).session.wallet, + ); + expect(gateway.server.emit).toHaveBeenCalledWith( + 'offer-description', + sdpFixtures.call, + ); + }); + it('should signal a offer-candidate', () => { + gateway.onCallCandidate(candidateFixture, clientFixture); + expect(gateway.server.in).toHaveBeenCalledWith( + (clientFixture.request as any).session.wallet, + ); + expect(gateway.server.emit).toHaveBeenCalledWith( + 'offer-candidate', + candidateFixture, + ); + }); + it('should signal a answer-description', () => { + gateway.onAnswerDescription(sdpFixtures.answer, clientFixture); + expect(gateway.server.in).toHaveBeenCalledWith( + (clientFixture.request as any).session.wallet, + ); + expect(gateway.server.emit).toHaveBeenCalledWith( + 'answer-description', + sdpFixtures.answer, + ); + }); + it('should signal a answer-candidate', () => { + gateway.onAnswerCandidate(candidateFixture, clientFixture); + expect(gateway.server.in).toHaveBeenCalledWith( + (clientFixture.request as any).session.wallet, + ); + expect(gateway.server.emit).toHaveBeenCalledWith( + 'answer-candidate', + candidateFixture, + ); + }); +}); diff --git a/services/liquid-auth-api-js/src/signals/signals.gateway.ts b/services/liquid-auth-api-js/src/signals/signals.gateway.ts new file mode 100644 index 0000000..8eb13b2 --- /dev/null +++ b/services/liquid-auth-api-js/src/signals/signals.gateway.ts @@ -0,0 +1,65 @@ +import { + ConnectedSocket, + MessageBody, + SubscribeMessage, + WebSocketGateway, + WebSocketServer, +} from '@nestjs/websockets'; +import { Logger, UseInterceptors } from '@nestjs/common'; +import type { Server, Socket } from 'socket.io'; +import { SignalsInterceptor } from './signals.interceptor.js'; + +@WebSocketGateway() +@UseInterceptors(SignalsInterceptor) +export class SignalsGateway { + @WebSocketServer() + server: Server; + private readonly logger = new Logger(SignalsGateway.name); + + @SubscribeMessage('offer-candidate') + onCallCandidate( + @MessageBody() + data: { candidate: string; sdpMid: string; sdpMLineIndex: number }, + @ConnectedSocket() client: Socket, + ) { + this.logger.debug(`(offer-candidate): ${JSON.stringify(data)}`); + const request = client.request as Record; + const session = request.session as Record; + this.server.in(session.wallet).emit('offer-candidate', data); + } + @SubscribeMessage('offer-description') + onCallDescription( + @MessageBody() data: string, + @ConnectedSocket() client: Socket, + ) { + this.logger.log(`(offer-description): ${data}`); + + // Session from the initial Handshake + const request = client.request as Record; + const session = request.session as Record; + + // Send description to all clients in the public key's room + this.server.in(session.wallet).emit('offer-description', data); + } + @SubscribeMessage('answer-description') + onAnswerDescription( + @MessageBody() data: string, + @ConnectedSocket() client: Socket, + ) { + this.logger.log(`(answer-description): ${data}`); + const request = client.request as Record; + const session = request.session as Record; + this.server.in(session.wallet).emit('answer-description', data); + } + @SubscribeMessage('answer-candidate') + onAnswerCandidate( + @MessageBody() + data: { candidate: string; sdpMid: string; sdpMLineIndex: number }, + @ConnectedSocket() client: Socket, + ) { + this.logger.debug(`(answer-candidate): ${JSON.stringify(data)}`); + const request = client.request as Record; + const session = request.session as Record; + this.server.in(session.wallet).emit('answer-candidate', data); + } +} diff --git a/services/liquid-auth-api-js/src/signals/signals.interceptor.spec.ts b/services/liquid-auth-api-js/src/signals/signals.interceptor.spec.ts new file mode 100644 index 0000000..96a904c --- /dev/null +++ b/services/liquid-auth-api-js/src/signals/signals.interceptor.spec.ts @@ -0,0 +1,83 @@ +import { SignalsInterceptor } from './signals.interceptor'; +import { ExecutionContext } from '@nestjs/common'; +import { of } from 'rxjs'; + +function createExecutionContextMock(sessionFixture = {}): { + executionContext: ExecutionContext; + disconnect: jest.Mock; +} { + const disconnect = jest.fn(); + return { + executionContext: { + getArgByIndex: jest.fn().mockReturnThis(), + getArgs: jest.fn().mockReturnThis(), + getType: jest.fn().mockReturnThis(), + switchToWs: jest.fn().mockReturnValue({ + getClient: jest.fn().mockReturnValue({ + disconnect, + request: { session: sessionFixture }, + }), + }), + switchToHttp: jest.fn().mockReturnThis(), + switchToRpc: jest.fn().mockReturnThis(), + getClass: () => + ({ + name: 'something', + }) as any, + getHandler: () => + ({ + name: 'something', + }) as any, + }, + disconnect, + }; +} + +const next = { + handle: jest.fn(() => of()), +}; +describe('ConnectInterceptor', () => { + let interceptor: SignalsInterceptor; + + beforeEach(() => { + interceptor = new SignalsInterceptor(); + }); + it('should disconnect a invalid session', (done) => { + expect(interceptor).toBeDefined(); + const { executionContext, disconnect } = createExecutionContextMock({}); + const response = interceptor.intercept(executionContext, next); + + response.subscribe({ + next: () => { + expect(disconnect).toHaveBeenCalled(); + }, + error: (error) => { + throw error; + }, + complete: () => { + expect(disconnect).toBeCalledTimes(1); + done(); + }, + }); + }); + it('should continue with a valid session', (done) => { + expect(interceptor).toBeDefined(); + const { executionContext, disconnect } = createExecutionContextMock({ + wallet: 'AVALIDWALLETADDRESS', + }); + const response = interceptor.intercept(executionContext, next); + + response.subscribe({ + next: () => { + expect(disconnect).not.toHaveBeenCalled(); + }, + error: (error) => { + throw error; + }, + complete: () => { + expect(disconnect).toBeCalledTimes(0); + done(); + }, + }); + }); +}); diff --git a/services/liquid-auth-api-js/src/signals/signals.interceptor.ts b/services/liquid-auth-api-js/src/signals/signals.interceptor.ts new file mode 100644 index 0000000..38141a1 --- /dev/null +++ b/services/liquid-auth-api-js/src/signals/signals.interceptor.ts @@ -0,0 +1,27 @@ +import { + CallHandler, + ExecutionContext, + Injectable, + Logger, + NestInterceptor, +} from '@nestjs/common'; +import { Observable } from 'rxjs'; +import { Socket } from 'socket.io'; + +@Injectable() +export class SignalsInterceptor implements NestInterceptor { + private readonly logger = new Logger(SignalsInterceptor.name); + intercept(context: ExecutionContext, next: CallHandler): Observable { + const client = context.switchToWs().getClient() as Socket; + const request = client.request as Record; + const session = request.session as Record; + + if (typeof session.wallet !== 'string') { + this.logger.error(`(*) Client ${request.sessionID} is not authenticated`); + client.disconnect(); + return next.handle(); + } else { + return next.handle(); + } + } +} diff --git a/services/liquid-auth-api-js/src/signals/signals.module.spec.ts b/services/liquid-auth-api-js/src/signals/signals.module.spec.ts new file mode 100644 index 0000000..5309d9b --- /dev/null +++ b/services/liquid-auth-api-js/src/signals/signals.module.spec.ts @@ -0,0 +1,14 @@ +import { SignalsModule } from './signals.module'; +import { SignalsGateway } from './signals.gateway'; +import { Test } from '@nestjs/testing'; + +describe('SignalsModule', () => { + it('should create the module', async () => { + const module = await Test.createTestingModule({ + imports: [SignalsModule], + }).compile(); + + expect(module).toBeDefined(); + expect(module.get(SignalsGateway)).toBeInstanceOf(SignalsGateway); + }); +}); diff --git a/services/liquid-auth-api-js/src/signals/signals.module.ts b/services/liquid-auth-api-js/src/signals/signals.module.ts new file mode 100644 index 0000000..36d094e --- /dev/null +++ b/services/liquid-auth-api-js/src/signals/signals.module.ts @@ -0,0 +1,7 @@ +import { Module } from '@nestjs/common'; +import { SignalsGateway } from './signals.gateway.js'; + +@Module({ + providers: [SignalsGateway], +}) +export class SignalsModule {} diff --git a/services/liquid-auth-api-js/tests/constants.ts b/services/liquid-auth-api-js/tests/constants.ts index 315e917..5c86529 100644 --- a/services/liquid-auth-api-js/tests/constants.ts +++ b/services/liquid-auth-api-js/tests/constants.ts @@ -1,4 +1,4 @@ -import { AlgorandEncoder } from "../src/connect/AlgoEncoder"; +import { decodeAddress } from '@liquid/core/encoding'; export const accFixture = { challenge: '1234', @@ -28,7 +28,7 @@ export const dummyUsers = [ credentials: [ { credId: 0, - publicKey: new AlgorandEncoder().decodeAddress(accFixture.accs[0].addr), + publicKey: decodeAddress(accFixture.accs[0].addr), }, ], }, diff --git a/services/liquid-auth-api-js/tsconfig.json b/services/liquid-auth-api-js/tsconfig.json index 3bb2f4d..e8f4d91 100644 --- a/services/liquid-auth-api-js/tsconfig.json +++ b/services/liquid-auth-api-js/tsconfig.json @@ -1,13 +1,13 @@ { "compilerOptions": { - "module": "ESNext", + "module": "NodeNext", "declaration": true, "removeComments": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "allowSyntheticDefaultImports": true, - "target": "ES2022", - "moduleResolution": "node", + "target": "ESNext", + "moduleResolution": "NodeNext", "sourceMap": true, "outDir": "./dist", "baseUrl": "./", @@ -21,6 +21,8 @@ "preserveValueImports": false, "inlineSources": true, "resolveJsonModule": true, + "allowJs": true, + "esModuleInterop": true, // Set `sourceRoot` to "/" to strip the build path prefix // from generated source code references. // This improves issue grouping in Sentry. diff --git a/sites/dapp-ui/.eslintrc.cjs b/sites/dapp-ui/.eslintrc.cjs index d6c9537..137bb37 100644 --- a/sites/dapp-ui/.eslintrc.cjs +++ b/sites/dapp-ui/.eslintrc.cjs @@ -5,6 +5,7 @@ module.exports = { 'eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:react-hooks/recommended', + 'plugin:prettier/recommended' ], ignorePatterns: ['dist', '.eslintrc.cjs'], parser: '@typescript-eslint/parser', diff --git a/sites/dapp-ui/.prettierrc b/sites/dapp-ui/.prettierrc new file mode 100644 index 0000000..dcb7279 --- /dev/null +++ b/sites/dapp-ui/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "trailingComma": "all" +} \ No newline at end of file diff --git a/sites/dapp-ui/index.html b/sites/dapp-ui/index.html index cc4dc5a..22404e1 100644 --- a/sites/dapp-ui/index.html +++ b/sites/dapp-ui/index.html @@ -2,19 +2,29 @@ - + + - + + + + Liquid dApp +
- + diff --git a/sites/dapp-ui/package.json b/sites/dapp-ui/package.json index 2df94bd..3ccfed0 100644 --- a/sites/dapp-ui/package.json +++ b/sites/dapp-ui/package.json @@ -7,22 +7,23 @@ "license": "MIT", "type": "module", "scripts": { - "dev": "vite build --watch --emptyOutDir", - "dev:no-api": "vite dev", + "dev": "vite dev --host 0.0.0.0", "build": "vite build --emptyOutDir", "lint": "eslint \"{src,apps,libs,test}/**/*.{ts,tsx}\" --fix" }, "dependencies": { - "@liquid/auth-client": "^1.0.0", "@emotion/react": "^11.11.3", "@emotion/server": "^11.11.0", "@emotion/styled": "^11.11.0", + "@liquid/auth-client": "^1.0.0", "@mui/icons-material": "^5.15.4", "@mui/material": "^5.15.4", - "@tanstack/react-query": "^5.17.15", + "@tanstack/react-query": "^5.20.5", + "@tanstack/react-query-devtools": "^5.20.5", "qr-code-styling": "^1.6.0-rc.1", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-router-dom": "^6.22.3", "reflect-metadata": "^0.1.13", "socket.io-client": "^4.7.4", "zustand": "^4.4.7" @@ -34,10 +35,16 @@ "@typescript-eslint/parser": "^6.14.0", "@vitejs/plugin-react-swc": "^3.5.0", "eslint": "^8.55.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.5", "mkdirp": "^3.0.1", + "sharp": "^0.33.2", + "svgo": "^3.2.0", "typescript": "^5.2.2", - "vite": "^5.0.8" + "vite": "^5.0.8", + "vite-plugin-image-optimizer": "^1.1.7", + "vite-plugin-pwa": "^0.18.1" } } diff --git a/sites/dapp-ui/public/apple-touch-icon.png b/sites/dapp-ui/public/apple-touch-icon.png new file mode 100644 index 0000000..e64df37 Binary files /dev/null and b/sites/dapp-ui/public/apple-touch-icon.png differ diff --git a/sites/dapp-ui/public/hero-1.webp b/sites/dapp-ui/public/hero-1.webp new file mode 100644 index 0000000..aff49be Binary files /dev/null and b/sites/dapp-ui/public/hero-1.webp differ diff --git a/sites/dapp-ui/public/hero-2.webp b/sites/dapp-ui/public/hero-2.webp new file mode 100644 index 0000000..18258a2 Binary files /dev/null and b/sites/dapp-ui/public/hero-2.webp differ diff --git a/sites/dapp-ui/public/hero-3.webp b/sites/dapp-ui/public/hero-3.webp new file mode 100644 index 0000000..4dbba34 Binary files /dev/null and b/sites/dapp-ui/public/hero-3.webp differ diff --git a/sites/dapp-ui/public/icons/144x144.png b/sites/dapp-ui/public/icons/144x144.png new file mode 100644 index 0000000..874b4f4 Binary files /dev/null and b/sites/dapp-ui/public/icons/144x144.png differ diff --git a/sites/dapp-ui/public/icons/192x192.png b/sites/dapp-ui/public/icons/192x192.png new file mode 100644 index 0000000..b7e54c8 Binary files /dev/null and b/sites/dapp-ui/public/icons/192x192.png differ diff --git a/sites/dapp-ui/public/icons/48x48.png b/sites/dapp-ui/public/icons/48x48.png new file mode 100644 index 0000000..dc48390 Binary files /dev/null and b/sites/dapp-ui/public/icons/48x48.png differ diff --git a/sites/dapp-ui/public/icons/512x512.png b/sites/dapp-ui/public/icons/512x512.png new file mode 100644 index 0000000..a625ff2 Binary files /dev/null and b/sites/dapp-ui/public/icons/512x512.png differ diff --git a/sites/dapp-ui/public/icons/72x72.png b/sites/dapp-ui/public/icons/72x72.png new file mode 100644 index 0000000..37848ba Binary files /dev/null and b/sites/dapp-ui/public/icons/72x72.png differ diff --git a/sites/dapp-ui/public/icons/96x96.png b/sites/dapp-ui/public/icons/96x96.png new file mode 100644 index 0000000..9848cb0 Binary files /dev/null and b/sites/dapp-ui/public/icons/96x96.png differ diff --git a/sites/dapp-ui/public/logo-background.svg b/sites/dapp-ui/public/logo-background.svg new file mode 100644 index 0000000..d0e90d1 --- /dev/null +++ b/sites/dapp-ui/public/logo-background.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/sites/dapp-ui/public/logo-inverted.png b/sites/dapp-ui/public/logo-inverted.png new file mode 100644 index 0000000..ec17500 Binary files /dev/null and b/sites/dapp-ui/public/logo-inverted.png differ diff --git a/sites/dapp-ui/public/logo.svg b/sites/dapp-ui/public/logo.svg new file mode 100644 index 0000000..38949fc --- /dev/null +++ b/sites/dapp-ui/public/logo.svg @@ -0,0 +1,3 @@ + + + diff --git a/sites/dapp-ui/public/maskable-icon.png b/sites/dapp-ui/public/maskable-icon.png new file mode 100644 index 0000000..948a48c Binary files /dev/null and b/sites/dapp-ui/public/maskable-icon.png differ diff --git a/sites/dapp-ui/public/waves_left.svg b/sites/dapp-ui/public/waves_left.svg new file mode 100644 index 0000000..3fb7519 --- /dev/null +++ b/sites/dapp-ui/public/waves_left.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/sites/dapp-ui/public/waves_right.svg b/sites/dapp-ui/public/waves_right.svg new file mode 100644 index 0000000..bc27739 --- /dev/null +++ b/sites/dapp-ui/public/waves_right.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/sites/dapp-ui/src/App.tsx b/sites/dapp-ui/src/App.tsx index aa987f9..f324aa2 100644 --- a/sites/dapp-ui/src/App.tsx +++ b/sites/dapp-ui/src/App.tsx @@ -1,70 +1,135 @@ -import { useContext, ReactElement, useState, useMemo } from 'react'; +import { useState, useMemo, useEffect } from 'react'; -import { ColorModeContext, StateContext } from './Contexts'; +import { ColorModeContext } from './Contexts'; import Layout from './Layout'; - -import { GetStartedCard } from './pages/home/GetStarted'; -import { WaitForRegistrationCard } from './pages/dashboard/WaitForRegistration'; -import { RegisteredCard } from './pages/dashboard/Registered'; import { createTheme, CssBaseline } from '@mui/material'; import { DEFAULT_THEME } from './theme.tsx'; import { QueryClientProvider, QueryClient } from '@tanstack/react-query'; import { ThemeProvider } from '@emotion/react'; +import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; -const queryClient = new QueryClient() +import { createHashRouter, RouterProvider } from 'react-router-dom'; +import { HomePage, ConnectedPage } from '@/pages'; +import { Algodv2 } from 'algosdk'; +import { AlgodContext } from '@/hooks'; +import { SignalClientContext } from '@/hooks/useSignalClient.ts'; +import { LinkMessage, SignalClient } from '@liquid/auth-client/signal'; +const queryClient = new QueryClient(); -export default function ProviderApp(){ - const [state, setState] = useState('start') +const algod = new Algodv2( + import.meta.env.VITE_ALGOD_TOKEN || '', + import.meta.env.VITE_ALGOD_SERVER || 'https://testnet-api.algonode.cloud', + import.meta.env.VITE_ALGOD_PORT || 443, +); - const [mode, setMode] = useState<'light' | 'dark'>(window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)') ? 'dark' : 'light'); - const colorMode = useMemo( - () => ({ - toggle: () => { - setMode((prevMode) => (prevMode === 'light' ? 'dark' : 'light')); - }, - }), - [], - ); +const router = createHashRouter([ + { + path: '/', + element: ( + + + + ), + }, + { + path: '/connected', + element: ( + + + + ), + }, +]); +export default function ProviderApp() { + const [dataChannel, setDataChannel] = useState(null); - const theme = useMemo( - () => - createTheme({ - ...DEFAULT_THEME, - palette: { - ...DEFAULT_THEME.palette, - mode, - }, - }), - [mode], - ); - return ( - - - - - - - - - - - ) -} + const [mode, setMode] = useState<'light' | 'dark'>( + window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)') + ? 'dark' + : 'light', + ); + const colorMode = useMemo( + () => ({ + toggle: () => { + setMode((prevMode) => (prevMode === 'light' ? 'dark' : 'light')); + }, + }), + [], + ); -export function App() { - const { state } = useContext(StateContext); + const theme = useMemo( + () => + createTheme({ + ...DEFAULT_THEME, + palette: + mode === 'dark' + ? { + primary: { main: '#9966ff' }, + mode: 'dark', + } + : { ...DEFAULT_THEME.palette }, + }), + [mode], + ); - // Authentication Steps - const STATES: { [k: string]: () => ReactElement } = { - 'start': GetStartedCard, - 'connected': WaitForRegistrationCard, - 'registered': RegisteredCard, - }; - const Content = STATES[state]; + const [client, setClient] = useState( + new SignalClient(window.origin), + ); + const [status, setStatus] = useState<'connected' | 'disconnected'>( + 'disconnected', + ); + useEffect(() => { + if (!client) return; + function handleDataChannel(dc: RTCDataChannel) { + console.log('SignalClient datachannel', dc); + setDataChannel(dc); + } + client.on('data-channel', handleDataChannel); + function handleSocketConnect() { + console.log('Socket Connect'); + setStatus('connected'); + } + client.on('connect', handleSocketConnect); + function handleLinkMessage(msg: LinkMessage) { + window.localStorage.setItem('wallet', JSON.stringify(msg.wallet)); + } + client.on('link-message', handleLinkMessage); + function handleSocketDisconnect() { + console.log('Socket Disconnect'); + setStatus('disconnected'); + } + client.on('disconnect', handleSocketDisconnect); + return () => { + console.log('removing emitters'); + client.off('link-message', handleLinkMessage); + client.off('data-channel', handleDataChannel); + client.off('connect', handleSocketConnect); + client.off('disconnect', handleSocketDisconnect); + }; + }, [client]); return ( - - - + + + + + + + + + + + + + ); } diff --git a/sites/dapp-ui/src/Contexts.tsx b/sites/dapp-ui/src/Contexts.tsx index d4c64a7..8406aaf 100644 --- a/sites/dapp-ui/src/Contexts.tsx +++ b/sites/dapp-ui/src/Contexts.tsx @@ -1,5 +1,4 @@ -import {createContext} from "react"; +import { createContext } from 'react'; -export const ColorModeContext = createContext({toggle: () => {}}); - -export const StateContext = createContext({state: 'start', setState: (_: string) => {}}); +export const ColorModeContext = createContext({ toggle: () => {} }); +export { SignalClientContext } from './hooks/useSignalClient.ts'; diff --git a/sites/dapp-ui/src/Layout.tsx b/sites/dapp-ui/src/Layout.tsx index 3157474..a8fb89a 100644 --- a/sites/dapp-ui/src/Layout.tsx +++ b/sites/dapp-ui/src/Layout.tsx @@ -4,78 +4,98 @@ import AppBar from '@mui/material/AppBar'; import Box from '@mui/material/Box'; import Toolbar from '@mui/material/Toolbar'; import IconButton from '@mui/material/IconButton'; -import {Avatar, Badge, useTheme} from '@mui/material'; -import {PropsWithChildren, useContext} from 'react'; +import { useTheme } from '@mui/material'; +import { PropsWithChildren, useContext } from 'react'; import Brightness4Icon from '@mui/icons-material/Brightness4'; import Brightness7Icon from '@mui/icons-material/Brightness7'; -import { ColorModeContext, StateContext } from './Contexts'; +import { ColorModeContext } from './Contexts'; import NavigateBeforeIcon from '@mui/icons-material/NavigateBefore'; import NavigateNextIcon from '@mui/icons-material/NavigateNext'; -import { useSocket } from './hooks/useSocket'; - -export default function Layout({children}: PropsWithChildren) { - const {state, setState} = useContext(StateContext) - const colorMode = useContext(ColorModeContext) - const theme = useTheme() - const isDarkMode = theme.palette.mode === 'dark' +import { SessionMenu } from './components/user/SessionMenu.tsx'; +import { useLocation, useNavigate } from 'react-router-dom'; +import { useSignalClient } from '@/hooks/useSignalClient.ts'; +export default function Layout({ children }: PropsWithChildren) { + const { dataChannel } = useSignalClient(); + const location = useLocation(); + const navigate = useNavigate(); + const colorMode = useContext(ColorModeContext); + const theme = useTheme(); + const isDarkMode = theme.palette.mode === 'dark'; const bubbleStyle = { - backgroundColor: isDarkMode ? 'white' : 'black' - } - const {isConnected} = useSocket() + backgroundColor: isDarkMode ? 'white' : 'black', + }; + const breadcrumbs = ['/', '/connected']; + const index = breadcrumbs.indexOf(location.pathname); + console.log(index); return ( - <> - - - - - - - - - Liquid dApp - - { - setState(state === 'registered' ? 'connected' : 'start') - }} aria-label="delete" disabled={state === 'start'} color="inherit"> - - - { - setState(state === 'start' ? 'connected' : 'registered') - }} aria-label="delete" disabled={state === 'registered'} color="inherit"> - - - - {theme.palette.mode === 'dark' ? : } - - - + <> + + + + + Liquid dApp + + { + console.log('navigate to ', breadcrumbs[index - 1]); + index > 0 && navigate(breadcrumbs[index - 1]); + }} + aria-label="delete" + disabled={index === 0} + color="inherit" + > + + + { + index < breadcrumbs.length - 1 && + navigate(breadcrumbs[index + 1]); + }} + aria-label="delete" + disabled={index === breadcrumbs.length - 1 || dataChannel === null} + color="inherit" + > + + + + {theme.palette.mode === 'dark' ? ( + + ) : ( + + )} + + + - - - {children} - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
- + + {children} + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ); } diff --git a/sites/dapp-ui/src/components/ConnectModal.tsx b/sites/dapp-ui/src/components/ConnectModal.tsx new file mode 100644 index 0000000..41f9b66 --- /dev/null +++ b/sites/dapp-ui/src/components/ConnectModal.tsx @@ -0,0 +1,127 @@ +import * as React from 'react'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import Modal from '@mui/material/Modal'; +import { useState } from 'react'; +import { Fade } from '@mui/material'; +import { useNavigate } from 'react-router-dom'; +import { useSignalClient } from '@/hooks/useSignalClient.ts'; +import { SignalClient } from '@liquid/auth-client/signal'; +const style = { + position: 'absolute' as const, + top: '50%', + left: '50%', + transform: 'translate(-50%, -50%)', + bgcolor: 'background.paper', + background: + 'linear-gradient(to right, rgba(248,80,50,1) 0%, rgba(241,111,92,1) 50%, rgba(246,41,12,1) 51%, rgba(240,47,23,1) 71%, rgba(231,56,39,1) 100%)', + border: '2px solid #000', + boxShadow: 24, +}; + +/** + * Connect Modal + * @param color + * @todo: Make into a component that can be used in providers + */ +export function ConnectModal({ + color, +}: { + color?: + | 'inherit' + | 'primary' + | 'secondary' + | 'success' + | 'error' + | 'info' + | 'warning'; +}) { + const { client, dataChannel } = useSignalClient(); + const navigate = useNavigate(); + const [requestId] = useState(SignalClient.generateRequestId()); + + const [open, setOpen] = React.useState(false); + const [barcode, setBarcode] = React.useState('/qr-loading.png'); + + const handleOpen = async () => { + setBarcode('/qr-loading.png'); + client.once('data-channel', () => { + navigate('/connected'); + }); + client + .peer(requestId, 'offer', { + iceServers: [ + { + urls: [ + 'stun:stun.l.google.com:19302', + 'stun:stun1.l.google.com:19302', + 'stun:stun2.l.google.com:19302', + ], + }, + ], + iceCandidatePoolSize: 10, + }) + .catch((e) => { + console.error(e); + client.close(); + setOpen(false); + }); + setBarcode(await client.qrCode()); + setOpen(true); + }; + const handleClose = () => setOpen(false); + const hasDataChannel = + (dataChannel && dataChannel?.readyState === 'open') || false; + return ( +
+ + + + + + + + + + + + +
+ ); +} diff --git a/sites/dapp-ui/src/components/user/SessionMenu.tsx b/sites/dapp-ui/src/components/user/SessionMenu.tsx new file mode 100644 index 0000000..a6d97ec --- /dev/null +++ b/sites/dapp-ui/src/components/user/SessionMenu.tsx @@ -0,0 +1,84 @@ +import { Avatar, Badge, CircularProgress, Menu } from '@mui/material'; +import IconButton from '@mui/material/IconButton'; +import React, { useEffect, useState } from 'react'; +import { useUserState } from '@/hooks/useUserState.ts'; +import { StatusCard } from './StatusCard.tsx'; +import { useSignalClient } from '@/hooks/useSignalClient.ts'; + +export function SessionMenu() { + const state = useUserState(); + const { status, dataChannel } = useSignalClient(); + const hasDataChannel = !!dataChannel && dataChannel.readyState === 'open'; + const isConnected = status === 'connected'; + const [badgeColor, setBadgeColor] = useState<'error' | 'success' | 'warning'>( + 'error', + ); + const [anchorEl, setAnchorEl] = useState(null); + const open = Boolean(anchorEl); + const handleClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + const handleClose = () => { + setAnchorEl(null); + }; + + // Update badge color based on connection status + useEffect(() => { + if (isConnected && hasDataChannel) { + setBadgeColor('success'); + } + if (isConnected && !hasDataChannel) { + setBadgeColor('warning'); + } + }, [dataChannel, isConnected]); + + return ( + <> + + + + + + + {state.isLoading && } + {state.isFetched && ( + + )} + + + ); +} diff --git a/sites/dapp-ui/src/components/user/StatusCard.tsx b/sites/dapp-ui/src/components/user/StatusCard.tsx new file mode 100644 index 0000000..5ef0b93 --- /dev/null +++ b/sites/dapp-ui/src/components/user/StatusCard.tsx @@ -0,0 +1,63 @@ +import Card from '@mui/material/Card'; +import CardActions from '@mui/material/CardActions'; +import CardContent from '@mui/material/CardContent'; +import IconButton from '@mui/material/IconButton'; +import Typography from '@mui/material/Typography'; +import ShareIcon from '@mui/icons-material/Share'; +import LogoutIcon from '@mui/icons-material/Logout'; +import { User } from './types.ts'; +export type ProfileCardProps = { + socket: { + isConnected: boolean; + hasDataChannel: boolean; + }; + session: { + wallet?: string; + connected?: boolean; + active?: boolean; + cookie: { + expires: string | null; + httpOnly: boolean; + originalMaxAge: number | null; + path: string; + secure: boolean; + }; + }; + user: User | null; +}; +export function StatusCard({ session, user, socket }: ProfileCardProps) { + const { cookie, ...sessionData } = session; + return ( + + + + Session + +
{JSON.stringify(sessionData, null, 2)}
+ + Signaling Service + +
{JSON.stringify(socket, null, 2)}
+ + Cookie + +
{JSON.stringify(cookie, null, 2)}
+
+ {user && ( + + { + fetch('/auth/logout'); + }} + > + + + + + + + )} +
+ ); +} diff --git a/sites/dapp-ui/src/components/user/types.ts b/sites/dapp-ui/src/components/user/types.ts new file mode 100644 index 0000000..953d284 --- /dev/null +++ b/sites/dapp-ui/src/components/user/types.ts @@ -0,0 +1,11 @@ +export type CredentialMetadata = { + device: string; + publicKey: string; + credId: string; + prevCounter: number; +}; +export type User = { + wallet: string; + id: string; + credentials: CredentialMetadata[]; +}; diff --git a/sites/dapp-ui/src/entry-main.tsx b/sites/dapp-ui/src/entry-main.tsx index 56eeefe..f6db3f5 100644 --- a/sites/dapp-ui/src/entry-main.tsx +++ b/sites/dapp-ui/src/entry-main.tsx @@ -1,11 +1,10 @@ -import './index.css' +import './index.css'; import * as ReactDOM from 'react-dom/client'; -import {StrictMode} from 'react'; -import App from './App.tsx' - +// import { StrictMode } from 'react'; +import App from './App.tsx'; ReactDOM.createRoot(document.getElementById('root')!).render( - - - , + // + , + // , ); diff --git a/sites/dapp-ui/src/hooks/index.ts b/sites/dapp-ui/src/hooks/index.ts new file mode 100644 index 0000000..dc662d7 --- /dev/null +++ b/sites/dapp-ui/src/hooks/index.ts @@ -0,0 +1,5 @@ +export * from './useAccountInfo'; +export * from './useAddress'; +export * from './useAlgod'; +export * from './useDataChannel'; +export * from './useUserState'; diff --git a/sites/dapp-ui/src/hooks/useAccountInfo.ts b/sites/dapp-ui/src/hooks/useAccountInfo.ts new file mode 100644 index 0000000..43242d5 --- /dev/null +++ b/sites/dapp-ui/src/hooks/useAccountInfo.ts @@ -0,0 +1,18 @@ +import { useQuery } from '@tanstack/react-query'; +import { useAlgod } from './useAlgod.ts'; + +export function useAccountInfo( + address: string | null, + refetchInterval?: number, +) { + const algod = useAlgod(); + return useQuery({ + refetchInterval, + queryKey: ['accountInfo', address], + queryFn: async () => { + if (!algod || !address) return; + return await algod.accountInformation(address).do(); + }, + enabled: !!algod && !!address, + }); +} diff --git a/sites/dapp-ui/src/hooks/useAddress.ts b/sites/dapp-ui/src/hooks/useAddress.ts index a498c94..24ba4f0 100644 --- a/sites/dapp-ui/src/hooks/useAddress.ts +++ b/sites/dapp-ui/src/hooks/useAddress.ts @@ -1,24 +1,32 @@ import { useMediaQuery, useTheme } from '@mui/material'; import { useQuery } from '@tanstack/react-query'; -export function useAddressQuery(address?: string){ +export function useAddressQuery(address?: string) { const theme = useTheme(); - const greaterThanMid = useMediaQuery(theme.breakpoints.up("md")); + const greaterThanMid = useMediaQuery(theme.breakpoints.up('md')); - return useQuery({ queryKey: [address], queryFn: ()=>{ - if(typeof address === 'undefined'){ - return address - } - return fetch(`https://api.nf.domains/nfd/lookup?address=${address}&view=tiny&allowUnverified=true`).then(async (r)=>{ - if(r.ok){ - const data= await r.json() - return data[address].name - }else{ - if(r.status === 404){ - return greaterThanMid ? address : `${address.slice(0, 5)}...${address.slice(-5)}` - } - throw new Error('Failed to fetch address') + return useQuery({ + enabled: typeof address === 'string', + queryKey: ['nfd-lookup'], + queryFn: () => { + if (typeof address === 'undefined') { + return; } - }) - }}) + return fetch( + `https://api.nf.domains/nfd/lookup?address=${address}&view=tiny&allowUnverified=true`, + ).then(async (r) => { + if (r.ok) { + const data = await r.json(); + return data[address].name; + } else { + if (r.status === 404) { + return greaterThanMid + ? address + : `${address.slice(0, 5)}...${address.slice(-5)}`; + } + throw new Error('Failed to fetch address'); + } + }); + }, + }); } diff --git a/sites/dapp-ui/src/hooks/useAlgod.ts b/sites/dapp-ui/src/hooks/useAlgod.ts new file mode 100644 index 0000000..ea66f1a --- /dev/null +++ b/sites/dapp-ui/src/hooks/useAlgod.ts @@ -0,0 +1,16 @@ +import { createContext, useContext } from 'react'; +import { Algodv2 } from 'algosdk'; + +type AlgodState = { algod: Algodv2 | null }; +export const AlgodContext = createContext({ + algod: null, +} as AlgodState); + +export function useAlgod() { + const { algod } = useContext(AlgodContext); + if (!algod) + throw new Error( + 'Algod not found, make sure it is provided in the context.', + ); + return algod; +} diff --git a/sites/dapp-ui/src/hooks/useDataChannel.ts b/sites/dapp-ui/src/hooks/useDataChannel.ts new file mode 100644 index 0000000..3d37cd4 --- /dev/null +++ b/sites/dapp-ui/src/hooks/useDataChannel.ts @@ -0,0 +1,19 @@ +import { useContext, useEffect } from 'react'; +import { SignalClientContext } from '@/hooks/useSignalClient.ts'; + +/** + * Hook to use data channel messages + * @param onMessage + */ +export function useDataChannel(onMessage?: (event: MessageEvent) => void) { + const { dataChannel } = useContext(SignalClientContext); + useEffect(() => { + if (!dataChannel || !onMessage) return; + dataChannel.addEventListener('message', onMessage); + return () => { + dataChannel.removeEventListener('message', onMessage); + }; + }, [dataChannel, onMessage]); + + return dataChannel; +} diff --git a/sites/dapp-ui/src/hooks/useSignalClient.ts b/sites/dapp-ui/src/hooks/useSignalClient.ts new file mode 100644 index 0000000..7d1cf3d --- /dev/null +++ b/sites/dapp-ui/src/hooks/useSignalClient.ts @@ -0,0 +1,34 @@ +import { createContext, useContext } from 'react'; +import { SignalClient } from '@liquid/auth-client/signal'; + +type SignalClientState = { + client: SignalClient | null; + setClient: (_: SignalClient) => void; + status: 'connected' | 'disconnected'; + setStatus: (_: 'connected' | 'disconnected') => void; + dataChannel: RTCDataChannel | null; + setDataChannel: (_: RTCDataChannel) => void; +}; +export const SignalClientContext = createContext({ + client: null, + setClient: (_: SignalClient) => { + console.log(_); + }, + status: 'disconnected', + setStatus: (_: 'connected' | 'disconnected') => { + console.log(_); + }, + dataChannel: null, + setDataChannel: (_: RTCDataChannel) => { + console.log(_); + }, +} as SignalClientState); + +export function useSignalClient() { + const { client, status, dataChannel } = useContext(SignalClientContext); + if (!client) + throw new Error( + 'SignalClient not found, make sure to wrap your component with ', + ); + return { client, status, dataChannel }; +} diff --git a/sites/dapp-ui/src/hooks/useSocket.ts b/sites/dapp-ui/src/hooks/useSocket.ts deleted file mode 100644 index 0d6c228..0000000 --- a/sites/dapp-ui/src/hooks/useSocket.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { io } from 'socket.io-client'; -import { useEffect, useState } from 'react'; - -// "undefined" means the URL will be computed from the `window.location` object -const URL = process.env.NODE_ENV === 'production' ? undefined : `${window.location.origin}`; - -export const socket = io(URL); - -export function useSocket(){ - - const [isConnected, setIsConnected] = useState(socket.connected); - - useEffect(() => { - function onConnect() { - console.log('Connected') - setIsConnected(true); - } - - function onDisconnect() { - console.log('Disconnected') - setIsConnected(false); - } - socket.on('connect', onConnect); - socket.on('disconnect', onDisconnect); - - return () => { - socket.off('connect', onConnect); - socket.off('disconnect', onDisconnect); - }; - }, []); - - return { isConnected, socket} -} diff --git a/sites/dapp-ui/src/hooks/useUserState.ts b/sites/dapp-ui/src/hooks/useUserState.ts new file mode 100644 index 0000000..a3c7bc9 --- /dev/null +++ b/sites/dapp-ui/src/hooks/useUserState.ts @@ -0,0 +1,17 @@ +import { useQuery } from '@tanstack/react-query'; + +export function useUserState() { + return useQuery({ + refetchInterval: 3000, + queryKey: ['auth-session'], + queryFn: () => + fetch('/auth/session').then(async (res) => { + const state = await res.json(); + const wallet = window.localStorage.getItem('wallet'); + if (wallet && typeof state?.user?.wallet === 'undefined') { + window.localStorage.removeItem('wallet'); + } + return state; + }), + }); +} diff --git a/sites/dapp-ui/src/pages/connected.tsx b/sites/dapp-ui/src/pages/connected.tsx new file mode 100644 index 0000000..618db43 --- /dev/null +++ b/sites/dapp-ui/src/pages/connected.tsx @@ -0,0 +1,170 @@ +import { useDataChannel } from '@/hooks/useDataChannel.ts'; +import { useEffect, useState } from 'react'; +import Button from '@mui/material/Button'; +import { + Transaction, + encodeUnsignedTransaction, + waitForConfirmation, + makePaymentTxnWithSuggestedParamsFromObject, +} from 'algosdk'; +import { toBase64URL, fromBase64Url } from '@liquid/core/encoding'; +import { useAlgod } from '@/hooks/useAlgod.ts'; +import { useAccountInfo } from '@/hooks/useAccountInfo.ts'; +import FormControl from '@mui/material/FormControl'; +import { Box, CircularProgress, Input, Slider } from '@mui/material'; +import Typography from '@mui/material/Typography'; +import { useMessageStore } from '../store.ts'; +import { useNavigate } from 'react-router-dom'; + +export function ConnectedPage() { + const navigate = useNavigate(); + const algod = useAlgod(); + const walletStr = window.localStorage.getItem('wallet'); + const wallet = walletStr ? JSON.parse(walletStr) : null; + const [txn, setTxn] = useState(null); + // const datachannel = useDataChannel('remote', peerConnection); + const accountInfo = useAccountInfo(wallet, 3000); + const [from, setFrom] = useState(wallet); + const [to, setTo] = useState(wallet); + const [amount, setAmount] = useState(0); + + const [isWaitingForSignature, setIsWaitingForSignature] = useState(false); + const [isWaitingForConfirmation, setIsWaitingForConfirmation] = + useState(false); + const addMessage = useMessageStore((state) => state.addMessage); + const messages = useMessageStore((state) => state.messages); + // Receive response + const datachannel = useDataChannel((event) => { + console.log(event.data); + addMessage({ + type: 'remote', + data: JSON.parse(event.data), + timestamp: Date.now(), + }); + if (!txn) return; + async function handleMessage() { + if (!txn) return; + const message = JSON.parse(event.data); + if (message.type !== 'transaction-signature') return; + + if (txn.txID() !== message.txId) throw new Error('Invalid txId'); + + const sig = fromBase64Url(message.sig); + const signedTxn = txn.attachSignature(wallet, sig); + + setIsWaitingForSignature(false); + setIsWaitingForConfirmation(true); + const { txId } = await algod.sendRawTransaction(signedTxn).do(); + await waitForConfirmation(algod, txId, 4); + setIsWaitingForConfirmation(false); + } + handleMessage(); + }); + + // Send Transaction + useEffect(() => { + if ( + !txn || + !datachannel || + isWaitingForSignature || + isWaitingForConfirmation + ) + return; + const txnMessage = { + type: 'transaction', + txn: toBase64URL(encodeUnsignedTransaction(txn)), + }; + addMessage({ type: 'local', data: txnMessage, timestamp: Date.now() }); + datachannel?.send(JSON.stringify(txnMessage)); + setIsWaitingForSignature(true); + }, [txn, datachannel, isWaitingForSignature]); + + useEffect(() => { + if (!datachannel) navigate('/'); + }, [datachannel]); + + if (accountInfo.data && accountInfo.data.amount === 0) { + return ( + +

Account has no funds

+

{accountInfo.data.address}

+
{JSON.stringify(accountInfo.data, null, 2)}
+
+ ); + } + if (isWaitingForSignature || isWaitingForConfirmation) { + return ( + +

+ Waiting for {isWaitingForConfirmation ? 'Confirmation' : 'Signature'} +

+ +
+ ); + } + return ( + + + Send Payment Transaction + + From + setFrom(e.target.value)} + /> + + + To + setTo(e.target.value)} + /> + + + + Amount (in microalgos) + + setAmount(value as number)} + /> + + + + + + Messages + + {messages.map((message, i) => ( + +
{JSON.stringify(message, null, 2)}
+
+ ))} +
+ ); +} diff --git a/sites/dapp-ui/src/pages/dashboard/Registered.tsx b/sites/dapp-ui/src/pages/dashboard/Registered.tsx deleted file mode 100644 index 68ffab5..0000000 --- a/sites/dapp-ui/src/pages/dashboard/Registered.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import CardMedia from "@mui/material/CardMedia"; -import CardContent from "@mui/material/CardContent"; -import Typography from "@mui/material/Typography"; -import CardActions from "@mui/material/CardActions"; -import Button from "@mui/material/Button"; -import Card from "@mui/material/Card"; -import { assertion } from '@liquid/auth-client/assertion'; -import { Table, TableBody, TableCell, TableHead, TableRow } from '@mui/material'; -import { useCredentialStore } from '../../store'; - - -export function RegisteredCard(){ - const credentials = useCredentialStore((state)=> state.addresses); - const handleTestCredentialClick = () => { - const credId = window.localStorage.getItem('credId'); - if(!credId) return - assertion(credId); - } - return ( - - - - - Registered (3 of 3) - - - Mobile Device is Connected and Registered - - - - - Address - Actions - - - - {Object.keys(credentials).map((address) => ( - - - {address.slice(0, 5)}...{address.slice(-5)} - - - - ))} - -
-
- - - -
- ) -} diff --git a/sites/dapp-ui/src/pages/dashboard/WaitForRegistration.tsx b/sites/dapp-ui/src/pages/dashboard/WaitForRegistration.tsx deleted file mode 100644 index 6a1bd59..0000000 --- a/sites/dapp-ui/src/pages/dashboard/WaitForRegistration.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import CardMedia from "@mui/material/CardMedia"; -import CardContent from "@mui/material/CardContent"; -import Typography from "@mui/material/Typography"; -import Card from "@mui/material/Card"; -import { CircularProgress } from '@mui/material'; -import { useContext, useEffect } from 'react'; -import {useSocket} from '../../hooks/useSocket'; -import { StateContext } from '../../Contexts'; -import { useCredentialStore } from '../../store'; -import { useAddressQuery } from '../../hooks/useAddress'; - -export function WaitForRegistrationCard(){ - const credentials = useCredentialStore((state)=> state.addresses); - const save = useCredentialStore((state)=> state.update); - const {state: step, setState} = useContext(StateContext) - const walletStr = window.localStorage.getItem('wallet'); - const wallet = walletStr ? JSON.parse(walletStr) : null; - const {socket} = useSocket(); - const address = useAddressQuery(wallet); - - useEffect(() => { - if(step !== 'connected'){ - return - } - socket.emit('wait', { wallet }, async ({data: {credId, device}}: {data: {credId: string, device: string}}) => { - save({name: wallet, credentials: [...credentials[wallet].credentials, {id: credId, device}]}); - window.localStorage.setItem('credId', credId); - setState('registered') - }); - }, []) - return ( - - - - - Connected (2 of 3) - - - Waiting for Passkey registration for address: - - {address.isLoading && } - {address.isFetched && {address.data}} - - - ) -} diff --git a/sites/dapp-ui/src/pages/home.tsx b/sites/dapp-ui/src/pages/home.tsx new file mode 100644 index 0000000..c11dff3 --- /dev/null +++ b/sites/dapp-ui/src/pages/home.tsx @@ -0,0 +1,57 @@ +import CardMedia from '@mui/material/CardMedia'; +import CardContent from '@mui/material/CardContent'; +import Typography from '@mui/material/Typography'; +import CardActions from '@mui/material/CardActions'; +import Card from '@mui/material/Card'; +import Button from '@mui/material/Button'; + +import { useNavigate } from 'react-router-dom'; +import { ConnectModal } from '@/components/ConnectModal'; +import { assertion } from '@liquid/auth-client/assertion'; + +export function HomePage() { + const credId = window.localStorage.getItem('credId'); + const navigate = useNavigate(); + return ( + + + + + Get Started (1 of 2) + + + Start by connecting a valid wallet, this is the first step in a three + step process. The connecting wallet receives the current website URL + from the QR Code and submits a verification request to the service. + + + + + {credId && ( + + )} + + + ); +} diff --git a/sites/dapp-ui/src/pages/home/ConnectModal.tsx b/sites/dapp-ui/src/pages/home/ConnectModal.tsx deleted file mode 100644 index 5773ef6..0000000 --- a/sites/dapp-ui/src/pages/home/ConnectModal.tsx +++ /dev/null @@ -1,160 +0,0 @@ -import * as React from 'react'; -import Box from '@mui/material/Box'; -import Button from '@mui/material/Button'; -import Modal from '@mui/material/Modal'; -import {toBase64URL} from "@liquid/auth-client/encoding"; -import { Message } from '@liquid/auth-client/connect'; -import QRCodeStyling, {Options} from "qr-code-styling"; -import { useContext, useEffect, useState } from 'react'; -import {Fade} from "@mui/material"; -import {useSocket} from '../../hooks/useSocket'; -import nacl from 'tweetnacl'; -import { StateContext } from '../../Contexts'; -import { useCredentialStore, Credential } from '../../store'; - -const style = { - position: 'absolute' as const, - top: '50%', - left: '50%', - transform: 'translate(-50%, -50%)', - bgcolor: 'background.paper', - background: "linear-gradient(to right, rgba(248,80,50,1) 0%, rgba(241,111,92,1) 50%, rgba(246,41,12,1) 51%, rgba(240,47,23,1) 71%, rgba(231,56,39,1) 100%)", - border: '2px solid #000', - boxShadow: 24, -}; - -export function ConnectModal({color}: {color?: 'inherit' | 'primary' | 'secondary' | 'success' | 'error' | 'info' | 'warning'}) { - const {socket} = useSocket(); - const credentials = useCredentialStore((state)=> state.addresses); - const save = useCredentialStore((state)=> state.update); - const {state: step, setState} = useContext(StateContext) - const [state] = useState({ - requestId: Math.random(), - challenge: toBase64URL(nacl.randomBytes(nacl.sign.seedLength)) - }) - const qrOpts = { - "width": 500, - "height": 500, - "data": "algorand://", - "margin": 25, - "imageOptions": {"hideBackgroundDots": true, "imageSize": 0.4, "margin": 15}, - "dotsOptions": { - "type": "extra-rounded", - "gradient": { - "type": "radial", - "rotation": 0, - "colorStops": [{"offset": 0, "color": "#9966ff"}, {"offset": 1, "color": "#332257"}] - } - }, - "backgroundOptions": {"color": "#ffffff", "gradient": null}, - "image": "/logo.png", - "cornersSquareOptions": { - "type": "", - "color": "#000000", - "gradient": { - "type": "linear", - "rotation": 0, - "colorStops": [{"offset": 0, "color": "#332257"}, {"offset": 1, "color": "#040908"}] - } - }, - "cornersDotOptions": { - "type": "dot", - "color": "#000000", - "gradient": { - "type": "linear", - "rotation": 0, - "colorStops": [{"offset": 0, "color": "#000000"}, {"offset": 1, "color": "#000000"}] - } - } - } - useEffect(() => { - if(step !== 'start'){ - return - } - socket.emit('link', { requestId: state.requestId }, async ({data}: {data: {credId?: string, requestId: string|number, wallet: string}}) => { - console.log('On Link response'); - console.log(data) - let newCredentials: Credential[] = [] - if(typeof credentials[data.wallet] !== 'undefined'){ - newCredentials = credentials[data.wallet].credentials - } - save({name: data.wallet, credentials: [...newCredentials]}) - window.localStorage.setItem('wallet', JSON.stringify(data.wallet)); - if(typeof data.credId !== 'undefined'){ - console.log(data.credId) - window.localStorage.setItem('credId', data.credId); - setState('registered') - } else { - setState('connected') - } - - }); - }, []) - - const [open, setOpen] = React.useState(false); - const [barcode, setBarcode] = React.useState("/qr-loading.png") - const handleOpen = () => { - setBarcode("/qr-loading.png") - const message = new Message(window.location.origin, state.challenge, state.requestId) - - // JSON encoding - qrOpts.data = `${message}` - console.log(qrOpts.data) - const qrCode = new QRCodeStyling(qrOpts as unknown as Options) - qrCode.getRawData("png").then((blob) => { - if(!blob) throw TypeError('Could not get qrcode blob') - setBarcode(URL.createObjectURL(blob)) - setOpen(true) - }) - // message.toBarcode({color: {light: "#00000000"}}).then(setBarcode) - setOpen(true) - }; - const handleClose = () => setOpen(false); - - return ( -
- - - - - - - - - - - - - - -
- ); -} diff --git a/sites/dapp-ui/src/pages/home/GetStarted.tsx b/sites/dapp-ui/src/pages/home/GetStarted.tsx deleted file mode 100644 index 5c59b2a..0000000 --- a/sites/dapp-ui/src/pages/home/GetStarted.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import CardMedia from "@mui/material/CardMedia"; -import CardContent from "@mui/material/CardContent"; -import Typography from "@mui/material/Typography"; -import CardActions from "@mui/material/CardActions"; -import Card from '@mui/material/Card'; -import {ConnectModal} from "./ConnectModal"; -export function GetStartedCard(){ - return ( - - - - - Get Started (1 of 3) - - - Start by connecting a valid wallet, this is the first step in a three step process. The connecting - wallet receives the current website URL from the QR Code and submits a verification request to the service. - - - - - - - ) -} diff --git a/sites/dapp-ui/src/pages/index.ts b/sites/dapp-ui/src/pages/index.ts new file mode 100644 index 0000000..229a7de --- /dev/null +++ b/sites/dapp-ui/src/pages/index.ts @@ -0,0 +1,2 @@ +export * from './connected.tsx'; +export * from './home.tsx'; diff --git a/sites/dapp-ui/src/store.ts b/sites/dapp-ui/src/store.ts index 7a9a08c..2f742e5 100644 --- a/sites/dapp-ui/src/store.ts +++ b/sites/dapp-ui/src/store.ts @@ -2,40 +2,77 @@ import { create, StateCreator } from 'zustand'; import { createJSONStorage, persist, PersistOptions } from 'zustand/middleware'; export type Credential = { - id: string, - device: string, -} + id: string; + device: string; +}; export type Address = { - name: string, - credentials: Credential[] -} + name: string; + credentials: Credential[]; +}; export type Addresses = { - [k: string]: Address -} + [k: string]: Address; +}; export type CredentialStore = { - addresses: Addresses, - update: (address: Address) => void, - remove: (address: Address) => void, -} + addresses: Addresses; + update: (address: Address) => void; + remove: (address: Address) => void; +}; type PersistCredentials = ( config: StateCreator, - options: PersistOptions -) => StateCreator + options: PersistOptions, +) => StateCreator; export const useCredentialStore = create( (persist as PersistCredentials)( (set, get) => ({ addresses: {}, - update: (address) => set(() => ({ addresses: { ...get().addresses, [address.name]: address } })), - remove: (address) => set(() => { - const addresses = { ...get().addresses }; - delete addresses[address.name]; - return { addresses }; - }), + update: (address) => + set(() => ({ + addresses: { ...get().addresses, [address.name]: address }, + })), + remove: (address) => + set(() => { + const addresses = { ...get().addresses }; + delete addresses[address.name]; + return { addresses }; + }), }), - { name: 'avicennia-credential-store', storage: createJSONStorage(() => localStorage) } + { + name: 'avicennia-credential-store', + storage: createJSONStorage(() => localStorage), + }, ), ); + +interface PeerStore { + candidates: RTCIceCandidateInit[]; + addCandidate: (candidate: RTCIceCandidateInit) => void; + clearCandidates: () => void; +} +export const usePeerStore = create((set) => ({ + candidates: [], + addCandidate: (candidate: RTCIceCandidateInit) => + set((state) => ({ candidates: [...state.candidates, candidate] })), + clearCandidates: () => set({ candidates: [] }), +})); + +export type Message = { + data: unknown; + type: 'local' | 'remote'; + timestamp: number; +}; + +interface MessageStore { + messages: Message[]; + addMessage: (message: Message) => void; + clearMessages: () => void; +} +export const useMessageStore = create((set) => ({ + messages: [], + addMessage: (message: Message) => + set((state) => ({ messages: [...state.messages, message] })), + clearMessages: () => set({ messages: [] }), +})); diff --git a/sites/dapp-ui/src/theme.tsx b/sites/dapp-ui/src/theme.tsx index 351b42a..654557d 100644 --- a/sites/dapp-ui/src/theme.tsx +++ b/sites/dapp-ui/src/theme.tsx @@ -1,10 +1,10 @@ export const DEFAULT_THEME = { - palette: { - primary: { - main: '#000000', - }, - secondary: { - main: '#9966ff', - }, + palette: { + primary: { + main: '#000000', }, -} + secondary: { + main: '#9966ff', + }, + }, +}; diff --git a/sites/dapp-ui/tsconfig.json b/sites/dapp-ui/tsconfig.json index a7fc6fb..8fd9f82 100644 --- a/sites/dapp-ui/tsconfig.json +++ b/sites/dapp-ui/tsconfig.json @@ -18,7 +18,11 @@ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true + "noFallthroughCasesInSwitch": true, + "types": ["vite/client"], + "paths": { + "@/*": ["./src/*"] + } }, "include": ["src"], "references": [{ "path": "./tsconfig.node.json" }] diff --git a/sites/dapp-ui/vite.config.ts b/sites/dapp-ui/vite.config.ts index a7febf9..2070be9 100644 --- a/sites/dapp-ui/vite.config.ts +++ b/sites/dapp-ui/vite.config.ts @@ -1,29 +1,92 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react-swc' -import {rename} from 'node:fs/promises' -import {resolve} from 'node:path' -import { mkdirp } from 'mkdirp'; +import 'dotenv/config' +import { defineConfig, splitVendorChunkPlugin } from 'vite'; +import { VitePWA } from 'vite-plugin-pwa'; +import { ViteImageOptimizer } from 'vite-plugin-image-optimizer'; +import react from '@vitejs/plugin-react-swc'; +import { resolve } from 'node:path'; -const API_DIR = resolve(__dirname, '..', '..', 'services', 'liquid-auth-api-js') -const PUBLIC_DIR = resolve(API_DIR, 'public') -const VIEW_DIR = resolve(API_DIR, 'views') -console.log(API_DIR) -export default defineConfig({ - build:{ - outDir: PUBLIC_DIR, - }, - plugins: [react(), - { - name: 'move-index-file', - closeBundle: async () => { - await mkdirp(VIEW_DIR) - try{ - await rename(resolve(PUBLIC_DIR, 'index.html'), resolve(VIEW_DIR, 'index.html')) - } catch (e) { - console.log('Skipping') - } +const DEFAULT_PROXY_URL = 'http://localhost:3000'; +const DEFAULT_WSS_PROXY_URL = 'ws://localhost:3000'; - } +export default defineConfig({ + server: { + proxy: { + '^/auth/.*': process.env.PROXY_URL || DEFAULT_PROXY_URL, + '^/.well-known/.*': process.env.PROXY_URL || DEFAULT_PROXY_URL, + '^/connect/.*': process.env.PROXY_URL || DEFAULT_PROXY_URL, + '^/attestation/.*': process.env.PROXY_URL || DEFAULT_PROXY_URL, + '^/assertion/.*': process.env.PROXY_URL || DEFAULT_PROXY_URL, + '/socket.io': { + target: process.env.WSS_PROXY_SERVER || DEFAULT_WSS_PROXY_URL, + ws: true, + }, + } + }, + resolve: { + alias: { + '@/components': resolve(__dirname, 'src', 'components'), + '@/hooks': resolve(__dirname, 'src', 'hooks'), + '@/pages': resolve(__dirname, 'src', 'pages'), + '@/store': resolve(__dirname, 'src', 'store'), }, - ], -}) + }, + plugins: [ + VitePWA({ + includeAssets: [ + 'logo-background.svg', + 'apple-touch-icon.png', + 'maskable-icon.png', + ], + workbox: { + navigateFallback: null, + }, + manifest: { + name: 'Liquid dApp', + short_name: 'Liquid', + description: 'FIDO2/Passkey Authentication', + theme_color: '#121212', + icons: [ + { + src: 'icons/48x48.png', + sizes: '48x48', + type: 'image/png', + }, + { + src: 'icons/72x72.png', + sizes: '72x72', + type: 'image/png', + }, + { + src: 'icons/96x96.png', + sizes: '96x96', + type: 'image/png', + }, + { + src: 'icons/144x144.png', + sizes: '144x144', + type: 'image/png', + }, + { + src: 'icons/192x192.png', + sizes: '192x192', + type: 'image/png', + }, + { + src: 'icons/512x512.png', + sizes: '512x512', + type: 'image/png', + }, + { + src: 'maskable-icon.png', + sizes: '512x512', + type: 'image/png', + purpose: 'maskable', + }, + ], + }, + }), + splitVendorChunkPlugin(), + ViteImageOptimizer(), + react(), + ], +});