From 0871fbda07c957883b595d57f38b5f5e8812a710 Mon Sep 17 00:00:00 2001 From: DarkSky Date: Fri, 22 Jul 2022 17:04:52 +0800 Subject: [PATCH] feat: merge keck --- .github/workflows/keck.yml | 67 ++ Dockerfile-keck | 33 + README.md | 1 + apps/keck/.eslintrc.json | 18 + apps/keck/jest.config.ts | 16 + apps/keck/package.json | 22 + apps/keck/package.prod.json | 9 + apps/keck/project.json | 52 ++ .../keck/src/environments/environment.prod.ts | 3 + apps/keck/src/environments/environment.ts | 3 + apps/keck/src/index.ts | 118 +++ apps/keck/src/utils.ts | 239 ++++++ apps/keck/tsconfig.app.json | 10 + apps/keck/tsconfig.json | 13 + apps/keck/tsconfig.spec.json | 9 + .../remote-kv/src/aws/aws-attachment.ts | 1 - package.json | 6 +- pnpm-lock.yaml | 739 ++++++++++++++++-- workspace.json | 1 + 19 files changed, 1302 insertions(+), 58 deletions(-) create mode 100644 .github/workflows/keck.yml create mode 100644 Dockerfile-keck create mode 100644 apps/keck/.eslintrc.json create mode 100644 apps/keck/jest.config.ts create mode 100644 apps/keck/package.json create mode 100644 apps/keck/package.prod.json create mode 100644 apps/keck/project.json create mode 100644 apps/keck/src/environments/environment.prod.ts create mode 100644 apps/keck/src/environments/environment.ts create mode 100644 apps/keck/src/index.ts create mode 100644 apps/keck/src/utils.ts create mode 100644 apps/keck/tsconfig.app.json create mode 100644 apps/keck/tsconfig.json create mode 100644 apps/keck/tsconfig.spec.json diff --git a/.github/workflows/keck.yml b/.github/workflows/keck.yml new file mode 100644 index 000000000..d7b915c10 --- /dev/null +++ b/.github/workflows/keck.yml @@ -0,0 +1,67 @@ +name: Build Keck + +on: + workflow_dispatch: + push: + branches: [master] + paths: + - 'apps/keck/**' + - '.github/workflows/keck.yml' + pull_request: + branches: [master] + paths: + - 'apps/keck/**' + - '.github/workflows/keck.yml' + +# Cancels all previous workflow runs for pull requests that have not completed. +# See https://docs.github.com/en/actions/using-jobs/using-concurrency +concurrency: + # The concurrency group contains the workflow name and the branch name for + # pull requests or the commit hash for any other events. + group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} + cancel-in-progress: true + +env: + REGISTRY: ghcr.io + NAMESPACE: toeverything + KECK_IMAGE_NAME: keck + IMAGE_TAG: canary-${{ github.sha }} + IMAGE_TAG_LATEST: nightly-latest + +jobs: + ligo-virgo: + runs-on: self-hosted + environment: development + permissions: + contents: read + packages: write + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Log in to the Container registry + uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker (keck) + id: meta_keck + uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 + with: + images: ${{ env.REGISTRY }}/${{ env.NAMESPACE }}/${{ env.KECK_IMAGE_NAME }} + tags: | + ${{ env.IMAGE_TAG }} + ${{ env.IMAGE_TAG_LATEST }} + + - name: Build and push Docker image (keck) + uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc + with: + context: . + file: ./Dockerfile-keck + push: ${{ github.ref == 'refs/heads/field' && true || false }} + tags: ${{ steps.meta_keck.outputs.tags }} + labels: ${{ steps.meta_keck.outputs.labels }} + target: keck diff --git a/Dockerfile-keck b/Dockerfile-keck new file mode 100644 index 000000000..d464e16da --- /dev/null +++ b/Dockerfile-keck @@ -0,0 +1,33 @@ +FROM node:16-alpine as builder +WORKDIR /app +COPY . . +RUN apk add g++ make python3 git +RUN npm i -g pnpm@7 && pnpm i --frozen-lockfile --store=node_modules/.pnpm-store && pnpm run build:keck + +FROM node:16-alpine as node_modules +WORKDIR /app +COPY --from=builder /app/dist/apps/keck . +COPY --from=builder /app/apps/keck/package.prod.json ./package.json +RUN npm i + +# ============= +# keck image +# ============= +FROM node:16-alpine as keck +WORKDIR /app +COPY --from=node_modules /app . + +ENV FIREBASE_ACCOUNT= +ENV FIREBASE_CERT= +ENV FIREBASE_PROJECT= +ENV HOST=0.0.0.0 +ENV PORT=3000 + +# 编码相关 +ENV TZ 'Asia/Shanghai' +ENV LANG en_US.UTF-8 +ENV LANGUAGE en_US:en +ENV LC_ALL en_US.UTF-8 + +EXPOSE 3000 +CMD ["node", "main.js"] diff --git a/README.md b/README.md index 147ed616e..7d894c9fb 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,7 @@ Have a look at [the examples to see AFFiNE in action](https://app.affine.pro/). - [how-to-customize-rollup-config.md](docs/how-to-customize-rollup-config.md) - [how-to-auto-download-figma-assets-in-affine.md](docs/how-to-auto-download-figma-assets-in-affine.md) - [affine-icons-user-guide.md](docs/affine-icons-user-guide.md) +- [How to develop api server in virgo](./apps/keck/README.md) ## Community diff --git a/apps/keck/.eslintrc.json b/apps/keck/.eslintrc.json new file mode 100644 index 000000000..5626944bd --- /dev/null +++ b/apps/keck/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/apps/keck/jest.config.ts b/apps/keck/jest.config.ts new file mode 100644 index 000000000..f514e7b28 --- /dev/null +++ b/apps/keck/jest.config.ts @@ -0,0 +1,16 @@ +/* eslint-disable */ +export default { + displayName: 'keck', + preset: '../../jest.preset.js', + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + }, + }, + testEnvironment: 'node', + transform: { + '^.+\\.[tj]s$': 'ts-jest', + }, + moduleFileExtensions: ['ts', 'js', 'html'], + coverageDirectory: '../../coverage/apps/keck', +}; diff --git a/apps/keck/package.json b/apps/keck/package.json new file mode 100644 index 000000000..d0cc69cee --- /dev/null +++ b/apps/keck/package.json @@ -0,0 +1,22 @@ +{ + "name": "@toeverything/keck", + "version": "0.0.1", + "license": "MIT", + "author": "DarkSky ", + "main": "jest.config.ts", + "dependencies": { + "authing-js-sdk": "^4.23.33", + "firebase-admin": "^11.0.0", + "lib0": "^0.2.51", + "lru-cache": "^7.13.0", + "nanoid": "^4.0.0", + "readable-stream": "^4.1.0", + "ws": "^8.8.0", + "y-protocols": "^1.0.5", + "yjs": "^13.5.39" + }, + "devDependencies": { + "@types/readable-stream": "^2.3.13", + "@types/ws": "^8.5.3" + } +} diff --git a/apps/keck/package.prod.json b/apps/keck/package.prod.json new file mode 100644 index 000000000..21d5fbf84 --- /dev/null +++ b/apps/keck/package.prod.json @@ -0,0 +1,9 @@ +{ + "name": "@toeverything/keck", + "license": "MIT", + "version": "0.0.1", + "dependencies": { + "level": "^8.0.0", + "level-read-stream": "1.1.0" + } +} diff --git a/apps/keck/project.json b/apps/keck/project.json new file mode 100644 index 000000000..b58fd3e1a --- /dev/null +++ b/apps/keck/project.json @@ -0,0 +1,52 @@ +{ + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/keck/src", + "projectType": "application", + "targets": { + "build": { + "executor": "@nrwl/node:webpack", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/apps/keck", + "main": "apps/keck/src/index.ts", + "tsConfig": "apps/keck/tsconfig.app.json", + "assets": [] + }, + "configurations": { + "production": { + "optimization": true, + "extractLicenses": true, + "inspect": false, + "fileReplacements": [ + { + "replace": "apps/keck/src/environments/environment.ts", + "with": "apps/keck/src/environments/environment.prod.ts" + } + ] + } + } + }, + "serve": { + "executor": "@nrwl/node:node", + "options": { + "buildTarget": "keck:build" + } + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["apps/keck/**/*.ts"] + } + }, + "test": { + "executor": "@nrwl/jest:jest", + "outputs": ["coverage/apps/keck"], + "options": { + "jestConfig": "apps/keck/jest.config.ts", + "passWithNoTests": true + } + } + }, + "tags": [] +} diff --git a/apps/keck/src/environments/environment.prod.ts b/apps/keck/src/environments/environment.prod.ts new file mode 100644 index 000000000..da7c84f63 --- /dev/null +++ b/apps/keck/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true, +}; diff --git a/apps/keck/src/environments/environment.ts b/apps/keck/src/environments/environment.ts new file mode 100644 index 000000000..39644a62e --- /dev/null +++ b/apps/keck/src/environments/environment.ts @@ -0,0 +1,3 @@ +export const environment = { + production: false, +}; diff --git a/apps/keck/src/index.ts b/apps/keck/src/index.ts new file mode 100644 index 000000000..d76df31b5 --- /dev/null +++ b/apps/keck/src/index.ts @@ -0,0 +1,118 @@ +import WebSocket = require('ws'); +import http = require('http'); + +// import authing = require('authing-js-sdk'); +import firebaseApp = require('firebase-admin/app'); +import firebaseAuth = require('firebase-admin/auth'); +import LRUCache = require('lru-cache'); +import nanoid = require('nanoid'); + +import { handleConnection } from './utils'; +import { URL } from 'url'; + +if (process.env.NODE_ENV !== 'development') { + firebaseApp.initializeApp({ + credential: firebaseApp.cert({ + clientEmail: process.env.FIREBASE_ACCOUNT, + privateKey: process.env.FIREBASE_CERT, + projectId: process.env.FIREBASE_PROJECT, + }), + projectId: process.env.FIREBASE_PROJECT, + }); +} + +const _getWorkspace = (path: string) => { + const [_, part1] = path.split('/collaboration/'); + const [workspace] = part1?.split('/') || []; + return workspace; +}; + +const AFFINE_COMMON_WORKSPACE = 'affine2vin277tcmafwq'; + +const _checkAuth = async ( + request: http.IncomingMessage, + response: http.ServerResponse, + callback: (response: http.OutgoingMessage, workspace: string) => boolean +) => { + if (process.env.NODE_ENV === 'development') { + const url = new URL(request.url, `http://${request.headers.host}`); + const workspace = _getWorkspace(url.pathname); + if (workspace) return callback(response, workspace); + return false; + } else { + try { + const decodedToken = await firebaseAuth + .getAuth() + .verifyIdToken(request.headers.token as string); + const allowWorkspace = [AFFINE_COMMON_WORKSPACE, decodedToken.uid]; + const url = new URL(request.url, `http://${request.headers.host}`); + const workspace = _getWorkspace(url.pathname); + if (allowWorkspace.includes(workspace)) { + return callback(response, workspace); + } + } catch (error) { + console.log(error); + } + return false; + } +}; + +const HOST = process.env.HOST || 'localhost'; +const PORT = process.env.PORT || 3000; + +const _tokens = new LRUCache({ + max: 10240, + ttl: 1000 * 60 * 5, +}); + +const _server = http.createServer((request, response) => { + if ( + request.method === 'POST' && + typeof request.headers.token === 'string' + ) { + _checkAuth(request, response, (response, workspace) => { + const protocol = nanoid.nanoid(16); + _tokens.set(protocol, workspace); + response.end(JSON.stringify({ protocol })); + return true; + }) + .then(responded => { + if (!responded) { + response.writeHead(401).end(); + } + }) + .catch(error => { + console.log(error); + response.writeHead(401).end(); + }); + return; + } + response.writeHead(200, { 'Content-Type': 'text/plain' }); + response.end('okay'); +}); + +const _websocketServer = new WebSocket.Server({ noServer: true }); +_websocketServer.on('connection', handleConnection); + +_server.on('upgrade', (request, socket, head) => { + // You may check auth of request here.. + // See https://github.com/websockets/ws#client-authentication + const protocol = request.headers['sec-websocket-protocol']; + if (typeof protocol === 'string' && _tokens.get(protocol)) { + _websocketServer.handleUpgrade(request, socket, head, ws => { + _websocketServer.emit( + 'connection', + ws, + request, + _tokens.get(protocol) + ); + }); + } else { + socket.write('HTTP/1.1 401 Unauthorized'); + socket.destroy(); + } +}); + +_server.listen(PORT, () => { + console.log(`running at '${HOST}' on port ${PORT}`); +}); diff --git a/apps/keck/src/utils.ts b/apps/keck/src/utils.ts new file mode 100644 index 000000000..5e57f6a77 --- /dev/null +++ b/apps/keck/src/utils.ts @@ -0,0 +1,239 @@ +import WebSocket = require('ws'); +import http = require('http'); +import Y = require('yjs'); +import lib0 = require('lib0'); +import awarenessProtocol = require('y-protocols/awareness'); +import syncProtocol = require('y-protocols/sync'); +// import { getPersistenceStorage } from './persistence'; + +const { encoding, decoding, mutex, map } = lib0; + +const wsReadyStateConnecting = 0; +const wsReadyStateOpen = 1; + +// disable gc when using snapshots! +const gcEnabled = process.env.GC !== 'false' && process.env.GC !== '0'; + +type Persistence = + | ((arg0: string, arg1: WSSharedDoc) => Promise) + | undefined; +const persistence: Persistence = null; // getPersistenceStorage('./affine'); + +const docs: Map = new Map(); + +const messageSync = 0; +const messageAwareness = 1; +// const messageAuth = 2 + +const updateHandler = (update: Uint8Array, origin: any, doc: WSSharedDoc) => { + const encoder = encoding.createEncoder(); + encoding.writeVarUint(encoder, messageSync); + syncProtocol.writeUpdate(encoder, update); + const message = encoding.toUint8Array(encoder); + doc.conns.forEach((_, conn) => send(doc, conn, message)); +}; + +type AwarenessEvent = { + added: Array; + updated: Array; + removed: Array; +}; + +export class WSSharedDoc extends Y.Doc { + name: string; + mux: lib0.mutex.mutex; + conns: Map; + awareness: awarenessProtocol.Awareness; + /** + * @param {string} name + */ + constructor(name: string) { + super({ gc: gcEnabled }); + this.name = name; + this.mux = mutex.createMutex(); + /** + * Maps from conn to set of controlled user ids. Delete all user ids from awareness when this conn is closed + * @type {Map>} + */ + this.conns = new Map(); + /** + * @type {awarenessProtocol.Awareness} + */ + this.awareness = new awarenessProtocol.Awareness(this); + this.awareness.setLocalState(null); + + const awarenessChangeHandler = ( + { added, updated, removed }: AwarenessEvent, + conn: object | null + ) => { + const changedClients = added.concat(updated, removed); + if (conn !== null) { + const connControlledIds: Set = this.conns.get(conn); + if (connControlledIds !== undefined) { + added.forEach(clientId => { + connControlledIds.add(clientId); + }); + removed.forEach(clientId => { + connControlledIds.delete(clientId); + }); + } + } + // broadcast awareness update + const encoder = encoding.createEncoder(); + encoding.writeVarUint(encoder, messageAwareness); + encoding.writeVarUint8Array( + encoder, + awarenessProtocol.encodeAwarenessUpdate( + this.awareness, + changedClients + ) + ); + const buff = encoding.toUint8Array(encoder); + this.conns.forEach((_, c) => { + send(this, c, buff); + }); + }; + this.awareness.on('update', awarenessChangeHandler); + this.on('update', updateHandler); + } +} + +// Gets a Y.Doc by name, whether in memory or on disk +const getYDoc = (docname: string, gc = true): WSSharedDoc => + map.setIfUndefined(docs, docname, () => { + const doc = new WSSharedDoc(docname); + doc.gc = gc; + if (persistence !== null) { + persistence(docname, doc); + } + docs.set(docname, doc); + return doc; + }); + +const messageListener = (conn: any, doc: WSSharedDoc, message: Uint8Array) => { + try { + const encoder = encoding.createEncoder(); + const decoder = decoding.createDecoder(message); + const messageType = decoding.readVarUint(decoder); + switch (messageType) { + case messageSync: + encoding.writeVarUint(encoder, messageSync); + syncProtocol.readSyncMessage(decoder, encoder, doc, null); + if (encoding.length(encoder) > 1) { + send(doc, conn, encoding.toUint8Array(encoder)); + } + break; + case messageAwareness: { + awarenessProtocol.applyAwarenessUpdate( + doc.awareness, + decoding.readVarUint8Array(decoder), + conn + ); + break; + } + } + } catch (err) { + console.error(err); + doc.emit('error', [err]); + } +}; + +const closeConn = (doc: WSSharedDoc, conn: any) => { + if (doc.conns.has(conn)) { + const controlledIds: Set = doc.conns.get(conn); + doc.conns.delete(conn); + awarenessProtocol.removeAwarenessStates( + doc.awareness, + Array.from(controlledIds), + null + ); + if (doc.conns.size === 0 && persistence !== null) { + // if persisted, we store state and destroy ydocument + persistence(doc.name, doc).then(() => { + doc.destroy(); + }); + docs.delete(doc.name); + } + } + conn.close(); +}; + +const send = (doc: WSSharedDoc, conn: any, m: Uint8Array) => { + if ( + conn.readyState !== wsReadyStateConnecting && + conn.readyState !== wsReadyStateOpen + ) { + closeConn(doc, conn); + } + try { + conn.send(m, (/** @param {any} err */ err: any) => { + err != null && closeConn(doc, conn); + }); + } catch (e) { + closeConn(doc, conn); + } +}; + +export const handleConnection = ( + socket: WebSocket.WebSocket, + request: http.IncomingMessage, + docName: string +) => { + const gc = true; + socket.binaryType = 'arraybuffer'; + // get doc, initialize if it does not exist yet + const doc = getYDoc(docName, gc); + doc.conns.set(socket, new Set()); + // listen and reply to events + socket.on('message', (message: ArrayBuffer) => + messageListener(socket, doc, new Uint8Array(message)) + ); + + // Check if connection is still alive + let pongReceived = true; + const pingInterval = setInterval(() => { + if (!pongReceived) { + if (doc.conns.has(socket)) { + closeConn(doc, socket); + } + clearInterval(pingInterval); + } else if (doc.conns.has(socket)) { + pongReceived = false; + try { + socket.ping(); + } catch (e) { + closeConn(doc, socket); + clearInterval(pingInterval); + } + } + }, 30 * 1000); + socket.on('close', () => { + closeConn(doc, socket); + clearInterval(pingInterval); + }); + socket.on('pong', () => { + pongReceived = true; + }); + // put the following in a variables in a block so the interval handlers don't keep in in + // scope + { + // send sync step 1 + const encoder = encoding.createEncoder(); + encoding.writeVarUint(encoder, messageSync); + syncProtocol.writeSyncStep1(encoder, doc); + send(doc, socket, encoding.toUint8Array(encoder)); + const awarenessStates = doc.awareness.getStates(); + if (awarenessStates.size > 0) { + const encoder = encoding.createEncoder(); + encoding.writeVarUint(encoder, messageAwareness); + encoding.writeVarUint8Array( + encoder, + awarenessProtocol.encodeAwarenessUpdate( + doc.awareness, + Array.from(awarenessStates.keys()) + ) + ); + send(doc, socket, encoding.toUint8Array(encoder)); + } + } +}; diff --git a/apps/keck/tsconfig.app.json b/apps/keck/tsconfig.app.json new file mode 100644 index 000000000..326599fe0 --- /dev/null +++ b/apps/keck/tsconfig.app.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["node"] + }, + "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"], + "include": ["**/*.ts"] +} diff --git a/apps/keck/tsconfig.json b/apps/keck/tsconfig.json new file mode 100644 index 000000000..e23d75a22 --- /dev/null +++ b/apps/keck/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/apps/keck/tsconfig.spec.json b/apps/keck/tsconfig.spec.json new file mode 100644 index 000000000..5591a03c7 --- /dev/null +++ b/apps/keck/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] +} diff --git a/libs/datasource/remote-kv/src/aws/aws-attachment.ts b/libs/datasource/remote-kv/src/aws/aws-attachment.ts index 3aa8a566f..ee13dc771 100644 --- a/libs/datasource/remote-kv/src/aws/aws-attachment.ts +++ b/libs/datasource/remote-kv/src/aws/aws-attachment.ts @@ -1,4 +1,3 @@ - import * as AWS from 'aws-sdk'; import type { Credentials } from 'aws-sdk'; import type { ManagedUpload } from 'aws-sdk/lib/s3/managed_upload'; diff --git a/package.json b/package.json index c28a290af..651bd68e9 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,9 @@ "scripts": { "start": "nx serve ligo-virgo", "start:free": "env-cmd -f .free.env nx serve ligo-virgo", + "start:keck": "nx serve keck", "build": "nx build ligo-virgo", + "build:keck": "nx build keck", "build:analytic": "cross-env BUNDLE_ANALYZER=true nx build --skip-nx-cache", "test": "nx run-many --target test --all", "check": "nx run-many --target check --all", @@ -15,8 +17,8 @@ "add:framework": "nx generate @nrwl/react:library --style=none --directory=framework --buildable --no-component --no-routing --tags=framework", "add:library": "nx generate @nrwl/react:library --style=none --buildable --no-component --no-routing --tags=library", "notify": "node --experimental-modules tools/notify.mjs", - "lint": "nx run-many --target=lint --all --fix --skip-nx-cache --exclude=components-common,theme", - "lint:with-cache": "nx run-many --target=lint --all --exclude=components-common,theme", + "lint": "nx run-many --target=lint --all --fix --skip-nx-cache --exclude=components-common,keck,theme", + "lint:with-cache": "nx run-many --target=lint --all --exclude=components-common,keck,theme", "format": "nx format", "format:ci": "nx format:check", "type:check": "nx build ligo-virgo", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b905d9464..2ed3b0e5d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -173,6 +173,33 @@ importers: webpack: 5.73.0_@swc+core@1.2.210 webpack-bundle-analyzer: 4.5.0 + apps/keck: + specifiers: + '@types/readable-stream': ^2.3.13 + '@types/ws': ^8.5.3 + authing-js-sdk: ^4.23.33 + firebase-admin: ^11.0.0 + lib0: ^0.2.51 + lru-cache: ^7.13.0 + nanoid: ^4.0.0 + readable-stream: ^4.1.0 + ws: ^8.8.0 + y-protocols: ^1.0.5 + yjs: ^13.5.39 + dependencies: + authing-js-sdk: 4.23.33 + firebase-admin: 11.0.0 + lib0: 0.2.51 + lru-cache: 7.13.1 + nanoid: 4.0.0 + readable-stream: 4.1.0 + ws: 8.8.0 + y-protocols: 1.0.5 + yjs: 13.5.39 + devDependencies: + '@types/readable-stream': 2.3.14 + '@types/ws': 8.5.3 + apps/ligo-virgo: specifiers: '@mui/icons-material': ^5.8.4 @@ -474,6 +501,7 @@ importers: '@mui/x-date-pickers-pro': ^5.0.0-alpha.7 '@types/react-date-range': ^1.4.4 clsx: ^1.2.0 + notistack: ^2.0.5 react-date-range: ^1.4.0 dependencies: '@emotion/is-prop-valid': 1.1.3 @@ -487,6 +515,7 @@ importers: '@mui/x-date-pickers-pro': 5.0.0-alpha.7_3ze6eywwrphmf4xmeajh7ll6xm '@types/react-date-range': 1.4.4 clsx: 1.2.0 + notistack: 2.0.5_5ejcbl776hpy2drdn6qveocmsu react-date-range: 1.4.0_date-fns@2.28.0 libs/datasource/commands: @@ -2945,6 +2974,13 @@ packages: - supports-color dev: true + /@fastify/busboy/1.1.0: + resolution: {integrity: sha512-Fv854f94v0CzIDllbY3i/0NJPNBRNLDawf3BTYVGCe9VrIIs3Wi7AFx24F9NzCxdf0wyx/x0Q9kEVnvDOPnlxA==} + engines: {node: '>=10.17.0'} + dependencies: + text-decoding: 1.0.0 + dev: false + /@firebase/analytics-compat/0.1.12_ikt45rtbctnl5l4y6p3bca5464: resolution: {integrity: sha512-mXR02p/4C9Xx07prhzr9nwocH6Xn3vpcO7DMGUMNB0qKdJADOaBow6LDlDY3u8ILhmHqNS8qPY3sKnhoTWzz8A==} peerDependencies: @@ -3025,7 +3061,6 @@ packages: /@firebase/app-types/0.7.0: resolution: {integrity: sha512-6fbHQwDv2jp/v6bXhBw2eSRbNBpxHcd1NBF864UksSMVIqIyri9qpJB1Mn6sGZE+bnDsSQBC5j2TbMxYsJQkQg==} - dev: true /@firebase/app/0.7.27: resolution: {integrity: sha512-gLxy9wHymCsPAWuIWg2S/gOWoAN/Nbpto+IWSXPHzjVUtPRvmuBrr9rvh8D2V2zHxNb1WigoZVLy5acRAf2rHg==} @@ -3058,6 +3093,15 @@ packages: - utf-8-validate dev: true + /@firebase/auth-interop-types/0.1.6_@firebase+util@1.6.2: + resolution: {integrity: sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g==} + peerDependencies: + '@firebase/app-types': 0.x + '@firebase/util': 1.x + dependencies: + '@firebase/util': 1.6.2 + dev: false + /@firebase/auth-interop-types/0.1.6_ee7bhenjigpuz3jknhp5542foa: resolution: {integrity: sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g==} peerDependencies: @@ -3101,7 +3145,19 @@ packages: dependencies: '@firebase/util': 1.6.2 tslib: 2.4.0 - dev: true + + /@firebase/database-compat/0.2.2: + resolution: {integrity: sha512-3wLHJ54WHMhrveCywCMbkspshFezN07PLOIsmqELM1+pmrg3bwMj9u/o3Equ0DwmESMnchp5sMxgzdBUOextJg==} + dependencies: + '@firebase/component': 0.5.16 + '@firebase/database': 0.13.2 + '@firebase/database-types': 0.9.10 + '@firebase/logger': 0.3.3 + '@firebase/util': 1.6.2 + tslib: 2.4.0 + transitivePeerDependencies: + - '@firebase/app-types' + dev: false /@firebase/database-compat/0.2.2_@firebase+app-types@0.7.0: resolution: {integrity: sha512-3wLHJ54WHMhrveCywCMbkspshFezN07PLOIsmqELM1+pmrg3bwMj9u/o3Equ0DwmESMnchp5sMxgzdBUOextJg==} @@ -3121,7 +3177,19 @@ packages: dependencies: '@firebase/app-types': 0.7.0 '@firebase/util': 1.6.2 - dev: true + + /@firebase/database/0.13.2: + resolution: {integrity: sha512-wKkBD4rq6PPv9gl1hNJNpl0R0bwJmXCJfDuvotjXmTcU7kV0AIaJ45GVhULkbSCApAAFC6QUJ91oasDUO1ZVxw==} + dependencies: + '@firebase/auth-interop-types': 0.1.6_@firebase+util@1.6.2 + '@firebase/component': 0.5.16 + '@firebase/logger': 0.3.3 + '@firebase/util': 1.6.2 + faye-websocket: 0.11.4 + tslib: 2.4.0 + transitivePeerDependencies: + - '@firebase/app-types' + dev: false /@firebase/database/0.13.2_@firebase+app-types@0.7.0: resolution: {integrity: sha512-wKkBD4rq6PPv9gl1hNJNpl0R0bwJmXCJfDuvotjXmTcU7kV0AIaJ45GVhULkbSCApAAFC6QUJ91oasDUO1ZVxw==} @@ -3237,7 +3305,6 @@ packages: resolution: {integrity: sha512-POTJl07jOKTOevLXrTvJD/VZ0M6PnJXflbAh5J9VGkmtXPXNG6MdZ9fmRgqYhXKTaDId6AQenQ262uwgpdtO0Q==} dependencies: tslib: 2.4.0 - dev: true /@firebase/messaging-compat/0.1.15_ikt45rtbctnl5l4y6p3bca5464: resolution: {integrity: sha512-f9xbp/V4onNgg7tTC9rY/9gb5F3S+1m1YMU39GHATXcoO4qVCN429VFbVSWQ9RI7f85HddPsULWX7Moq+MwzNw==} @@ -3390,7 +3457,6 @@ packages: resolution: {integrity: sha512-VYDqEf/+mS7n0nPj6qJDJYFtKIEfOaTtQeNDsd3x+xp8HWvrbygWOexzeGicLP1dvEzrKr3eQGcJmmmYN3TIsA==} dependencies: tslib: 2.4.0 - dev: true /@firebase/webchannel-wrapper/0.6.2: resolution: {integrity: sha512-zThUKcqIU6utWzM93uEvhlh8qj8A5LMPFJPvk/ODb+8GSSif19xM2Lw1M2ijyBy8+6skSkQBbavPzOU5Oh/8tQ==} @@ -3406,13 +3472,79 @@ packages: '@floating-ui/core': 0.7.3 dev: false + /@google-cloud/firestore/5.0.2: + resolution: {integrity: sha512-xlGcNYaW0nvUMzNn2+pLfbEBVt6oysVqtM89faMgZWkWfEtvIQGS0h5PRdLlcqufNzRCX3yIGv29Pb+03ys+VA==} + engines: {node: '>=10.10.0'} + requiresBuild: true + dependencies: + fast-deep-equal: 3.1.3 + functional-red-black-tree: 1.0.1 + google-gax: 2.30.5 + protobufjs: 6.11.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + optional: true + + /@google-cloud/paginator/3.0.7: + resolution: {integrity: sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==} + engines: {node: '>=10'} + dependencies: + arrify: 2.0.1 + extend: 3.0.2 + dev: false + optional: true + + /@google-cloud/projectify/3.0.0: + resolution: {integrity: sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==} + engines: {node: '>=12.0.0'} + dev: false + optional: true + + /@google-cloud/promisify/3.0.0: + resolution: {integrity: sha512-91ArYvRgXWb73YvEOBMmOcJc0bDRs5yiVHnqkwoG0f3nm7nZuipllz6e7BvFESBvjkDTBC0zMD8QxedUwNLc1A==} + engines: {node: '>=12'} + dev: false + optional: true + + /@google-cloud/storage/6.2.3: + resolution: {integrity: sha512-UJqn3Ln8wFBPLuwBaNu3PlhzQDL3EKKfP1+3mzLRQhcFqgpBSMPLDgAXxc6e9S0l0kqsi4GOuAA7fA+l/VAMjQ==} + engines: {node: '>=12'} + requiresBuild: true + dependencies: + '@google-cloud/paginator': 3.0.7 + '@google-cloud/projectify': 3.0.0 + '@google-cloud/promisify': 3.0.0 + abort-controller: 3.0.0 + arrify: 2.0.1 + async-retry: 1.3.3 + compressible: 2.0.18 + duplexify: 4.1.2 + ent: 2.2.0 + extend: 3.0.2 + gaxios: 5.0.1 + google-auth-library: 8.1.1 + mime: 3.0.0 + mime-types: 2.1.35 + p-limit: 3.1.0 + pumpify: 2.0.1 + retry-request: 5.0.1 + stream-events: 1.0.5 + teeny-request: 8.0.0 + uuid: 8.3.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + optional: true + /@grpc/grpc-js/1.6.7: resolution: {integrity: sha512-eBM03pu9hd3VqDQG+kHahiG1x80RGkkqqRb1Pchcwqej/KkAH95gAvKs6laqaHCycYaPK+TKuNQnOz9UXYA8qw==} engines: {node: ^8.13.0 || >=10.10.0} dependencies: '@grpc/proto-loader': 0.6.13 '@types/node': 18.0.1 - dev: true /@grpc/proto-loader/0.6.13: resolution: {integrity: sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==} @@ -3424,7 +3556,6 @@ packages: long: 4.0.0 protobufjs: 6.11.3 yargs: 16.2.0 - dev: true /@headlessui/react/1.6.5_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-3VkKteDxlxf3fE0KbfO9t60KC1lM7YNpZggLpwzVNg1J/zwL+h+4N7MBlFDVpInZI3rKlZGpNx0PWsG/9c2vQg==} @@ -5288,6 +5419,11 @@ packages: - utf-8-validate dev: true + /@panva/asn1.js/1.0.0: + resolution: {integrity: sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==} + engines: {node: '>=10.13.0'} + dev: false + /@parcel/watcher/2.0.4: resolution: {integrity: sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==} engines: {node: '>= 10.0.0'} @@ -5423,46 +5559,36 @@ packages: /@protobufjs/aspromise/1.1.2: resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} - dev: true /@protobufjs/base64/1.1.2: resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - dev: true /@protobufjs/codegen/2.0.4: resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - dev: true /@protobufjs/eventemitter/1.1.0: resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} - dev: true /@protobufjs/fetch/1.1.0: resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/inquire': 1.1.0 - dev: true /@protobufjs/float/1.0.2: resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - dev: true /@protobufjs/inquire/1.1.0: resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} - dev: true /@protobufjs/path/1.1.2: resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} - dev: true /@protobufjs/pool/1.1.0: resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - dev: true /@protobufjs/utf8/1.1.0: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - dev: true /@rollup/plugin-babel/5.3.1_fb3qe53zzddvqjqqltveoanfhe: resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} @@ -6068,6 +6194,12 @@ packages: engines: {node: '>= 6'} dev: true + /@tootallnate/once/2.0.0: + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + dev: false + optional: true + /@trysound/sax/0.2.0: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} @@ -6127,7 +6259,6 @@ packages: dependencies: '@types/connect': 3.4.35 '@types/node': 18.0.1 - dev: true /@types/bonjour/3.5.10: resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} @@ -6161,7 +6292,6 @@ packages: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: '@types/node': 18.0.1 - dev: true /@types/debug/4.1.7: resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} @@ -6201,7 +6331,6 @@ packages: '@types/node': 18.0.1 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 - dev: true /@types/express/4.17.13: resolution: {integrity: sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==} @@ -6210,7 +6339,6 @@ packages: '@types/express-serve-static-core': 4.17.29 '@types/qs': 6.9.7 '@types/serve-static': 1.13.10 - dev: true /@types/file-saver/2.0.5: resolution: {integrity: sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ==} @@ -6302,6 +6430,12 @@ packages: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true + /@types/jsonwebtoken/8.5.8: + resolution: {integrity: sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A==} + dependencies: + '@types/node': 18.0.1 + dev: false + /@types/keyv/3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: @@ -6319,11 +6453,9 @@ packages: /@types/long/4.0.2: resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} - dev: true /@types/mime/1.3.2: resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} - dev: true /@types/minimatch/3.0.5: resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} @@ -6352,11 +6484,9 @@ packages: /@types/qs/6.9.7: resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} - dev: true /@types/range-parser/1.2.4: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} - dev: true /@types/react-date-range/1.4.4: resolution: {integrity: sha512-9Y9NyNgaCsEVN/+O4HKuxzPbVjRVBGdOKRxMDcsTRWVG62lpYgnxefNckTXDWup8FvczoqPW0+ESZR6R1yymDg==} @@ -6417,6 +6547,13 @@ packages: '@types/scheduler': 0.16.2 csstype: 3.1.0 + /@types/readable-stream/2.3.14: + resolution: {integrity: sha512-8jQ5Mp7bsDJEnW/69i6nAaQMoLwAVJVc7ZRAVTrdh/o6XueQsX38TEvKuYyoQj76/mg7WdlRfMrtl9pDLCJWsg==} + dependencies: + '@types/node': 18.0.1 + safe-buffer: 5.2.1 + dev: true + /@types/resolve/1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: @@ -6447,7 +6584,6 @@ packages: dependencies: '@types/mime': 1.3.2 '@types/node': 18.0.1 - dev: true /@types/sockjs/0.3.33: resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} @@ -6770,6 +6906,13 @@ packages: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} dev: true + /abort-controller/3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + dev: false + /abstract-level/1.0.3: resolution: {integrity: sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==} engines: {node: '>=12'} @@ -6841,7 +6984,6 @@ packages: debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} @@ -7122,6 +7264,12 @@ packages: es-shim-unscopables: 1.0.0 dev: true + /arrify/2.0.1: + resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} + engines: {node: '>=8'} + dev: false + optional: true + /assert/2.0.0: resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==} dependencies: @@ -7140,6 +7288,13 @@ packages: engines: {node: '>=8'} dev: true + /async-retry/1.3.3: + resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + dependencies: + retry: 0.13.1 + dev: false + optional: true + /async-validator/4.2.5: resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} dev: false @@ -7193,7 +7348,6 @@ packages: sm-crypto: 0.3.8 transitivePeerDependencies: - supports-color - dev: true /autoprefixer/10.4.7_postcss@8.4.14: resolution: {integrity: sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==} @@ -7520,6 +7674,11 @@ packages: /big.js/5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + /bignumber.js/9.0.2: + resolution: {integrity: sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==} + dev: false + optional: true + /binary-extensions/2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} @@ -7626,6 +7785,10 @@ packages: node-int64: 0.4.0 dev: true + /buffer-equal-constant-time/1.0.1: + resolution: {integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=} + dev: false + /buffer-from/1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -8032,7 +8195,6 @@ packages: engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 - dev: true /compression-webpack-plugin/10.0.0_webpack@5.73.0: resolution: {integrity: sha512-wLXLIBwpul/ALcm7Aj+69X0pYT3BYt6DdPn3qrgBIh9YejV9Bju9ShhlAsjujLyWMo6SAweFIWaUoFmXZNuNrg==} @@ -8756,10 +8918,26 @@ packages: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: true + /duplexify/4.1.2: + resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 3.6.0 + stream-shift: 1.0.1 + dev: false + optional: true + /eastasianwidth/0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true + /ecdsa-sig-formatter/1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + dependencies: + safe-buffer: 5.2.1 + dev: false + /editor/1.0.0: resolution: {integrity: sha512-SoRmbGStwNYHgKfjOrX2L0mUvp9bUVv0uPppZSOMAntEbcFtoC3MKF5b3T6HQPXKIV+QGY3xPO3JK5it5lVkuw==} dev: true @@ -8829,6 +9007,11 @@ packages: ansi-colors: 4.1.3 dev: true + /ent/2.2.0: + resolution: {integrity: sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==} + dev: false + optional: true + /entities/2.2.0: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} dev: true @@ -9365,6 +9548,11 @@ packages: engines: {node: '>= 0.6'} dev: true + /event-target-shim/5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + dev: false + /eventemitter3/4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -9472,6 +9660,11 @@ packages: - supports-color dev: true + /extend/3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: false + optional: true + /external-editor/3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} @@ -9521,6 +9714,11 @@ packages: resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==} dev: false + /fast-text-encoding/1.0.4: + resolution: {integrity: sha512-x6lDDm/tBAzX9kmsPcZsNbvDs3Zey3+scsxaZElS8xWLgUMAg/oFLeewfUz0mu1CblHhhsu15jGkraldkFh8KQ==} + dev: false + optional: true + /fastclick/1.0.6: resolution: {integrity: sha512-cXyDBT4g0uWl/Xe75QspBDAgAWQ0lkPi/zgp6YFEUHj6WV6VIZl7R6TiDZhdOVU3W4ehp/8tG61Jev1jit+ztQ==} dev: false @@ -9540,7 +9738,6 @@ packages: engines: {node: '>=0.8.0'} dependencies: websocket-driver: 0.7.4 - dev: true /fb-watchman/2.0.1: resolution: {integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==} @@ -9680,6 +9877,27 @@ packages: path-exists: 4.0.0 dev: true + /firebase-admin/11.0.0: + resolution: {integrity: sha512-x56u+Q1P8QDvQKaYRe29ZUM/3f829cP8tsKCDXOhaIX/GbGfgcdjRhPmCafzlwgCWP5wW9NkOgIhnrw94zucvw==} + engines: {node: '>=14'} + dependencies: + '@fastify/busboy': 1.1.0 + '@firebase/database-compat': 0.2.2 + '@firebase/database-types': 0.9.10 + '@types/node': 18.0.1 + jsonwebtoken: 8.5.1 + jwks-rsa: 2.1.4 + node-forge: 1.3.1 + uuid: 8.3.2 + optionalDependencies: + '@google-cloud/firestore': 5.0.2 + '@google-cloud/storage': 6.2.3 + transitivePeerDependencies: + - '@firebase/app-types' + - encoding + - supports-color + dev: false + /firebase/9.8.4: resolution: {integrity: sha512-fQigVEtSBprGBDLVTr485KQJ1YUWh/HeocMQvmhaUCL9dHUnW8GWfK+XkKOV2kcDB1Ur8xZPkjCxlmoTcykhgA==} dependencies: @@ -9889,7 +10107,6 @@ packages: /functional-red-black-tree/1.0.1: resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} - dev: true /functions-have-names/1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} @@ -9907,6 +10124,59 @@ packages: wide-align: 1.1.5 dev: true + /gaxios/4.3.3: + resolution: {integrity: sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==} + engines: {node: '>=10'} + dependencies: + abort-controller: 3.0.0 + extend: 3.0.2 + https-proxy-agent: 5.0.1 + is-stream: 2.0.1 + node-fetch: 2.6.7 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + optional: true + + /gaxios/5.0.1: + resolution: {integrity: sha512-keK47BGKHyyOVQxgcUaSaFvr3ehZYAlvhvpHXy0YB2itzZef+GqZR8TBsfVRWghdwlKrYsn+8L8i3eblF7Oviw==} + engines: {node: '>=12'} + dependencies: + extend: 3.0.2 + https-proxy-agent: 5.0.1 + is-stream: 2.0.1 + node-fetch: 2.6.7 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + optional: true + + /gcp-metadata/4.3.1: + resolution: {integrity: sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==} + engines: {node: '>=10'} + dependencies: + gaxios: 4.3.3 + json-bigint: 1.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + optional: true + + /gcp-metadata/5.0.0: + resolution: {integrity: sha512-gfwuX3yA3nNsHSWUL4KG90UulNiq922Ukj3wLTrcnX33BB7PwB1o0ubR8KVvXu9nJH+P5w1j2SQSNNqto+H0DA==} + engines: {node: '>=12'} + dependencies: + gaxios: 5.0.1 + json-bigint: 1.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + optional: true + /generic-names/4.0.0: resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} dependencies: @@ -10058,6 +10328,86 @@ packages: slash: 3.0.0 dev: true + /google-auth-library/7.14.1: + resolution: {integrity: sha512-5Rk7iLNDFhFeBYc3s8l1CqzbEBcdhwR193RlD4vSNFajIcINKI8W8P0JLmBpwymHqqWbX34pJDQu39cSy/6RsA==} + engines: {node: '>=10'} + dependencies: + arrify: 2.0.1 + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + fast-text-encoding: 1.0.4 + gaxios: 4.3.3 + gcp-metadata: 4.3.1 + gtoken: 5.3.2 + jws: 4.0.0 + lru-cache: 6.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + optional: true + + /google-auth-library/8.1.1: + resolution: {integrity: sha512-eG3pCfrLgVJe19KhAeZwW0m1LplNEo0FX1GboWf3hu18zD2jq8TUH2K8900AB2YRAuJ7A+1aSXDp1BODjwwRzg==} + engines: {node: '>=12'} + dependencies: + arrify: 2.0.1 + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + fast-text-encoding: 1.0.4 + gaxios: 5.0.1 + gcp-metadata: 5.0.0 + gtoken: 6.1.0 + jws: 4.0.0 + lru-cache: 6.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + optional: true + + /google-gax/2.30.5: + resolution: {integrity: sha512-Jey13YrAN2hfpozHzbtrwEfEHdStJh1GwaQ2+Akh1k0Tv/EuNVSuBtHZoKSBm5wBMvNsxTsEIZ/152NrYyZgxQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@grpc/grpc-js': 1.6.7 + '@grpc/proto-loader': 0.6.13 + '@types/long': 4.0.2 + abort-controller: 3.0.0 + duplexify: 4.1.2 + fast-text-encoding: 1.0.4 + google-auth-library: 7.14.1 + is-stream-ended: 0.1.4 + node-fetch: 2.6.7 + object-hash: 3.0.0 + proto3-json-serializer: 0.1.9 + protobufjs: 6.11.3 + retry-request: 4.2.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + optional: true + + /google-p12-pem/3.1.4: + resolution: {integrity: sha512-HHuHmkLgwjdmVRngf5+gSmpkyaRI6QmOg77J8tkNBHhNEI62sGHyw4/+UkgyZEI7h84NbWprXDJ+sa3xOYFvTg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + node-forge: 1.3.1 + dev: false + optional: true + + /google-p12-pem/4.0.0: + resolution: {integrity: sha512-lRTMn5ElBdDixv4a86bixejPSRk1boRtUowNepeKEVvYiFlkLuAJUVpEz6PfObDHYEKnZWq/9a2zC98xu62A9w==} + engines: {node: '>=12.0.0'} + hasBin: true + dependencies: + node-forge: 1.3.1 + dev: false + optional: true + /got/12.1.0: resolution: {integrity: sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==} engines: {node: '>=14.16'} @@ -10080,6 +10430,32 @@ packages: /graceful-fs/4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + /gtoken/5.3.2: + resolution: {integrity: sha512-gkvEKREW7dXWF8NV8pVrKfW7WqReAmjjkMBh6lNCCGOM4ucS0r0YyXXl0r/9Yj8wcW/32ISkfc8h5mPTDbtifQ==} + engines: {node: '>=10'} + dependencies: + gaxios: 4.3.3 + google-p12-pem: 3.1.4 + jws: 4.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + optional: true + + /gtoken/6.1.0: + resolution: {integrity: sha512-WPZcFw34wh2LUvbCUWI70GDhOlO7qHpSvFHFqq7d3Wvsf8dIJedE0lnUdOmsKuC0NgflKmF0LxIF38vsGeHHiQ==} + engines: {node: '>=12.0.0'} + dependencies: + gaxios: 4.3.3 + google-p12-pem: 4.0.0 + jws: 4.0.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + optional: true + /gzip-size/6.0.0: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} engines: {node: '>=10'} @@ -10265,7 +10641,6 @@ packages: /http-parser-js/0.5.8: resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} - dev: true /http-proxy-agent/4.0.1: resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} @@ -10278,6 +10653,18 @@ packages: - supports-color dev: true + /http-proxy-agent/5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + optional: true + /http-proxy-middleware/2.0.6_@types+express@4.17.13: resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} engines: {node: '>=12.0.0'} @@ -10347,7 +10734,6 @@ packages: debug: 4.3.4 transitivePeerDependencies: - supports-color - dev: true /human-signals/2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} @@ -10742,10 +11128,14 @@ packages: dependencies: call-bind: 1.0.2 + /is-stream-ended/0.1.4: + resolution: {integrity: sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==} + dev: false + optional: true + /is-stream/2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - dev: true /is-stream/3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} @@ -11665,6 +12055,13 @@ packages: engines: {node: '>= 0.6.0'} dev: false + /jose/2.0.5: + resolution: {integrity: sha512-BAiDNeDKTMgk4tvD0BbxJ8xHEHBZgpeRZ1zGPPsitSyMgjoMWiLGYAE7H7NpP5h0lPppQajQs871E8NHUrzVPA==} + engines: {node: '>=10.13.0 < 13 || >=13.7.0'} + dependencies: + '@panva/asn1.js': 1.0.0 + dev: false + /jotai/1.7.4: resolution: {integrity: sha512-PvkjL6DA4I0GFNFWt/1MKouTpN6Ohj0qyfuV4LoYGBHQRlf38qF6cPILozYsYZi2Nfeap9MdzWVGSYu1qBElKQ==} engines: {node: '>=12.7.0'} @@ -11786,6 +12183,13 @@ packages: engines: {node: '>=4'} hasBin: true + /json-bigint/1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + dependencies: + bignumber.js: 9.0.2 + dev: false + optional: true + /json-buffer/3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} dev: false @@ -11847,6 +12251,22 @@ packages: graceful-fs: 4.2.10 dev: true + /jsonwebtoken/8.5.1: + resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} + engines: {node: '>=4', npm: '>=1.4.28'} + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 5.7.1 + dev: false + /jsx-ast-utils/3.3.1: resolution: {integrity: sha512-pxrjmNpeRw5wwVeWyEAk7QJu2GnBO3uzPFmHCKJJFPKK2Cy0cWL23krGtLdnMmbIi6/FjlrQpPyfQI19ByPOhQ==} engines: {node: '>=4.0'} @@ -11864,6 +12284,52 @@ packages: setimmediate: 1.0.5 dev: true + /jwa/1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + dev: false + + /jwa/2.0.0: + resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + dev: false + optional: true + + /jwks-rsa/2.1.4: + resolution: {integrity: sha512-mpArfgPkUpX11lNtGxsF/szkasUcbWHGplZl/uFvFO2NuMHmt0dQXIihh0rkPU2yQd5niQtuUHbXnG/WKiXF6Q==} + engines: {node: '>=10 < 13 || >=14'} + dependencies: + '@types/express': 4.17.13 + '@types/jsonwebtoken': 8.5.8 + debug: 4.3.4 + jose: 2.0.5 + limiter: 1.1.5 + lru-memoizer: 2.1.4 + transitivePeerDependencies: + - supports-color + dev: false + + /jws/3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.1 + dev: false + + /jws/4.0.0: + resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + dependencies: + jwa: 2.0.0 + safe-buffer: 5.2.1 + dev: false + optional: true + /jwt-decode/2.2.0: resolution: {integrity: sha512-86GgN2vzfUu7m9Wcj63iUkuDzFNYFVmjeDm2GzWpUk+opB0pEpMsw6ePCMrhYkumz2C1ihqtZzOMAg7FiXcNoQ==} @@ -12102,6 +12568,10 @@ packages: engines: {node: '>=10'} dev: true + /limiter/1.1.5: + resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} + dev: false + /lines-and-columns/1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -12210,12 +12680,39 @@ packages: /lodash.camelcase/4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - dev: true + + /lodash.clonedeep/4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + dev: false /lodash.debounce/4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} dev: true + /lodash.includes/4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + dev: false + + /lodash.isboolean/3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + dev: false + + /lodash.isinteger/4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + dev: false + + /lodash.isnumber/3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + dev: false + + /lodash.isplainobject/4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + dev: false + + /lodash.isstring/4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + dev: false + /lodash.memoize/4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} dev: true @@ -12224,6 +12721,10 @@ packages: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true + /lodash.once/4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + dev: false + /lodash.uniq/4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} dev: true @@ -12251,7 +12752,6 @@ packages: /long/4.0.0: resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} - dev: true /loose-envify/1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} @@ -12275,17 +12775,35 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: false + /lru-cache/4.0.2: + resolution: {integrity: sha512-uQw9OqphAGiZhkuPlpFGmdTU2tEuhxTourM/19qGJrxBPHAr/f8BT1a0i/lOclESnGatdJG/UCkP9kZB/Lh1iw==} + dependencies: + pseudomap: 1.0.2 + yallist: 2.1.2 + dev: false + /lru-cache/6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 - dev: true /lru-cache/7.12.0: resolution: {integrity: sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==} engines: {node: '>=12'} + /lru-cache/7.13.1: + resolution: {integrity: sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ==} + engines: {node: '>=12'} + dev: false + + /lru-memoizer/2.1.4: + resolution: {integrity: sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ==} + dependencies: + lodash.clonedeep: 4.5.0 + lru-cache: 4.0.2 + dev: false + /lz-string/1.4.4: resolution: {integrity: sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==} hasBin: true @@ -12400,6 +12918,13 @@ packages: hasBin: true dev: true + /mime/3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + dev: false + optional: true + /mimic-fn/1.2.0: resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} engines: {node: '>=4'} @@ -12589,7 +13114,6 @@ packages: /ms/2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true /multicast-dns/7.2.5: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} @@ -12730,12 +13254,10 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 - dev: true /node-forge/1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} - dev: true /node-gyp-build/4.5.0: resolution: {integrity: sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==} @@ -12766,6 +13288,33 @@ packages: resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} + /notistack/2.0.5_5ejcbl776hpy2drdn6qveocmsu: + resolution: {integrity: sha512-Ig2T1Muqkc1PaSQcEDrK7diKv6cBxw02Iq6uv074ySfgq524TV5lK41diAb6OSsaiWfp3aRt+T3+0MF8m2EcJQ==} + peerDependencies: + '@emotion/react': ^11.4.1 + '@emotion/styled': ^11.3.0 + '@mui/material': ^5.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@mui/material': + optional: true + react: + optional: true + react-dom: + optional: true + dependencies: + '@emotion/react': 11.9.3 + '@emotion/styled': 11.9.3_@emotion+react@11.9.3 + '@mui/material': 5.8.7_d6menda4vqwq6peqnkbe7mkj4i + clsx: 1.2.1 + hoist-non-react-statics: 3.3.2 + dev: false + /npm-run-path/4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -12854,6 +13403,12 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + /object-hash/3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: false + optional: true + /object-inspect/1.12.2: resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} @@ -13046,7 +13601,6 @@ packages: engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 - dev: true /p-locate/2.0.0: resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} @@ -13795,6 +14349,13 @@ packages: object-assign: 4.1.1 react-is: 16.13.1 + /proto3-json-serializer/0.1.9: + resolution: {integrity: sha512-A60IisqvnuI45qNRygJjrnNjX2TMdQGMY+57tR3nul3ZgO2zXkR9OGR8AXxJhkqx84g0FTnrfi3D5fWMSdANdQ==} + dependencies: + protobufjs: 6.11.3 + dev: false + optional: true + /protobufjs/6.11.3: resolution: {integrity: sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==} hasBin: true @@ -13813,7 +14374,6 @@ packages: '@types/long': 4.0.2 '@types/node': 18.0.1 long: 4.0.0 - dev: true /proxy-addr/2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} @@ -13828,6 +14388,10 @@ packages: dev: true optional: true + /pseudomap/1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + dev: false + /psl/1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true @@ -13839,6 +14403,15 @@ packages: once: 1.4.0 dev: false + /pumpify/2.0.1: + resolution: {integrity: sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==} + dependencies: + duplexify: 4.1.2 + inherits: 2.0.4 + pump: 3.0.0 + dev: false + optional: true + /punycode/1.3.2: resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} dev: false @@ -14855,6 +15428,13 @@ packages: string_decoder: 1.3.0 util-deprecate: 1.0.2 + /readable-stream/4.1.0: + resolution: {integrity: sha512-sVisi3+P2lJ2t0BPbpK629j8wRW06yKGJUcaLAGXPAUhyUxVJm7VsCTit1PFgT4JHUDMrGNR+ZjSKpzGaRF3zw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + abort-controller: 3.0.0 + dev: false + /readdirp/3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -15018,10 +15598,31 @@ packages: signal-exit: 3.0.7 dev: true + /retry-request/4.2.2: + resolution: {integrity: sha512-xA93uxUD/rogV7BV59agW/JHPGXeREMWiZc9jhcwY4YdZ7QOtC7qbomYg0n4wyk2lJhggjvKvhNX8wln/Aldhg==} + engines: {node: '>=8.10.0'} + dependencies: + debug: 4.3.4 + extend: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + optional: true + + /retry-request/5.0.1: + resolution: {integrity: sha512-lxFKrlBt0OZzCWh/V0uPEN0vlr3OhdeXnpeY5OES+ckslm791Cb1D5P7lJUSnY7J5hiCjcyaUGmzCnIGDCUBig==} + engines: {node: '>=12'} + dependencies: + debug: 4.3.4 + extend: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + optional: true + /retry/0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} - dev: true /reusify/1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} @@ -15331,8 +15932,6 @@ packages: /semver/5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true - dev: true - optional: true /semver/6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} @@ -15743,6 +16342,18 @@ packages: engines: {node: '>= 0.8'} dev: true + /stream-events/1.0.5: + resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==} + dependencies: + stubs: 3.0.0 + dev: false + optional: true + + /stream-shift/1.0.1: + resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} + dev: false + optional: true + /string-argv/0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} engines: {node: '>=0.6.19'} @@ -15907,6 +16518,11 @@ packages: engines: {node: '>=8'} dev: true + /stubs/3.0.0: + resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==} + dev: false + optional: true + /style-inject/0.3.0: resolution: {integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==} dev: true @@ -16140,6 +16756,21 @@ packages: yallist: 4.0.0 dev: true + /teeny-request/8.0.0: + resolution: {integrity: sha512-6KEYxXI4lQPSDkXzXpPmJPNmo7oqduFFbhOEHf8sfsLbXyCsb+umUjBtMGAKhaSToD8JNCtQutTRefu29K64JA==} + engines: {node: '>=12'} + dependencies: + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + node-fetch: 2.6.7 + stream-events: 1.0.5 + uuid: 8.3.2 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + optional: true + /temp/0.9.4: resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} engines: {node: '>=6.0.0'} @@ -16227,6 +16858,10 @@ packages: minimatch: 3.1.2 dev: true + /text-decoding/1.0.0: + resolution: {integrity: sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA==} + dev: false + /text-table/0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true @@ -16314,7 +16949,6 @@ packages: /tr46/0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true /tr46/2.1.0: resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} @@ -16757,7 +17391,6 @@ packages: /webidl-conversions/3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true /webidl-conversions/5.0.0: resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} @@ -16994,12 +17627,10 @@ packages: http-parser-js: 0.5.8 safe-buffer: 5.2.1 websocket-extensions: 0.1.4 - dev: true /websocket-extensions/0.1.4: resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} engines: {node: '>=0.8.0'} - dev: true /whatwg-encoding/1.0.5: resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} @@ -17027,7 +17658,6 @@ packages: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: true /whatwg-url/8.7.0: resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} @@ -17147,7 +17777,6 @@ packages: optional: true utf-8-validate: optional: true - dev: true /xml-name-validator/3.0.0: resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} @@ -17188,9 +17817,12 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} + /yallist/2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + dev: false + /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true /yaml/1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} @@ -17204,7 +17836,6 @@ packages: /yargs-parser/20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} - dev: true /yargs-parser/21.0.1: resolution: {integrity: sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==} @@ -17221,7 +17852,6 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.9 - dev: true /yargs/17.5.1: resolution: {integrity: sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==} @@ -17248,7 +17878,6 @@ packages: /yocto-queue/0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - dev: true /zustand/3.7.2: resolution: {integrity: sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==} diff --git a/workspace.json b/workspace.json index 5124ddcf9..c221a46c1 100644 --- a/workspace.json +++ b/workspace.json @@ -26,6 +26,7 @@ "datasource-remote-kv": "libs/datasource/remote-kv", "datasource-state": "libs/datasource/state", "framework-virgo": "libs/framework/virgo", + "keck": "apps/keck", "ligo-virgo": "apps/ligo-virgo", "utils": "libs/utils" }