diff --git a/.github/actions/setup-indy-pool/action.yml b/.github/actions/setup-indy-pool/action.yml deleted file mode 100644 index 791548b8..00000000 --- a/.github/actions/setup-indy-pool/action.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: Setup Indy Pool -description: Setup an Indy ledger pool and register test did on the ledger -author: 'timo@animo.id' - -inputs: - seed: - description: Seed to register on the ledger - required: true - -runs: - using: composite - steps: - - name: Start indy pool - run: | - docker build -f network/indy-pool.dockerfile -t indy-pool . - docker run -d --name indy-pool -p 9701-9708:9701-9708 indy-pool - shell: bash - - - name: Setup Indy CLI - run: docker exec indy-pool indy-cli-setup - shell: bash - - - name: Register DID on ledger - run: docker exec indy-pool add-did-from-seed ${{ inputs.seed }} TRUSTEE - shell: bash - -branding: - icon: scissors - color: purple diff --git a/.github/actions/setup-libindy/action.yml b/.github/actions/setup-libindy/action.yml deleted file mode 100644 index 086635ee..00000000 --- a/.github/actions/setup-libindy/action.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Setup Libindy -description: Download and install the libindy binary from the sovrin repository -author: 'timo@animo.id' - -runs: - using: composite - steps: - - name: Setup Indy - run: | - sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys CE7709D068DB5E88 - sudo add-apt-repository "deb https://repo.sovrin.org/sdk/deb bionic stable" - sudo apt-get update -y - sudo apt-get install -y --allow-unauthenticated libindy - shell: bash - -branding: - icon: scissors - color: purple diff --git a/.github/workflows/continuous-deployment.yml b/.github/workflows/continuous-deployment.yml index 9f1a6260..028f853d 100644 --- a/.github/workflows/continuous-deployment.yml +++ b/.github/workflows/continuous-deployment.yml @@ -4,6 +4,9 @@ on: push: tags: - rest-v* + branches: + - main + workflow_dispatch: env: IMAGE_NAME: ghcr.io/openwallet-foundation/credo-rest @@ -11,27 +14,19 @@ env: jobs: release-rest-docker-image: runs-on: ubuntu-latest + permissions: + contents: read + packages: write steps: - # Initiate release process if release was created - name: Checkout credo-ts-ext uses: actions/checkout@v4 - # Some packages need indy-sdk for node as part of yarn install - - name: Setup Libindy - uses: ./.github/actions/setup-libindy - - - name: Setup node v18 - uses: actions/setup-node@v4 + - name: Log in to the Container registry + uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 with: - node-version: 18 - registry-url: 'https://registry.npmjs.org/' - cache: yarn - - - name: Install dependencies - run: yarn install --frozen-lockfile - - - name: Build rest package - run: yarn workspace @credo-ts/rest build + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} - name: Extract metadata (tags, labels) for Docker id: meta @@ -42,7 +37,7 @@ jobs: - name: Build and push Docker image uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc with: - context: ./packages/rest + context: . file: ./packages/rest/Dockerfile push: true tags: ${{ steps.meta.outputs.tags }} diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 8fe00819..af44b647 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -7,10 +7,6 @@ on: push: branches: [main, 'credo-**'] -env: - TEST_AGENT_PUBLIC_DID_SEED: 000000000000000000000000Trustee9 - GENESIS_TXN_PATH: network/genesis/local-genesis.txn - # Make sure we're not running multiple release steps at the same time as this can give issues with determining the next npm version to release. # Ideally we only add this to the 'release' job so it doesn't limit PR runs, but github can't guarantee the job order in that case: # "When concurrency is specified at the job level, order is not guaranteed for jobs or runs that queue within 5 minutes of each other." @@ -81,14 +77,6 @@ jobs: - name: Checkout credo-ts-ext uses: actions/checkout@v4 - # setup dependencies - - name: Setup Libindy - uses: ./.github/actions/setup-libindy - - name: Setup Indy Pool - uses: ./.github/actions/setup-indy-pool - with: - seed: ${TEST_AGENT_PUBLIC_DID_SEED} - - name: Setup node ${{ matrix.node-version }} uses: actions/setup-node@v4 with: @@ -99,17 +87,8 @@ jobs: - name: Install dependencies run: yarn install - - name: Run tests for Push notifications - run: TEST_AGENT_PUBLIC_DID_SEED=${TEST_AGENT_PUBLIC_DID_SEED} GENESIS_TXN_PATH=${GENESIS_TXN_PATH} yarn test push-notifications --coverage - - - name: Run tests for React hooks - run: TEST_AGENT_PUBLIC_DID_SEED=${TEST_AGENT_PUBLIC_DID_SEED} GENESIS_TXN_PATH=${GENESIS_TXN_PATH} yarn test react-hooks --coverage - - - name: Run tests for Redux store - run: TEST_AGENT_PUBLIC_DID_SEED=${TEST_AGENT_PUBLIC_DID_SEED} GENESIS_TXN_PATH=${GENESIS_TXN_PATH} yarn test redux-store --coverage - - - name: Run tests for Rest - run: TEST_AGENT_PUBLIC_DID_SEED=${TEST_AGENT_PUBLIC_DID_SEED} GENESIS_TXN_PATH=${GENESIS_TXN_PATH} yarn test rest --coverage + - name: Run tests + run: yarn test --coverage - uses: codecov/codecov-action@v1 if: always() diff --git a/.prettierignore b/.prettierignore index 223829f1..c741964c 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,4 +4,4 @@ build .idea coverage CHANGELOG.md -routes \ No newline at end of file +generated \ No newline at end of file diff --git a/README.md b/README.md index 00898260..e908abf0 100644 --- a/README.md +++ b/README.md @@ -51,13 +51,13 @@ If you're just getting started the [Credo repo](https://github.com/openwallet-fo All packages are placed in the [`packages/`](./packages) directory. -| Package | Version | Description | -| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | -| [`@credo-ts/rest`](https://www.npmjs.com/package/@credo-ts/rest) | ![@credo-ts/rest version](https://img.shields.io/npm/v/@credo-ts/rest) | REST endpoint wrapper for using your agent over HTTP | -| [`@credo-ts/react-hooks`](https://www.npmjs.com/package/@credo-ts/react-hooks) | ![@credo-ts/react-hooks version](https://img.shields.io/npm/v/@credo-ts/react-hooks) | React Hooks for data handling and agent interaction | -| [`@credo-ts/redux-store`](https://www.npmjs.com/package/@credo-ts/redux-store) | ![@credo-ts/redux-store version](https://img.shields.io/npm/v/@credo-ts/redux-store) | Redux Toolkit wrapper around Credo | -| [`@credo-ts/push-notifications`](https://www.npmjs.com/package/@credo-ts/push-notifications) | ![@credo-ts/push-notifications version](https://img.shields.io/npm/v/@credo-ts/push-notifications) | Push notification plugin for Credo | -| [`@credo-ts/transport-ble`](https://www.npmjs.com/package/@credo-ts/transport-ble) | ![@credo-ts/transport-ble version](https://img.shields.io/npm/v/@credo-ts/transport-ble) | Bluetooth Low Energy transport for Credo | +| Package | Version | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | --------------------------------------------------- | +| [`@credo-ts/rest`](https://www.npmjs.com/package/@credo-ts/rest) | ![@credo-ts/rest version](https://img.shields.io/npm/v/@credo-ts/rest) | Rest API for using Credo over HTTP | +| [`@credo-ts/react-hooks`](https://www.npmjs.com/package/@credo-ts/react-hooks) | ![@credo-ts/react-hooks version](https://img.shields.io/npm/v/@credo-ts/react-hooks) | React Hooks for data handling and agent interaction | +| [`@credo-ts/redux-store`](https://www.npmjs.com/package/@credo-ts/redux-store) | ![@credo-ts/redux-store version](https://img.shields.io/npm/v/@credo-ts/redux-store) | Redux Toolkit wrapper around Credo | +| [`@credo-ts/push-notifications`](https://www.npmjs.com/package/@credo-ts/push-notifications) | ![@credo-ts/push-notifications version](https://img.shields.io/npm/v/@credo-ts/push-notifications) | Push notification plugin for Credo | +| [`@credo-ts/transport-ble`](https://www.npmjs.com/package/@credo-ts/transport-ble) | ![@credo-ts/transport-ble version](https://img.shields.io/npm/v/@credo-ts/transport-ble) | Bluetooth Low Energy transport for Credo | ## Contributing diff --git a/package.json b/package.json index 1a00e723..1b54ac5d 100644 --- a/package.json +++ b/package.json @@ -3,45 +3,9 @@ "private": true, "license": "Apache-2.0", "description": "Monorepo containing extensions for Credo", - "workspaces": { - "packages": [ - "packages/*" - ], - "nohoist": [ - "@credo-ts/*", - "**/@credo-ts/*", - "**/@credo-ts/*/**", - "@credo-ts/*/**", - "@aries-framework/*", - "**/@aries-framework/*", - "**/@aries-framework/*/**", - "@aries-framework/*/**", - "@hyperledger/*", - "**/@hyperledger/*", - "**/@hyperledger/*/**", - "@hyperledger/*/**", - "tsyringe", - "**/tsyringe", - "**/tsyringe/**", - "tsyringe/**", - "node-fetch", - "**/node-fetch", - "**/node-fetch/**", - "node-fetch/**", - "reflect-metadata", - "**/reflect-metadata", - "**/reflect-metadata/**", - "reflect-metadata/**", - "class-validator", - "**/class-validator", - "**/class-validator/**", - "class-validator/**", - "class-transformer", - "**/class-transformer", - "**/class-transformer/**", - "class-transformer/**" - ] - }, + "workspaces": [ + "packages/*" + ], "repository": { "url": "https://github.com/openwallet-foundation/credo-ts-ext", "type": "git" @@ -78,10 +42,9 @@ "rimraf": "^5.0.5" }, "engines": { - "node": ">= 16" + "node": ">= 18" }, "resolutions": { - "@types/indy-sdk": "1.16.9", "@jest/types": "^29.5.0", "@types/node": "^18.0.0" } diff --git a/packages/rest/Dockerfile b/packages/rest/Dockerfile index 49f6a8c9..276416fb 100644 --- a/packages/rest/Dockerfile +++ b/packages/rest/Dockerfile @@ -1,40 +1,49 @@ -FROM ubuntu:18.04 as base +FROM node:20 as all-dependencies -ENV DEBIAN_FRONTEND noninteractive +WORKDIR /all-dependencies -RUN apt-get update -y && apt-get install -y \ - software-properties-common \ - apt-transport-https \ - curl \ - # Only needed to build indy-sdk - build-essential +# Copy files required for yarn install +COPY package.json package.json +COPY yarn.lock yarn.lock +COPY packages/rest/package.json packages/rest/package.json -# libindy -RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys CE7709D068DB5E88 -RUN add-apt-repository "deb https://repo.sovrin.org/sdk/deb bionic stable" +# Install dependencies +RUN yarn install -# nodejs -RUN curl -sL https://deb.nodesource.com/setup_16.x | bash +# The build stage installs all node_modules (also dev) +# and build the JS files to run the REST server +FROM all-dependencies as build -# yarn -RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ - echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list +# Copy remaining files for rest package and build the JS files +COPY tsconfig.build.json tsconfig.build.json +COPY packages/rest packages/rest +WORKDIR /all-dependencies/packages/rest +RUN yarn build -# install depdencies -RUN apt-get update -y && apt-get install -y --allow-unauthenticated \ - libindy \ - nodejs +# The production-dependencies stage installs only the production node_modules +# It is based on the all-dependencies so it can use the yarn-cache and doesn't +# have to re-fetch all deps (as prod deps are a subset of all deps) +FROM all-dependencies as production-dependencies -# Install yarn seperately due to `no-install-recommends` to skip nodejs install -RUN apt-get install -y --no-install-recommends yarn +WORKDIR /production-dependencies -# Credo specifc setup -WORKDIR /www +COPY packages/rest/package.json package.json +COPY yarn.lock yarn.lock -COPY bin ./bin -COPY package.json package.json RUN yarn install --production -COPY build ./build +FROM node:20 as final + +WORKDIR /app + +# Copy build files +COPY --from=build /all-dependencies/packages/rest/build build + +# Copy dependencies +COPY --from=production-dependencies /production-dependencies/node_modules node_modules + +# Copy source files +COPY packages/rest/bin bin +COPY packages/rest/package.json package.json ENTRYPOINT [ "./bin/credo-rest.js", "start" ] diff --git a/packages/rest/README.md b/packages/rest/README.md index 06789a90..5a467790 100644 --- a/packages/rest/README.md +++ b/packages/rest/README.md @@ -36,149 +36,4 @@ The Credo REST API is the most convenient way for self-sovereign identity (SSI) ### Quick start -The REST API provides an OpenAPI schema that can easily be viewed using the SwaggerUI that is provided with the server. The docs can be viewed on the `/docs` endpoint (e.g. http://localhost:3000/docs). - -> The OpenAPI spec is generated from the model classes used by Credo. Due to limitations in the inspection of these classes, the generated schema does not always exactly match the expected format. Keep this in mind when using this package. If you encounter any issues, feel free to open an issue. - -#### Using the CLI - -Using the CLI is the easiest way to get started with the REST API. - -**With Docker (easiest)** - -Make sure you have [Docker](https://docs.docker.com/get-docker/) installed. To get a minimal version of the agent running the following command is sufficient: - -```sh -docker run -p 5000:5000 -p 3000:3000 ghcr.io/openwallet-foundation/credo-rest \ - --label "Credo Rest" \ - --wallet-id "walletId" \ - --wallet-key "walletKey" \ - --endpoint http://localhost:5000 \ - --admin-port 3000 \ - --outbound-transport http \ - --inbound-transport http 5000 -``` - -See the [docker-compose.yml](https://github.com/openwallet-foundation/credo-ts-ext/tree/main/docker-compose.yml) file for an example of using the credo-rest image with Docker Compose. - -> ⚠️ The Docker image is not optimized for ARM architectures and won't work on Apple Silicon Macs. See the **Directly on Computer** below on how to run it directly on your computer without Docker. - -**Directly on Computer** - -To run Credo REST API directly on your computer you need to have the indy-sdk installed. Follow the Indy [installation steps](https://github.com/openwallet-foundation/credo-ts/tree/main/docs/libindy) for your platform and verify Indy is installed. - -Once you have installed Indy, you can start the REST server using the following command: - -```sh -npx -p @credo-ts/rest credo-rest start \ - --label "Credo Rest" \ - --wallet-id "walletId" \ - --wallet-key "walletKey" \ - --endpoint http://localhost:5000 \ - --admin-port 3000 \ - --outbound-transport http \ - --inbound-transport http 5000 -``` - -**Configuration** - -To find out all available configuration options from the CLI, you can run the CLI command with `--help`. This will print a full list of all available options. - -```sh -# With docker -docker run ghcr.io/openwallet-foundation/credo-rest --help - -# Directly on computer -npx -p @credo-ts/rest credo-rest start --help -``` - -It is also possible to configure the REST API using a json config. When providing a lot of configuration options, this is definitely the easiest way to use configure the agent. All properties should use camelCase for the key names. See the example [CLI Config](https://github.com/openwallet-foundation/credo-ts-ext/tree/main/packages/rest/samples/cliConfig.json) for an detailed example. - -```json -{ - "label": "Credo Rest Agent", - "walletId": "walletId", - "walletKey": "walletKey" - // ... other config options ... // -} -``` - -As a final option it is possible to configure the agent using environment variables. All properties are prefixed by `CREDO_REST` transformed to UPPER_SNAKE_CASE. - -```sh -# With docker -docker run -e CREDO_REST_WALLET_KEY=my-secret-key ghcr.io/hyperledger/credo-rest ... - -# Directly on computer -CREDO_REST_WALLET_KEY="my-secret-key" npx -p @credo-ts/rest credo-rest start ... -``` - -#### Starting Own Server - -Starting your own server is more involved than using the CLI, but allows more fine-grained control over the settings and allows you to extend the REST API with custom endpoints. - -You can create an agent instance and import the `startServer` method from the `rest` package. That's all you have to do. - -```ts -import { startServer } from '@credo-ts/rest' -import { Agent } from '@aries-framework/core' -import { agentDependencies } from '@aries-framework/node' - -// The startServer function requires an initialized agent and a port. -// An example of how to setup an agent is located in the `samples` directory. -const run = async () => { - const agent = new Agent( - { - // ... Credo Config ... // - }, - agentDependencies, - ) - await startServer(agent, { port: 3000 }) -} - -// A Swagger (OpenAPI) definition is exposed on http://localhost:3000/docs -run() -``` - -### WebSocket & webhooks - -The REST API provides the option to connect as a client and receive events emitted from your agent using WebSocket and webhooks. - -You can hook into the events listener using webhooks, or connect a WebSocket client directly to the default server. - -The currently supported events are: - -- `Basic messages` -- `Connections` -- `Credentials` -- `Proofs` - -When using the CLI, a webhook url can be specified using the `--webhook-url` config option. - -When using the REST server as an library, the WebSocket server and webhook url can be configured in the `startServer` and `setupServer` methods. - -```ts -// You can either call startServer() or setupServer() and pass the ServerConfig interface with a webhookUrl and/or a WebSocket server - -const run = async (agent: Agent) => { - const config = { - port: 3000, - webhookUrl: 'http://test.com', - socketServer: new Server({ port: 8080 }), - } - await startServer(agent, config) -} -run() -``` - -The `startServer` method will create and start a WebSocket server on the default http port if no socketServer is provided, and will use the provided socketServer if available. - -However, the `setupServer` method does not automatically create a socketServer, if one is not provided in the config options. - -In case of an event, we will send the event to the webhookUrl with the topic of the event added to the url (http://test.com/{topic}). - -So in this case when a connection event is triggered, it will be sent to: http://test.com/connections - -The payload of the webhook contains the serialized record related to the topic of the event. For the `connections` topic this will be a `ConnectionRecord`, for the `credentials` topic it will be a `CredentialRecord`, and so on. - -For the WebSocket clients, the events are sent as JSON stringified objects +See the [Credo REST API docs](https://credo.js.org/guides/extensions/rest) for installation instructions. diff --git a/packages/rest/bin/afj-rest.js b/packages/rest/bin/afj-rest.js deleted file mode 100755 index 3b416b16..00000000 --- a/packages/rest/bin/afj-rest.js +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env node -/* eslint-disable @typescript-eslint/no-var-requires, no-undef */ - -const { runCliServer } = require('../build/cli') - -runCliServer() diff --git a/packages/rest/bin/credo-rest.js b/packages/rest/bin/credo-rest.js new file mode 100755 index 00000000..f62c6368 --- /dev/null +++ b/packages/rest/bin/credo-rest.js @@ -0,0 +1,21 @@ +#!/usr/bin/env node +/* eslint-disable @typescript-eslint/no-var-requires, no-undef */ + +var process = require('process') + +const { runCliServer } = require('../build/cli') +let shutdownAgent + +process.on('SIGINT', async () => { + try { + if (shutdownAgent) { + await shutdownAgent() + } + } finally { + process.exit(0) + } +}) + +runCliServer().then(({ shutdown }) => { + shutdownAgent = shutdown +}) diff --git a/packages/rest/package.json b/packages/rest/package.json index 78614736..9cd84202 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -10,7 +10,7 @@ "access": "public" }, "license": "Apache-2.0", - "description": "Rest endpoint wrapper for using your agent over HTTP", + "description": "Rest API for using Credo over HTTP", "homepage": "https://github.com/openwallet-foundation/credo-ts-ext/tree/main/packages/rest", "repository": { "type": "git", @@ -22,16 +22,24 @@ }, "scripts": { "tsoa": "tsoa spec-and-routes", - "dev": "tsoa spec-and-routes && tsnd --respawn samples/sampleWithApp.ts", + "dev": "yarn tsoa && tsnd --respawn samples/sampleWithApp.ts", "build": "yarn run clean && yarn run compile", "clean": "rimraf -rf ./build", - "compile": "tsoa spec-and-routes && tsc -p tsconfig.build.json", + "compile": "yarn tsoa && tsc -p tsconfig.build.json", "prepublishOnly": "yarn run build", "test": "jest" }, "dependencies": { - "@aries-framework/core": "^0.2.3", - "@aries-framework/node": "^0.2.3", + "@credo-ts/anoncreds": "^0.5.0", + "@credo-ts/askar": "^0.5.0", + "@credo-ts/core": "^0.5.0", + "@credo-ts/indy-vdr": "^0.5.0", + "@credo-ts/node": "^0.5.0", + "@credo-ts/tenants": "^0.5.0", + "@hyperledger/anoncreds-nodejs": "^0.2.1", + "@hyperledger/aries-askar-nodejs": "^0.2.0", + "@hyperledger/indy-vdr-nodejs": "^0.2.0", + "@types/ref-array-di": "^1.2.8", "@types/ws": "^7.4.7", "body-parser": "^1.20.0", "cors": "^2.8.5", @@ -39,7 +47,7 @@ "node-fetch": "^2.6.7", "swagger-ui-express": "^4.4.0", "tslog": "^3.3.3", - "tsoa": "^4.1.2", + "tsoa": "^6.2.0", "tsyringe": "^4.7.0", "ws": "^7.5.3", "yargs": "^17.3.1" @@ -53,12 +61,14 @@ "@types/express": "^4.17.13", "@types/multer": "^1.4.7", "@types/node": "^16.7.10", + "@types/node-fetch": "^2.6.4", + "@types/ref-struct-di": "^1.1.9", "@types/supertest": "^2.0.12", "@types/swagger-ui-express": "^4.1.3", "@types/uuid": "^8.3.4", - "ngrok": "^4.3.1", + "reflect-metadata": "^0.1.13", + "rxjs": "^7.8.1", "supertest": "^6.2.3", - "ts-node-dev": "^2.0.0", - "reflect-metadata": "^0.1.13" + "ts-node-dev": "^2.0.0" } } diff --git a/packages/rest/samples/cliConfig.json b/packages/rest/samples/cliConfig.json index 9655ba87..f4d443d1 100644 --- a/packages/rest/samples/cliConfig.json +++ b/packages/rest/samples/cliConfig.json @@ -9,13 +9,13 @@ "isProduction": false } ], - "publicDidSeed": "testtesttesttesttesttesttesttest", "endpoint": ["http://localhost:5000", "ws://localhost:5001"], "autoAcceptConnections": false, "autoAcceptCredentials": "never", "autoAcceptProofs": "never", - "useLegacyDidSovPrefix": true, - "logLevel": 5, + "useDidSovPrefixWhereAllowed": false, + "autoUpdateStorageOnStartup": true, + "logLevel": 1, "inboundTransport": [ { "transport": "http", @@ -30,5 +30,6 @@ "autoAcceptMediationRequests": false, "connectionImageUrl": "https://image.com/image.png", "webhookUrl": "https://my-webhook-server", - "adminPort": 3000 + "adminPort": 3000, + "multiTenant": true } diff --git a/packages/rest/samples/sample.ts b/packages/rest/samples/sample.ts index 9cb09840..98a3868d 100644 --- a/packages/rest/samples/sample.ts +++ b/packages/rest/samples/sample.ts @@ -1,17 +1,12 @@ import type { ServerConfig } from '../src/utils/ServerConfig' -import { connect } from 'ngrok' - import { startServer } from '../src/index' import { setupAgent } from '../src/utils/agent' const run = async () => { - const endpoint = await connect(3001) - const agent = await setupAgent({ - port: 3001, - publicDidSeed: 'testtesttesttesttesttesttesttest', - endpoints: [endpoint], + httpInboundTransportPort: 3001, + endpoints: ['http://localhost:3001'], name: 'Aries Test Agent', }) diff --git a/packages/rest/samples/sampleWithApp.ts b/packages/rest/samples/sampleWithApp.ts index 52453124..93cdf301 100644 --- a/packages/rest/samples/sampleWithApp.ts +++ b/packages/rest/samples/sampleWithApp.ts @@ -1,19 +1,16 @@ import type { ServerConfig } from '../src/utils/ServerConfig' -import { AgentConfig } from '@aries-framework/core' import bodyParser from 'body-parser' import express from 'express' -import { connect } from 'ngrok' import { startServer } from '../src/index' import { setupAgent } from '../src/utils/agent' const run = async () => { - const endpoint = await connect(3001) + const endpoint = process.env.AGENT_ENDPOINT ?? 'http://localhost:3001' const agent = await setupAgent({ - port: 3001, - publicDidSeed: 'testtesttesttesttesttesttesttest', + httpInboundTransportPort: 3001, endpoints: [endpoint], name: 'Aries Test Agent', }) @@ -22,7 +19,7 @@ const run = async () => { const jsonParser = bodyParser.json() app.post('/greeting', jsonParser, (req, res) => { - const config = agent.injectionContainer.resolve(AgentConfig) + const config = agent.config res.send(`Hello, ${config.label}!`) }) diff --git a/packages/rest/src/authentication.ts b/packages/rest/src/authentication.ts new file mode 100644 index 00000000..b99ac06b --- /dev/null +++ b/packages/rest/src/authentication.ts @@ -0,0 +1,93 @@ +import type { RestAgent, RestRootAgent, RestRootAgentWithTenants, RestTenantAgent } from './utils/agent' +import type { Request } from 'express' + +import { Agent } from '@credo-ts/core' +import { container } from 'tsyringe' + +import { StatusException } from './error' + +export type RequestWithAgent = RequestWithRootAgent | RequestWithTenantAgent | RequestWithRootTenantAgent + +export type RequestWithTenantAgent = Request & { + user: { + agent: RestTenantAgent + } +} + +export type RequestWithRootAgent = Request & { + user: { + agent: RestRootAgent + } +} + +export type RequestWithRootTenantAgent = Request & { + user: { + agent: RestRootAgentWithTenants + } +} + +export async function expressAuthentication(request: Request, securityName: string, scopes?: string[]) { + if (securityName === 'tenants') { + const rootAgent = container.resolve(Agent) + let tenantId = request.headers['x-tenant-id'] + + // If tenants module is not enabled, we always return the root tenant agent + if (!('tenants' in rootAgent.modules)) { + if (tenantId) { + return Promise.reject( + new StatusException( + 'x-tenant-id header was provided, but tenant module is not enabled. Use --multi-tenant to enable multitenant capabilities', + 401, + ), + ) + } + + if (scopes?.includes('admin')) { + return Promise.reject( + new StatusException( + 'Unable to use tenant admin features without tenant module enabled. Use --multi-tenant to enable multitenant capabilities', + 401, + ), + ) + } + + return Promise.resolve({ agent: rootAgent }) + } + + // If tenant-id is not provided, we assume we're the default tenant + tenantId = tenantId || 'default' + if (typeof tenantId !== 'string') { + return Promise.reject(new StatusException('Invalid tenant id provided', 401)) + } + + let requestAgent: RestAgent + + if (tenantId === 'default') { + if (!scopes || (!scopes.includes('admin') && !scopes.includes('default'))) { + return Promise.reject( + new StatusException( + 'Default tenant is not authorized to access this resource. Set the x-tenant-id to a specific tenant id to access this resource.', + 401, + ), + ) + } + + requestAgent = rootAgent + } else { + if (!scopes || !scopes.includes('tenant')) { + return Promise.reject( + new StatusException( + `Tenant ${tenantId} is not authorized to access this resource. Only the default tenant can access this resource. Omit the x-tenant-id header, or set the value to 'default'`, + 401, + ), + ) + } + + requestAgent = await rootAgent.modules.tenants.getTenantAgent({ tenantId }) + } + + return Promise.resolve({ agent: requestAgent }) + } + + return Promise.reject(new StatusException('Not implemented', 401)) +} diff --git a/packages/rest/src/cli.ts b/packages/rest/src/cli.ts index 7313ad2e..c39f70b2 100644 --- a/packages/rest/src/cli.ts +++ b/packages/rest/src/cli.ts @@ -1,10 +1,12 @@ -import type { InboundTransport, Transports, AriesRestConfig } from './cliAgent' +import type { InboundTransport, Transports, CredoRestConfig } from './cliAgent' +import type { AskarWalletPostgresStorageConfig } from '@credo-ts/askar' import yargs from 'yargs' import { runRestAgent } from './cliAgent' const parsed = yargs + .scriptName('credo-rest') .command('start', 'Start Credo Rest agent') .option('label', { alias: 'l', @@ -24,9 +26,6 @@ const parsed = yargs default: [], coerce: (items: unknown[]) => items.map((i) => (typeof i === 'string' ? JSON.parse(i) : i)), }) - .option('public-did-seed', { - string: true, - }) .option('endpoint', { array: true, }) @@ -34,15 +33,25 @@ const parsed = yargs number: true, default: 3, }) - .option('use-legacy-did-sov-prefix', { + .option('use-did-sov-prefix-where-allowed', { boolean: true, default: false, }) + .option('use-did-key-in-protocols', { + boolean: true, + default: true, + }) .option('outbound-transport', { default: [], choices: ['http', 'ws'], array: true, }) + .option('--multi-tenant', { + boolean: true, + default: false, + describe: + 'Start the agent as a multi-tenant agent. Once enabled, all operations (except tenant management) must be performed under a specific tenant. Tenants can be created in the tenants controller (POST /tenants, see swagger UI), and the scope for a specific tenant can be set using the x-tenant-id header.', + }) .option('inbound-transport', { array: true, default: [], @@ -88,6 +97,10 @@ const parsed = yargs choices: ['always', 'never', 'contentApproved'], default: 'never', }) + .option('auto-update-storage-on-startup', { + boolean: true, + default: true, + }) .option('connection-image-url', { string: true, }) @@ -98,30 +111,72 @@ const parsed = yargs number: true, demandOption: true, }) + .option('storage-type', { + choices: ['sqlite', 'postgres'], + default: 'sqlite', + }) + .option('postgres-host', { + string: true, + }) + .option('postgres-username', { + string: true, + }) + .option('postgres-password', { + string: true, + }) + .check((argv) => { + if ( + argv['storage-type'] === 'postgres' && + (!argv['postgres-host'] || !argv['postgres-username'] || !argv['postgres-password']) + ) { + throw new Error( + "--postgres-host, --postgres-username, and postgres-password are required when setting --storage-type to 'postgres'", + ) + } + + return true + }) .config() .env('CREDO_REST') .parseSync() export async function runCliServer() { - await runRestAgent({ + return runRestAgent({ label: parsed.label, walletConfig: { id: parsed['wallet-id'], key: parsed['wallet-key'], + storage: + parsed['storage-type'] === 'sqlite' + ? { + type: 'sqlite', + } + : ({ + type: 'postgres', + config: { + host: parsed['postgres-host'] as string, + }, + credentials: { + account: parsed['postgres-username'] as string, + password: parsed['postgres-password'] as string, + }, + } satisfies AskarWalletPostgresStorageConfig), }, indyLedgers: parsed['indy-ledger'], - publicDidSeed: parsed['public-did-seed'], endpoints: parsed.endpoint, autoAcceptConnections: parsed['auto-accept-connections'], autoAcceptCredentials: parsed['auto-accept-credentials'], autoAcceptProofs: parsed['auto-accept-proofs'], + autoUpdateStorageOnStartup: parsed['auto-update-storage-on-startup'], autoAcceptMediationRequests: parsed['auto-accept-mediation-requests'], - useLegacyDidSovPrefix: parsed['use-legacy-did-sov-prefix'], + useDidKeyInProtocols: parsed['use-did-key-in-protocols'], + useDidSovPrefixWhereAllowed: parsed['use-legacy-did-sov-prefix'], logLevel: parsed['log-level'], inboundTransports: parsed['inbound-transport'], outboundTransports: parsed['outbound-transport'], connectionImageUrl: parsed['connection-image-url'], webhookUrl: parsed['webhook-url'], adminPort: parsed['admin-port'], - } as AriesRestConfig) + multiTenant: parsed['multi-tenant'], + } as CredoRestConfig) } diff --git a/packages/rest/src/cliAgent.ts b/packages/rest/src/cliAgent.ts index 881a9bd6..e1f8cdae 100644 --- a/packages/rest/src/cliAgent.ts +++ b/packages/rest/src/cliAgent.ts @@ -1,11 +1,19 @@ -import type { IndyPoolConfig, InitConfig, AutoAcceptCredential, AutoAcceptProof } from '@aries-framework/core' -import type { WalletConfig } from '@aries-framework/core/build/types' - -import { HttpOutboundTransport, WsOutboundTransport, LogLevel, Agent } from '@aries-framework/core' -import { agentDependencies, HttpInboundTransport, WsInboundTransport } from '@aries-framework/node' +import type { InitConfig, WalletConfig } from '@credo-ts/core' +import type { IndyVdrPoolConfig } from '@credo-ts/indy-vdr' + +import { + HttpOutboundTransport, + WsOutboundTransport, + LogLevel, + Agent, + AutoAcceptCredential, + AutoAcceptProof, +} from '@credo-ts/core' +import { agentDependencies, HttpInboundTransport, WsInboundTransport } from '@credo-ts/node' import { readFile } from 'fs/promises' import { setupServer } from './server' +import { getAgentModules } from './utils/agent' import { TsLogger } from './utils/logger' export type Transports = 'ws' | 'http' @@ -24,16 +32,18 @@ const outboundTransportMapping = { ws: WsOutboundTransport, } as const -export interface AriesRestConfig { +export interface CredoRestConfig { label: string + multiTenant: boolean walletConfig: WalletConfig - indyLedgers?: IndyPoolConfig[] - publicDidSeed?: string + indyLedgers: IndyVdrPoolConfig[] endpoints?: string[] autoAcceptConnections?: boolean autoAcceptCredentials?: AutoAcceptCredential autoAcceptProofs?: AutoAcceptProof - useLegacyDidSovPrefix?: boolean + autoUpdateStorageOnStartup?: boolean + useDidKeyInProtocols?: boolean + useDidSovPrefixWhereAllowed?: boolean logLevel?: LogLevel inboundTransports?: InboundTransport[] outboundTransports?: Transports[] @@ -51,13 +61,19 @@ export async function readRestConfig(path: string) { return config } -export async function runRestAgent(restConfig: AriesRestConfig) { +export async function runRestAgent(restConfig: CredoRestConfig) { const { logLevel, inboundTransports = [], outboundTransports = [], webhookUrl, adminPort, + indyLedgers, + autoAcceptConnections = true, + autoAcceptCredentials = AutoAcceptCredential.ContentApproved, + autoAcceptMediationRequests = true, + autoAcceptProofs = AutoAcceptProof.ContentApproved, + multiTenant, ...credoConfig } = restConfig @@ -68,7 +84,21 @@ export async function runRestAgent(restConfig: AriesRestConfig) { logger, } - const agent = new Agent(agentConfig, agentDependencies) + const maybeLedgers = indyLedgers.length > 0 ? (indyLedgers as [IndyVdrPoolConfig, ...IndyVdrPoolConfig[]]) : undefined + const modules = getAgentModules({ + autoAcceptConnections, + autoAcceptProofs, + autoAcceptCredentials, + autoAcceptMediationRequests, + indyLedgers: maybeLedgers, + multiTenant, + }) + + const agent = new Agent({ + config: agentConfig, + dependencies: agentDependencies, + modules, + }) // Register outbound transports for (const outboundTransport of outboundTransports) { @@ -88,7 +118,16 @@ export async function runRestAgent(restConfig: AriesRestConfig) { port: adminPort, }) - app.listen(adminPort, () => { + const server = app.listen(adminPort, () => { logger.info(`Successfully started server on port ${adminPort}`) }) + + return { + shutdown: async () => { + agent.config.logger.info('Agent shutdown initiated') + server.close() + await agent.shutdown() + agent.config.logger.info('Agent shutdown complete') + }, + } } diff --git a/packages/rest/src/controllers/agent/AgentController.ts b/packages/rest/src/controllers/agent/AgentController.ts index c7b00407..be3c1169 100644 --- a/packages/rest/src/controllers/agent/AgentController.ts +++ b/packages/rest/src/controllers/agent/AgentController.ts @@ -1,30 +1,30 @@ -import type { AgentInfo } from '../types' +import type { AgentInfo } from './AgentControllerTypes' -import { Agent } from '@aries-framework/core' -import { Controller, Get, Route, Tags } from 'tsoa' +import { Controller, Example, Get, Request, Route, Security, Tags } from 'tsoa' import { injectable } from 'tsyringe' +import { RequestWithRootAgent } from '../../authentication' + +import { agentInfoExample } from './AgentControllerExamples' + @Tags('Agent') @Route('/agent') +@Security('tenants', ['default']) @injectable() export class AgentController extends Controller { - private agent: Agent - - public constructor(agent: Agent) { - super() - this.agent = agent - } - /** * Retrieve basic agent information */ @Get('/') - public async getAgentInfo(): Promise { + @Example(agentInfoExample) + public async getAgentInfo(@Request() request: RequestWithRootAgent): Promise { + // We want to strip some properties from the config + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { agentDependencies, walletConfig, logger, ...config } = request.user.agent.config.toJSON() + return { - label: this.agent.config.label, - endpoints: this.agent.config.endpoints, - isInitialized: this.agent.isInitialized, - publicDid: this.agent.publicDid, + config, + isInitialized: request.user.agent.isInitialized, } } } diff --git a/packages/rest/src/controllers/agent/AgentControllerExamples.ts b/packages/rest/src/controllers/agent/AgentControllerExamples.ts new file mode 100644 index 00000000..f62144d9 --- /dev/null +++ b/packages/rest/src/controllers/agent/AgentControllerExamples.ts @@ -0,0 +1,10 @@ +import type { AgentInfo } from './AgentControllerTypes' + +// NOTE: using satisfies breaks the tsoa example generation +export const agentInfoExample: AgentInfo = { + config: { + label: 'Example Agent', + endpoints: ['http://localhost:3000'], + }, + isInitialized: true, +} diff --git a/packages/rest/src/controllers/agent/AgentControllerTypes.ts b/packages/rest/src/controllers/agent/AgentControllerTypes.ts new file mode 100644 index 00000000..2f328073 --- /dev/null +++ b/packages/rest/src/controllers/agent/AgentControllerTypes.ts @@ -0,0 +1,17 @@ +import type { AgentConfig } from '@credo-ts/core' + +// NOTE: using export type generated weird tsoa model name +export interface ApiAgentConfig + extends Omit, 'walletConfig' | 'logger' | 'agentDependencies'> {} + +export interface AgentInfo { + /** + * The config of the agent. + */ + config: ApiAgentConfig + + /** + * Whether the agent has been initialized. + */ + isInitialized: boolean +} diff --git a/packages/rest/src/controllers/agent/__tests__/AgentController.test.ts b/packages/rest/src/controllers/agent/__tests__/AgentController.test.ts new file mode 100644 index 00000000..3a0491c2 --- /dev/null +++ b/packages/rest/src/controllers/agent/__tests__/AgentController.test.ts @@ -0,0 +1,39 @@ +import type { Agent } from '@credo-ts/core' +import type { Express } from 'express' + +import request from 'supertest' + +import { getTestAgent } from '../../../../tests/utils/helpers' +import { setupServer } from '../../../server' + +describe('AgentController', () => { + let app: Express + let agent: Agent + + beforeAll(async () => { + agent = await getTestAgent('Agent REST Agent Test') + app = await setupServer(agent, { port: 3000 }) + }) + + afterAll(async () => { + await agent.shutdown() + await agent.wallet.delete() + }) + + describe('Get agent info', () => { + test('should return agent information', async () => { + const response = await request(app).get('/agent') + + expect(response.body).toEqual({ + isInitialized: true, + config: { + label: agent.config.label, + endpoints: ['internal'], + useDidSovPrefixWhereAllowed: true, + autoUpdateStorageOnStartup: true, + }, + }) + expect(response.statusCode).toBe(200) + }) + }) +}) diff --git a/packages/rest/src/controllers/anoncreds/AnonCredsController.ts b/packages/rest/src/controllers/anoncreds/AnonCredsController.ts new file mode 100644 index 00000000..f440bb7d --- /dev/null +++ b/packages/rest/src/controllers/anoncreds/AnonCredsController.ts @@ -0,0 +1,229 @@ +import type { + AnonCredsGetCredentialDefinitionFailedResponse, + AnonCredsGetCredentialDefinitionSuccessResponse, + AnonCredsGetSchemaFailedResponse, + AnonCredsGetSchemaSuccessResponse, + AnonCredsRegisterCredentialDefinitionActionResponse, + AnonCredsRegisterCredentialDefinitionFailedResponse, + AnonCredsRegisterCredentialDefinitionSuccessResponse, + AnonCredsRegisterCredentialDefinitionWaitResponse, + AnonCredsRegisterSchemaActionResponse, + AnonCredsRegisterSchemaFailedResponse, + AnonCredsRegisterSchemaSuccessResponse, + AnonCredsRegisterSchemaWaitResponse, +} from './AnonCredsControllerTypes' + +import { Body, Controller, Example, Response, Get, Path, Post, Route, Tags, Security, Request } from 'tsoa' +import { injectable } from 'tsyringe' + +import { RequestWithAgent } from '../../authentication' +import { alternativeResponse } from '../../utils/response' + +import { + anonCredsGetCredentialDefinitionFailedExample, + anonCredsGetCredentialDefinitionSuccessExample, + anonCredsGetSchemaFailedExample, + anonCredsGetSchemaSuccessExample, + anonCredsRegisterCredentialDefinitionFailedExample, + anonCredsRegisterCredentialDefinitionSuccessExample, + anonCredsRegisterSchemaFailedExample, + anonCredsRegisterSchemaSuccessExample, +} from './AnonCredsControllerExamples' +import { + AnonCredsRegisterSchemaBody, + AnonCredsSchemaId, + AnonCredsCredentialDefinitionId, + AnonCredsRegisterCredentialDefinitionBody, +} from './AnonCredsControllerTypes' + +@Tags('AnonCreds') +@Route('/anoncreds') +@Security('tenants', ['tenant']) +@injectable() +export class AnonCredsController extends Controller { + /** + * Retrieve schema by schema id + */ + @Example(anonCredsGetSchemaSuccessExample) + @Response(404, 'Schema not found', anonCredsGetSchemaFailedExample) + @Response( + 400, + 'Invalid schemaId or unknown AnonCreds method provided', + anonCredsGetSchemaFailedExample, + ) + @Response(500, 'Unknown error retrieving schema', anonCredsGetSchemaFailedExample) + @Get('/schemas/:schemaId') + public async getSchemaById( + @Request() request: RequestWithAgent, + @Path('schemaId') schemaId: AnonCredsSchemaId, + ): Promise { + const schemaResult = await request.user.agent.modules.anoncreds.getSchema(schemaId) + const error = schemaResult.resolutionMetadata?.error + + if (schemaResult.resolutionMetadata.error === 'notFound') { + this.setStatus(404) + return alternativeResponse(schemaResult as AnonCredsGetSchemaFailedResponse) + } + + if (error === 'invalid' || error === 'unsupportedAnonCredsMethod') { + this.setStatus(400) + return alternativeResponse(schemaResult as AnonCredsGetSchemaFailedResponse) + } + + if (error !== undefined || schemaResult.schema === undefined) { + this.setStatus(500) + return alternativeResponse(schemaResult as AnonCredsGetSchemaFailedResponse) + } + + return schemaResult as AnonCredsGetSchemaSuccessResponse + } + + /** + * Creates a new AnonCreds schema and registers the schema in the AnonCreds registry + */ + @Example(anonCredsRegisterSchemaSuccessExample) + @Response( + 500, + 'Unknown error registering schema', + anonCredsRegisterSchemaFailedExample, + ) + @Response(200, 'Action required') + @Response(202, 'Wait for action to complete') + @Post('/schemas') + public async registerSchema( + @Request() request: RequestWithAgent, + @Body() body: AnonCredsRegisterSchemaBody, + ): Promise { + const registerSchemaResult = await request.user.agent.modules.anoncreds.registerSchema({ + schema: body.schema, + options: body.options ?? {}, + }) + + if (registerSchemaResult.schemaState.state === 'failed') { + this.setStatus(500) + return alternativeResponse({ + // NOTE: destructuring the result so ts will correctly infer that 'failed' state + ...registerSchemaResult, + schemaState: registerSchemaResult.schemaState, + }) + } + + if (registerSchemaResult.schemaState.state === 'wait') { + // The request has been accepted for processing, but the processing has not been completed. + this.setStatus(202) + return alternativeResponse({ + ...registerSchemaResult, + schemaState: registerSchemaResult.schemaState, + }) + } + + if (registerSchemaResult.schemaState.state === 'action') { + return alternativeResponse({ + ...registerSchemaResult, + schemaState: registerSchemaResult.schemaState, + }) + } + + return { + ...registerSchemaResult, + schemaState: registerSchemaResult.schemaState, + } + } + /** + * Retrieve credentialDefinition by credentialDefinition id + */ + @Example(anonCredsGetCredentialDefinitionSuccessExample) + @Response( + 404, + 'CredentialDefinition not found', + anonCredsGetCredentialDefinitionFailedExample, + ) + @Response( + 400, + 'Invalid credentialDefinitionId or unknown AnonCreds method provided', + anonCredsGetCredentialDefinitionFailedExample, + ) + @Response( + 500, + 'Unknown error retrieving credentialDefinition', + anonCredsGetCredentialDefinitionFailedExample, + ) + @Get('/credential-definitions/:credentialDefinitionId') + public async getCredentialDefinitionById( + @Request() request: RequestWithAgent, + @Path('credentialDefinitionId') credentialDefinitionId: AnonCredsCredentialDefinitionId, + ): Promise { + const credentialDefinitionResult = + await request.user.agent.modules.anoncreds.getCredentialDefinition(credentialDefinitionId) + const error = credentialDefinitionResult.resolutionMetadata?.error + + if (credentialDefinitionResult.resolutionMetadata?.error === 'notFound') { + this.setStatus(404) + return alternativeResponse(credentialDefinitionResult) + } + + if (error === 'invalid' || error === 'unsupportedAnonCredsMethod') { + this.setStatus(400) + return alternativeResponse(credentialDefinitionResult) + } + + if (error !== undefined || credentialDefinitionResult.credentialDefinition === undefined) { + this.setStatus(500) + return alternativeResponse(credentialDefinitionResult) + } + + return credentialDefinitionResult as AnonCredsGetCredentialDefinitionSuccessResponse + } + + /** + * Creates a new AnonCreds credentialDefinition and registers the credentialDefinition in the AnonCreds registry + */ + @Example(anonCredsRegisterCredentialDefinitionSuccessExample) + @Response( + 500, + 'Unknown error registering credentialDefinition', + anonCredsRegisterCredentialDefinitionFailedExample, + ) + @Response(200, 'Action required') + @Response(202, 'Wait for action to complete') + @Post('/credential-definitions') + public async registerCredentialDefinition( + @Request() request: RequestWithAgent, + @Body() body: AnonCredsRegisterCredentialDefinitionBody, + ): Promise { + const registerCredentialDefinitionResult = await request.user.agent.modules.anoncreds.registerCredentialDefinition({ + credentialDefinition: body.credentialDefinition, + options: body.options ?? {}, + }) + + if (registerCredentialDefinitionResult.credentialDefinitionState.state === 'failed') { + this.setStatus(500) + return alternativeResponse({ + // NOTE: destructuring the result so ts will correctly infer that 'failed' state + ...registerCredentialDefinitionResult, + credentialDefinitionState: registerCredentialDefinitionResult.credentialDefinitionState, + }) + } + + if (registerCredentialDefinitionResult.credentialDefinitionState.state === 'wait') { + // The request has been accepted for processing, but the processing has not been completed. + this.setStatus(202) + return alternativeResponse({ + ...registerCredentialDefinitionResult, + credentialDefinitionState: registerCredentialDefinitionResult.credentialDefinitionState, + }) + } + + if (registerCredentialDefinitionResult.credentialDefinitionState.state === 'action') { + return alternativeResponse({ + ...registerCredentialDefinitionResult, + credentialDefinitionState: registerCredentialDefinitionResult.credentialDefinitionState, + }) + } + + return { + ...registerCredentialDefinitionResult, + credentialDefinitionState: registerCredentialDefinitionResult.credentialDefinitionState, + } + } +} diff --git a/packages/rest/src/controllers/anoncreds/AnonCredsControllerExamples.ts b/packages/rest/src/controllers/anoncreds/AnonCredsControllerExamples.ts new file mode 100644 index 00000000..3d97e56b --- /dev/null +++ b/packages/rest/src/controllers/anoncreds/AnonCredsControllerExamples.ts @@ -0,0 +1,155 @@ +import type { + AnonCredsGetCredentialDefinitionFailedResponse, + AnonCredsGetCredentialDefinitionSuccessResponse, + AnonCredsGetSchemaFailedResponse, + AnonCredsGetSchemaSuccessResponse, + AnonCredsRegisterCredentialDefinitionFailedResponse, + AnonCredsRegisterCredentialDefinitionSuccessResponse, + AnonCredsRegisterSchemaFailedResponse, + AnonCredsRegisterSchemaSuccessResponse, +} from './AnonCredsControllerTypes' + +export const anonCredsGetSchemaSuccessExample: AnonCredsGetSchemaSuccessResponse = { + resolutionMetadata: {}, + schemaMetadata: {}, + schemaId: 'did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/schema-name/1.0', + schema: { + issuerId: 'did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv', + name: 'schema-name', + version: '1.0', + attrNames: ['age'], + }, +} + +export const anonCredsGetSchemaFailedExample: AnonCredsGetSchemaFailedResponse = { + resolutionMetadata: { + error: 'notFound', + message: 'Schema not found', + }, + schemaMetadata: {}, + schemaId: 'did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/schema-name/1.0', +} + +export const anonCredsRegisterSchemaSuccessExample: AnonCredsRegisterSchemaSuccessResponse = { + registrationMetadata: {}, + schemaMetadata: {}, + schemaState: { + state: 'finished', + schemaId: 'did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/schema-name/1.0', + schema: { + issuerId: 'did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv', + name: 'schema-name', + version: '1.0', + attrNames: ['string'], + }, + }, +} + +export const anonCredsRegisterSchemaFailedExample: AnonCredsRegisterSchemaFailedResponse = { + registrationMetadata: {}, + schemaMetadata: {}, + schemaState: { + state: 'failed', + reason: 'Unknown error occurred while registering schema', + schemaId: 'did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/schema-name/1.0', + }, +} + +export const anonCredsGetCredentialDefinitionSuccessExample: AnonCredsGetCredentialDefinitionSuccessResponse = { + resolutionMetadata: {}, + credentialDefinitionMetadata: {}, + credentialDefinitionId: 'did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/CLAIM_DEF/20/definition', + credentialDefinition: { + issuerId: 'did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv', + schemaId: 'did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/schema-name/1.0', + type: 'CL', + tag: 'definition', + value: { + primary: { + n: 'string', + s: 'string', + r: { + master_secret: 'string', + string: 'string', + }, + rctxt: 'string', + z: 'string', + }, + revocation: { + g: '1 string', + g_dash: 'string', + h: 'string', + h0: 'string', + h1: 'string', + h2: 'string', + htilde: 'string', + h_cap: 'string', + u: 'string', + pk: 'string', + y: 'string', + }, + }, + }, +} + +export const anonCredsGetCredentialDefinitionFailedExample: AnonCredsGetCredentialDefinitionFailedResponse = { + resolutionMetadata: { + error: 'notFound', + message: 'CredentialDefinition not found', + }, + credentialDefinitionMetadata: {}, + credentialDefinitionId: 'did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/CLAIM_DEF/20/definition', +} + +export const anonCredsRegisterCredentialDefinitionSuccessExample: AnonCredsRegisterCredentialDefinitionSuccessResponse = + { + registrationMetadata: {}, + credentialDefinitionMetadata: {}, + credentialDefinitionState: { + state: 'finished', + credentialDefinitionId: + 'did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/credentialDefinition-name/1.0', + credentialDefinition: { + issuerId: 'did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv', + schemaId: 'did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/schema-name/1.0', + type: 'CL', + tag: 'definition', + value: { + primary: { + n: 'string', + s: 'string', + r: { + master_secret: 'string', + string: 'string', + }, + rctxt: 'string', + z: 'string', + }, + revocation: { + g: '1 string', + g_dash: 'string', + h: 'string', + h0: 'string', + h1: 'string', + h2: 'string', + htilde: 'string', + h_cap: 'string', + u: 'string', + pk: 'string', + y: 'string', + }, + }, + }, + }, + } + +export const anonCredsRegisterCredentialDefinitionFailedExample: AnonCredsRegisterCredentialDefinitionFailedResponse = { + registrationMetadata: {}, + credentialDefinitionMetadata: {}, + credentialDefinitionState: { + state: 'failed', + reason: 'Unknown error occurred while registering credentialDefinition', + credentialDefinitionId: + 'did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/credentialDefinition-name/1.0', + }, +} diff --git a/packages/rest/src/controllers/anoncreds/AnonCredsControllerTypes.ts b/packages/rest/src/controllers/anoncreds/AnonCredsControllerTypes.ts new file mode 100644 index 00000000..dbd75442 --- /dev/null +++ b/packages/rest/src/controllers/anoncreds/AnonCredsControllerTypes.ts @@ -0,0 +1,154 @@ +import type { AnyJsonObject } from '../types' +import type { + AnonCredsCredentialDefinition, + AnonCredsRegisterCredentialDefinitionOptions as CredoAnonCredsCredentialDefinitionOptions, + AnonCredsResolutionMetadata, + AnonCredsSchema, + RegisterCredentialDefinitionReturnStateAction, + RegisterCredentialDefinitionReturnStateFailed, + RegisterCredentialDefinitionReturnStateFinished, + RegisterCredentialDefinitionReturnStateWait, + RegisterSchemaReturnStateAction, + RegisterSchemaReturnStateFailed, + RegisterSchemaReturnStateFinished, + RegisterSchemaReturnStateWait, +} from '@credo-ts/anoncreds' +import type { AnonCredsRegisterCredentialDefinitionApiOptions } from '@credo-ts/anoncreds/build/AnonCredsApi' + +/** + * @example did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/schema-name/1.0 + */ +export type AnonCredsSchemaId = string + +/** + * @example did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/CLAIM_DEF/20/definition + */ +export type AnonCredsCredentialDefinitionId = string + +export interface AnonCredsGetSchemaFailedResponse { + schemaId: AnonCredsSchemaId + schema?: AnonCredsSchema + resolutionMetadata: Required + schemaMetadata: AnyJsonObject +} + +export interface AnonCredsGetSchemaSuccessResponse { + schemaId: AnonCredsSchemaId + schema: AnonCredsSchema + resolutionMetadata: AnyJsonObject + schemaMetadata: AnyJsonObject +} + +/** + * @example { + * "schema": { + * "issuerId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv", + * "name": "schema-name", + * "version": "1.0", + * "attrNames": ["age"] + * } + * } + */ +export interface AnonCredsRegisterSchemaBody { + schema: AnonCredsSchema + options?: AnyJsonObject +} + +export interface AnonCredsRegisterSchemaSuccessResponse { + jobId?: string + schemaState: RegisterSchemaReturnStateFinished + schemaMetadata: AnyJsonObject + registrationMetadata: AnyJsonObject +} + +export interface AnonCredsRegisterSchemaWaitResponse { + jobId?: string + schemaState: RegisterSchemaReturnStateWait + + schemaMetadata: AnyJsonObject + registrationMetadata: AnyJsonObject +} + +export interface AnonCredsRegisterSchemaActionResponse { + jobId?: string + schemaState: RegisterSchemaReturnStateAction + + schemaMetadata: AnyJsonObject + registrationMetadata: AnyJsonObject +} + +export interface AnonCredsRegisterSchemaFailedResponse { + jobId?: string + schemaState: RegisterSchemaReturnStateFailed + + schemaMetadata: AnyJsonObject + registrationMetadata: AnyJsonObject +} + +export interface AnonCredsGetCredentialDefinitionFailedResponse { + credentialDefinitionId: AnonCredsCredentialDefinitionId + credentialDefinition?: AnonCredsCredentialDefinition + resolutionMetadata: Required + credentialDefinitionMetadata: AnyJsonObject +} + +export interface AnonCredsGetCredentialDefinitionSuccessResponse { + credentialDefinitionId: AnonCredsCredentialDefinitionId + credentialDefinition: AnonCredsCredentialDefinition + resolutionMetadata: AnyJsonObject + credentialDefinitionMetadata: AnyJsonObject +} + +export interface AnonCredsRegisterCredentialDefinitionOptions + extends AnonCredsRegisterCredentialDefinitionApiOptions, + AnyJsonObject {} + +export interface AnonCredsRegisterCredentialDefinitionInput extends CredoAnonCredsCredentialDefinitionOptions {} + +/** + * @example { + * "credentialDefinition": { + * "issuerId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv", + * "schemaId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/schema-name/1.0", + * "tag": "definition" + * }, + * "options": { + * "supportRevocation": true + * } + * } + */ +export interface AnonCredsRegisterCredentialDefinitionBody { + credentialDefinition: AnonCredsRegisterCredentialDefinitionInput + options: AnonCredsRegisterCredentialDefinitionOptions +} + +export interface AnonCredsRegisterCredentialDefinitionSuccessResponse { + jobId?: string + credentialDefinitionState: RegisterCredentialDefinitionReturnStateFinished + credentialDefinitionMetadata: AnyJsonObject + registrationMetadata: AnyJsonObject +} + +export interface AnonCredsRegisterCredentialDefinitionWaitResponse { + jobId?: string + credentialDefinitionState: RegisterCredentialDefinitionReturnStateWait + + credentialDefinitionMetadata: AnyJsonObject + registrationMetadata: AnyJsonObject +} + +export interface AnonCredsRegisterCredentialDefinitionActionResponse { + jobId?: string + credentialDefinitionState: RegisterCredentialDefinitionReturnStateAction + + credentialDefinitionMetadata: AnyJsonObject + registrationMetadata: AnyJsonObject +} + +export interface AnonCredsRegisterCredentialDefinitionFailedResponse { + jobId?: string + credentialDefinitionState: RegisterCredentialDefinitionReturnStateFailed + + credentialDefinitionMetadata: AnyJsonObject + registrationMetadata: AnyJsonObject +} diff --git a/packages/rest/src/controllers/anoncreds/__tests__/AnonCredsController.test.ts b/packages/rest/src/controllers/anoncreds/__tests__/AnonCredsController.test.ts new file mode 100644 index 00000000..dc540249 --- /dev/null +++ b/packages/rest/src/controllers/anoncreds/__tests__/AnonCredsController.test.ts @@ -0,0 +1,196 @@ +import type { RestRootAgent } from '../../../utils/agent' +import type { Express } from 'express' + +import request from 'supertest' + +import { getTestAgent } from '../../../../tests/utils/helpers' +import { setupServer } from '../../../server' + +import { testAnonCredsCredentialDefinition, testAnonCredsSchema } from './fixtures' + +describe('AnonCredsController', () => { + let app: Express + let agent: RestRootAgent + + beforeAll(async () => { + agent = await getTestAgent('AnonCredsController REST Agent Test') + app = await setupServer(agent, { port: 3000 }) + }) + + afterEach(() => { + jest.clearAllMocks() + }) + + afterAll(async () => { + await agent.shutdown() + await agent.wallet.delete() + }) + + describe('get schema by id', () => { + test('should return schema', async () => { + // FIXME: we need to encode the schema-id to make it work .... + const response = await request(app).get(`/anoncreds/schemas/${encodeURIComponent(testAnonCredsSchema.schemaId)}`) + + expect(response.statusCode).toBe(200) + expect(response.body).toEqual({ + ...testAnonCredsSchema, + schemaMetadata: {}, + resolutionMetadata: {}, + }) + }) + + test('should return 400 BadRequest when id has invalid anoncreds method', async () => { + const response = await request(app).get(`/anoncreds/schemas/x`) + + expect(response.statusCode).toBe(400) + expect(response.body).toEqual({ + resolutionMetadata: { + error: 'unsupportedAnonCredsMethod', + message: 'Unable to resolve schema x: No registry found for identifier x', + }, + schemaId: 'x', + schemaMetadata: {}, + }) + }) + + test('should return 404 NotFound when schema not found', async () => { + const response = await request(app).get(`/anoncreds/schemas/uri:random-id`) + + expect(response.statusCode).toBe(404) + expect(response.body).toEqual({ + resolutionMetadata: { + error: 'notFound', + message: 'Schema not found', + }, + schemaId: 'uri:random-id', + schemaMetadata: {}, + }) + }) + }) + + describe('create schema', () => { + test('should return created schema ', async () => { + const response = await request(app).post(`/anoncreds/schemas`).send({ + schema: testAnonCredsSchema.schema, + }) + + expect(response.statusCode).toBe(200) + expect(response.body).toEqual({ + schemaState: { + state: 'finished', + ...testAnonCredsSchema, + }, + registrationMetadata: {}, + schemaMetadata: {}, + }) + }) + + test('should return 422 when props missing ', async () => { + const response = await request(app) + .post(`/anoncreds/schemas`) + .send({ + ...testAnonCredsSchema.schema, + issuerId: undefined, + }) + + expect(response.statusCode).toBe(422) + }) + }) + + describe('get credential definition by id', () => { + test('should return credential definition ', async () => { + const response = await request(app).get( + `/anoncreds/credential-definitions/${encodeURIComponent(testAnonCredsCredentialDefinition.credentialDefinitionId)}`, + ) + + // expect(response.statusCode).toBe(200) + expect(response.body).toEqual({ + ...testAnonCredsCredentialDefinition, + credentialDefinitionMetadata: {}, + resolutionMetadata: {}, + }) + }) + + test('should return 400 BadRequest when id has invalid structure', async () => { + jest.spyOn(agent.modules.anoncreds, 'getCredentialDefinition').mockResolvedValueOnce({ + credentialDefinitionId: 'x', + credentialDefinitionMetadata: {}, + resolutionMetadata: { + error: 'invalid', + }, + }) + + const response = await request(app).get(`/anoncreds/credential-definitions/x`) + expect(response.statusCode).toBe(400) + }) + + test('should return 400 BadRequest when id has invalid anoncreds method', async () => { + jest.spyOn(agent.modules.anoncreds, 'getCredentialDefinition').mockResolvedValueOnce({ + credentialDefinitionId: 'x', + credentialDefinitionMetadata: {}, + resolutionMetadata: { + error: 'unsupportedAnonCredsMethod', + }, + }) + + const response = await request(app).get(`/anoncreds/credential-definitions/x`) + expect(response.statusCode).toBe(400) + }) + + test('should return 404 NotFound when credential definition not found', async () => { + jest.spyOn(agent.modules.anoncreds, 'getCredentialDefinition').mockResolvedValueOnce({ + credentialDefinitionId: 'x', + credentialDefinitionMetadata: {}, + resolutionMetadata: { + error: 'notFound', + }, + }) + const response = await request(app).get(`/anoncreds/credential-definitions/WgWxqztrNooG92RXvxSTWv:3:CL:20:tag`) + expect(response.statusCode).toBe(404) + }) + }) + + describe('create credential definition', () => { + test('should return created credential definition ', async () => { + jest.spyOn(agent.modules.anoncreds, 'registerCredentialDefinition').mockResolvedValueOnce({ + credentialDefinitionState: { + state: 'finished', + credentialDefinition: testAnonCredsCredentialDefinition.credentialDefinition, + credentialDefinitionId: testAnonCredsCredentialDefinition.credentialDefinitionId, + }, + credentialDefinitionMetadata: {}, + registrationMetadata: {}, + }) + + jest.spyOn(agent.modules.anoncreds, 'getSchema').mockResolvedValueOnce({ + resolutionMetadata: {}, + schemaMetadata: {}, + schemaId: testAnonCredsSchema.schemaId, + schema: testAnonCredsSchema.schema, + }) + + const response = await request(app) + .post(`/anoncreds/credential-definitions`) + .send({ + credentialDefinition: { + issuerId: testAnonCredsCredentialDefinition.credentialDefinition.issuerId, + schemaId: testAnonCredsCredentialDefinition.credentialDefinition.schemaId, + tag: testAnonCredsCredentialDefinition.credentialDefinition.tag, + }, + options: { + supportRevocation: false, + }, + }) + + expect(response.statusCode).toBe(200) + expect(response.body).toEqual({ + credentialDefinitionState: { + state: 'finished', + ...testAnonCredsCredentialDefinition, + }, + registrationMetadata: {}, + credentialDefinitionMetadata: {}, + }) + }) + }) +}) diff --git a/packages/rest/src/controllers/anoncreds/__tests__/InMemoryAnonCredsRegistry.ts b/packages/rest/src/controllers/anoncreds/__tests__/InMemoryAnonCredsRegistry.ts new file mode 100644 index 00000000..0bc3ffae --- /dev/null +++ b/packages/rest/src/controllers/anoncreds/__tests__/InMemoryAnonCredsRegistry.ts @@ -0,0 +1,142 @@ +import type { + AnonCredsRegistry, + AnonCredsSchema, + AnonCredsCredentialDefinition, + GetSchemaReturn, + RegisterSchemaOptions, + RegisterSchemaReturn, + GetCredentialDefinitionReturn, + RegisterCredentialDefinitionOptions, + RegisterCredentialDefinitionReturn, + GetRevocationRegistryDefinitionReturn, + RegisterRevocationRegistryDefinitionReturn, + GetRevocationStatusListReturn, + RegisterRevocationStatusListReturn, +} from '@credo-ts/anoncreds' +import type { AgentContext } from '@credo-ts/core' + +import { Hasher, TypedArrayEncoder } from '@credo-ts/core' + +export class InMemoryAnonCredsRegistry implements AnonCredsRegistry { + public readonly methodName = 'inMemory' + public readonly supportedIdentifier = /.+:.+/ + + private schemas: Record = {} + private credentialDefinitions: Record = {} + + public constructor({ + schemas, + credentialDefinitions, + }: { + schemas?: Record + credentialDefinitions?: Record + } = {}) { + if (schemas) this.schemas = schemas + if (credentialDefinitions) this.credentialDefinitions = credentialDefinitions + } + + public async getSchema(agentContext: AgentContext, schemaId: string): Promise { + const schema = this.schemas[schemaId] + + if (!schema) { + return { + schemaId, + resolutionMetadata: { + error: 'notFound', + message: 'Schema not found', + }, + schemaMetadata: {}, + } + } + + return { + schemaId, + schema, + resolutionMetadata: {}, + schemaMetadata: {}, + } + } + + public async registerSchema( + agentContext: AgentContext, + options: RegisterSchemaOptions, + ): Promise { + const schemaHash = TypedArrayEncoder.toBase64URL( + Hasher.hash(`${options.schema.issuerId}-${options.schema.name}-${options.schema.version}`, 'sha-256'), + ) + const schemaId = `schema:${schemaHash}` + this.schemas[schemaId] = options.schema + + return { + registrationMetadata: {}, + schemaMetadata: {}, + schemaState: { + state: 'finished', + schemaId, + schema: options.schema, + }, + } + } + + public async getCredentialDefinition( + agentContext: AgentContext, + credentialDefinitionId: string, + ): Promise { + const credentialDefinition = this.credentialDefinitions[credentialDefinitionId] + + if (!credentialDefinition) { + return { + credentialDefinitionId, + resolutionMetadata: { + error: 'notFound', + message: 'Credential definition not found', + }, + credentialDefinitionMetadata: {}, + } + } + + return { + credentialDefinitionId, + credentialDefinition, + resolutionMetadata: {}, + credentialDefinitionMetadata: {}, + } + } + + public async registerCredentialDefinition( + agentContext: AgentContext, + options: RegisterCredentialDefinitionOptions, + ): Promise { + const credentialDefinitionHash = TypedArrayEncoder.toBase64URL( + Hasher.hash( + `${options.credentialDefinition.issuerId}-${options.credentialDefinition.schemaId}-${options.credentialDefinition.tag}`, + 'sha-256', + ), + ) + const credentialDefinitionId = `credential-definition:${credentialDefinitionHash}` + this.credentialDefinitions[credentialDefinitionId] = options.credentialDefinition + + return { + registrationMetadata: {}, + credentialDefinitionMetadata: {}, + credentialDefinitionState: { + state: 'finished', + credentialDefinitionId, + credentialDefinition: options.credentialDefinition, + }, + } + } + + public getRevocationRegistryDefinition(): Promise { + throw new Error('Method not implemented.') + } + public registerRevocationRegistryDefinition(): Promise { + throw new Error('Method not implemented.') + } + public getRevocationStatusList(): Promise { + throw new Error('Method not implemented.') + } + public registerRevocationStatusList(): Promise { + throw new Error('Method not implemented.') + } +} diff --git a/packages/rest/src/controllers/anoncreds/__tests__/fixtures.ts b/packages/rest/src/controllers/anoncreds/__tests__/fixtures.ts new file mode 100644 index 00000000..73bb34b7 --- /dev/null +++ b/packages/rest/src/controllers/anoncreds/__tests__/fixtures.ts @@ -0,0 +1,34 @@ +import type { AnonCredsSchema, AnonCredsCredentialDefinition } from '@credo-ts/anoncreds' + +export const testAnonCredsSchema = { + schemaId: 'schema:gSl0JkGIcmRif593Q6XYGsJndHGOzm1jWRFa-Lwrz9o', + schema: { + issuerId: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', + name: 'test', + version: '1.0', + attrNames: ['prop1', 'prop2'], + } satisfies AnonCredsSchema, +} + +export const testAnonCredsCredentialDefinition = { + credentialDefinitionId: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL/credential-definition', + credentialDefinition: { + issuerId: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', + schemaId: '9999', + type: 'CL', + tag: 'latest', + value: { + primary: { + n: 'x', + s: 'x', + r: { + master_secret: 'x', + name: 'x', + title: 'x', + }, + rctxt: 'x', + z: 'x', + }, + }, + } satisfies AnonCredsCredentialDefinition, +} diff --git a/packages/rest/src/controllers/basic-messages/BasicMessageController.ts b/packages/rest/src/controllers/basic-messages/BasicMessageController.ts deleted file mode 100644 index 8cdecdd3..00000000 --- a/packages/rest/src/controllers/basic-messages/BasicMessageController.ts +++ /dev/null @@ -1,55 +0,0 @@ -import type { BasicMessageRecord, BasicMessageStorageProps } from '@aries-framework/core' - -import { Agent, RecordNotFoundError } from '@aries-framework/core' -import { Body, Controller, Example, Get, Path, Post, Res, Route, Tags, TsoaResponse } from 'tsoa' -import { injectable } from 'tsyringe' - -import { BasicMessageRecordExample, RecordId } from '../examples' - -@Tags('Basic Messages') -@Route('/basic-messages') -@injectable() -export class BasicMessageController extends Controller { - private agent: Agent - - public constructor(agent: Agent) { - super() - this.agent = agent - } - - /** - * Retrieve basic messages by connection id - * - * @param connectionId Connection identifier - * @returns BasicMessageRecord[] - */ - @Example([BasicMessageRecordExample]) - @Get('/:connectionId') - public async getBasicMessages(@Path('connectionId') connectionId: RecordId): Promise { - return await this.agent.basicMessages.findAllByQuery({ connectionId }) - } - - /** - * Send a basic message to a connection - * - * @param connectionId Connection identifier - * @param content The content of the message - */ - @Post('/:connectionId') - public async sendMessage( - @Path('connectionId') connectionId: RecordId, - @Body() request: Record<'content', string>, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - this.setStatus(204) - await this.agent.basicMessages.sendMessage(connectionId, request.content) - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { reason: `connection with connection id "${connectionId}" not found.` }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } -} diff --git a/packages/rest/src/controllers/connections/ConnectionController.ts b/packages/rest/src/controllers/connections/ConnectionController.ts deleted file mode 100644 index b5da6ade..00000000 --- a/packages/rest/src/controllers/connections/ConnectionController.ts +++ /dev/null @@ -1,165 +0,0 @@ -import type { ConnectionRecordProps } from '@aries-framework/core' - -import { - ConnectionRepository, - DidExchangeState, - Agent, - AriesFrameworkError, - RecordNotFoundError, -} from '@aries-framework/core' -import { Controller, Delete, Example, Get, Path, Post, Query, Res, Route, Tags, TsoaResponse } from 'tsoa' -import { injectable } from 'tsyringe' - -import { ConnectionRecordExample, RecordId } from '../examples' - -@Tags('Connections') -@Route('/connections') -@injectable() -export class ConnectionController extends Controller { - private agent: Agent - - public constructor(agent: Agent) { - super() - this.agent = agent - } - - /** - * Retrieve all connections records - * @param alias Alias - * @param state Connection state - * @param myDid My DID - * @param theirDid Their DID - * @param theirLabel Their label - * @returns ConnectionRecord[] - */ - @Example([ConnectionRecordExample]) - @Get('/') - public async getAllConnections( - @Query('outOfBandId') outOfBandId?: string, - @Query('alias') alias?: string, - @Query('state') state?: DidExchangeState, - @Query('myDid') myDid?: string, - @Query('theirDid') theirDid?: string, - @Query('theirLabel') theirLabel?: string, - ) { - let connections - - if (outOfBandId) { - connections = await this.agent.connections.findAllByOutOfBandId(outOfBandId) - } else { - const connectionRepository = this.agent.dependencyManager.resolve(ConnectionRepository) - - const connections = await connectionRepository.findByQuery({ - alias, - myDid, - theirDid, - theirLabel, - state, - }) - - return connections.map((c) => c.toJSON()) - } - - // if (alias) connections = connections.filter((c) => c.alias === alias) - // if (state) connections = connections.filter((c) => c.state === state) - // if (myDid) connections = connections.filter((c) => c.did === myDid) - // if (theirDid) connections = connections.filter((c) => c.theirDid === theirDid) - // if (theirLabel) connections = connections.filter((c) => c.theirLabel === theirLabel) - - return connections.map((c) => c.toJSON()) - } - - /** - * Retrieve connection record by connection id - * @param connectionId Connection identifier - * @returns ConnectionRecord - */ - @Example(ConnectionRecordExample) - @Get('/:connectionId') - public async getConnectionById( - @Path('connectionId') connectionId: RecordId, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - ) { - const connection = await this.agent.connections.findById(connectionId) - - if (!connection) return notFoundError(404, { reason: `connection with connection id "${connectionId}" not found.` }) - - return connection.toJSON() - } - - /** - * Deletes a connection record from the connection repository. - * - * @param connectionId Connection identifier - */ - @Delete('/:connectionId') - public async deleteConnection( - @Path('connectionId') connectionId: RecordId, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - this.setStatus(204) - await this.agent.connections.deleteById(connectionId) - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { reason: `connection with connection id "${connectionId}" not found.` }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Accept a connection request as inviter by sending a connection response message - * for the connection with the specified connection id. - * - * This is not needed when auto accepting of connection is enabled. - * - * @param connectionId Connection identifier - * @returns ConnectionRecord - */ - @Example(ConnectionRecordExample) - @Post('/:connectionId/accept-request') - public async acceptRequest( - @Path('connectionId') connectionId: RecordId, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - const connection = await this.agent.connections.acceptRequest(connectionId) - return connection.toJSON() - } catch (error) { - if (error instanceof AriesFrameworkError) { - return notFoundError(404, { reason: `connection with connection id "${connectionId}" not found.` }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Accept a connection response as invitee by sending a trust ping message - * for the connection with the specified connection id. - * - * This is not needed when auto accepting of connection is enabled. - * - * @param connectionId Connection identifier - * @returns ConnectionRecord - */ - @Example(ConnectionRecordExample) - @Post('/:connectionId/accept-response') - public async acceptResponse( - @Path('connectionId') connectionId: RecordId, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - const connection = await this.agent.connections.acceptResponse(connectionId) - return connection.toJSON() - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { reason: `connection with connection id "${connectionId}" not found.` }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } -} diff --git a/packages/rest/src/controllers/credentials/CredentialController.ts b/packages/rest/src/controllers/credentials/CredentialController.ts deleted file mode 100644 index ae4bb2ac..00000000 --- a/packages/rest/src/controllers/credentials/CredentialController.ts +++ /dev/null @@ -1,302 +0,0 @@ -import type { CredentialExchangeRecordProps } from '@aries-framework/core' - -import { CredentialRepository, CredentialState, Agent, RecordNotFoundError } from '@aries-framework/core' -import { Body, Controller, Delete, Get, Path, Post, Res, Route, Tags, TsoaResponse, Example, Query } from 'tsoa' -import { injectable } from 'tsyringe' - -import { CredentialExchangeRecordExample, RecordId } from '../examples' -import { - AcceptCredentialRequestOptions, - OfferCredentialOptions, - ProposeCredentialOptions, - AcceptCredentialProposalOptions, - AcceptCredentialOfferOptions, - CreateOfferOptions, -} from '../types' - -@Tags('Credentials') -@Route('/credentials') -@injectable() -export class CredentialController extends Controller { - private agent: Agent - - public constructor(agent: Agent) { - super() - this.agent = agent - } - - /** - * Retrieve all credential exchange records - * - * @returns CredentialExchangeRecord[] - */ - @Example([CredentialExchangeRecordExample]) - @Get('/') - public async getAllCredentials( - @Query('threadId') threadId?: string, - @Query('connectionId') connectionId?: string, - @Query('state') state?: CredentialState, - ) { - const credentialRepository = this.agent.dependencyManager.resolve(CredentialRepository) - - const credentials = await credentialRepository.findByQuery({ - connectionId, - threadId, - state, - }) - - return credentials.map((c) => c.toJSON()) - } - - /** - * Retrieve credential exchange record by credential record id - * - * @param credentialRecordId - * @returns CredentialExchangeRecord - */ - @Example(CredentialExchangeRecordExample) - @Get('/:credentialRecordId') - public async getCredentialById( - @Path('credentialRecordId') credentialRecordId: RecordId, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - const credential = await this.agent.credentials.getById(credentialRecordId) - return credential.toJSON() - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { - reason: `credential with credential record id "${credentialRecordId}" not found.`, - }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Deletes a credential exchange record in the credential repository. - * - * @param credentialRecordId - */ - @Delete('/:credentialRecordId') - public async deleteCredential( - @Path('credentialRecordId') credentialRecordId: RecordId, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - this.setStatus(204) - await this.agent.credentials.deleteById(credentialRecordId) - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { - reason: `credential with credential record id "${credentialRecordId}" not found.`, - }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Initiate a new credential exchange as holder by sending a propose credential message - * to the connection with a specified connection id. - * - * @param options - * @returns CredentialExchangeRecord - */ - @Example(CredentialExchangeRecordExample) - @Post('/propose-credential') - public async proposeCredential( - @Body() options: ProposeCredentialOptions, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - const credential = await this.agent.credentials.proposeCredential(options) - return credential.toJSON() - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { - reason: `connection with connection record id "${options.connectionId}" not found.`, - }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Accept a credential proposal as issuer by sending an accept proposal message - * to the connection associated with the credential exchange record. - * - * @param credentialRecordId credential identifier - * @param options - * @returns CredentialExchangeRecord - */ - @Example(CredentialExchangeRecordExample) - @Post('/:credentialRecordId/accept-proposal') - public async acceptProposal( - @Path('credentialRecordId') credentialRecordId: RecordId, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - @Body() options?: AcceptCredentialProposalOptions, - ) { - try { - const credential = await this.agent.credentials.acceptProposal({ - ...options, - credentialRecordId: credentialRecordId, - }) - - return credential.toJSON() - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { - reason: `credential with credential record id "${credentialRecordId}" not found.`, - }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Initiate a new credential exchange as issuer by creating a credential offer - * without specifying a connection id - * - * @param options - * @returns AgentMessage, CredentialExchangeRecord - */ - @Example(CredentialExchangeRecordExample) - @Post('/create-offer') - public async createOffer( - @Body() options: CreateOfferOptions, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - const offer = await this.agent.credentials.createOffer(options) - return { - message: offer.message.toJSON(), - credentialRecord: offer.credentialRecord.toJSON(), - } - } catch (error) { - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Initiate a new credential exchange as issuer by sending a offer credential message - * to the connection with the specified connection id. - * - * @param options - * @returns CredentialExchangeRecord - */ - @Example(CredentialExchangeRecordExample) - @Post('/offer-credential') - public async offerCredential( - @Body() options: OfferCredentialOptions, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - const credential = await this.agent.credentials.offerCredential(options) - return credential.toJSON() - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { - reason: `connection with connection record id "${options.connectionId}" not found.`, - }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Accept a credential offer as holder by sending an accept offer message - * to the connection associated with the credential exchange record. - * - * @param credentialRecordId credential identifier - * @param options - * @returns CredentialExchangeRecord - */ - @Example(CredentialExchangeRecordExample) - @Post('/:credentialRecordId/accept-offer') - public async acceptOffer( - @Path('credentialRecordId') credentialRecordId: RecordId, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - @Body() options?: AcceptCredentialOfferOptions, - ) { - try { - const credential = await this.agent.credentials.acceptOffer({ - ...options, - credentialRecordId: credentialRecordId, - }) - return credential.toJSON() - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { - reason: `credential with credential record id "${credentialRecordId}" not found.`, - }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Accept a credential request as issuer by sending an accept request message - * to the connection associated with the credential exchange record. - * - * @param credentialRecordId credential identifier - * @param options - * @returns CredentialExchangeRecord - */ - @Example(CredentialExchangeRecordExample) - @Post('/:credentialRecordId/accept-request') - public async acceptRequest( - @Path('credentialRecordId') credentialRecordId: RecordId, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - @Body() options?: AcceptCredentialRequestOptions, - ) { - try { - const credential = await this.agent.credentials.acceptRequest({ - ...options, - credentialRecordId: credentialRecordId, - }) - return credential.toJSON() - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { - reason: `credential with credential record id "${credentialRecordId}" not found.`, - }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Accept a credential as holder by sending an accept credential message - * to the connection associated with the credential exchange record. - * - * @param options - * @returns CredentialExchangeRecord - */ - @Example(CredentialExchangeRecordExample) - @Post('/:credentialRecordId/accept-credential') - public async acceptCredential( - @Path('credentialRecordId') credentialRecordId: RecordId, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - const credential = await this.agent.credentials.acceptCredential({ credentialRecordId: credentialRecordId }) - return credential.toJSON() - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { - reason: `credential with credential record id "${credentialRecordId}" not found.`, - }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } -} diff --git a/packages/rest/src/controllers/credentials/CredentialDefinitionController.ts b/packages/rest/src/controllers/credentials/CredentialDefinitionController.ts deleted file mode 100644 index d4732a56..00000000 --- a/packages/rest/src/controllers/credentials/CredentialDefinitionController.ts +++ /dev/null @@ -1,92 +0,0 @@ -import type { SchemaId } from '../examples' -import type { CredDef } from 'indy-sdk' - -import { Agent, IndySdkError } from '@aries-framework/core' -import { LedgerError } from '@aries-framework/core/build/modules/ledger/error/LedgerError' -import { LedgerNotFoundError } from '@aries-framework/core/build/modules/ledger/error/LedgerNotFoundError' -import { isIndyError } from '@aries-framework/core/build/utils/indyError' -import { Body, Controller, Example, Get, Path, Post, Res, Route, Tags, TsoaResponse } from 'tsoa' -import { injectable } from 'tsyringe' - -import { CredentialDefinitionExample, CredentialDefinitionId } from '../examples' - -@Tags('Credential Definitions') -@Route('/credential-definitions') -@injectable() -export class CredentialDefinitionController extends Controller { - private agent: Agent - - public constructor(agent: Agent) { - super() - this.agent = agent - } - - /** - * Retrieve credential definition by credential definition id - * - * @param credentialDefinitionId - * @returns CredDef - */ - @Example(CredentialDefinitionExample) - @Get('/:credentialDefinitionId') - public async getCredentialDefinitionById( - @Path('credentialDefinitionId') credentialDefinitionId: CredentialDefinitionId, - @Res() badRequestError: TsoaResponse<400, { reason: string }>, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - return await this.agent.ledger.getCredentialDefinition(credentialDefinitionId) - } catch (error) { - if (error instanceof IndySdkError && error.message === 'IndyError(LedgerNotFound): LedgerNotFound') { - return notFoundError(404, { - reason: `credential definition with credentialDefinitionId "${credentialDefinitionId}" not found.`, - }) - } else if (error instanceof LedgerError && error.cause instanceof IndySdkError) { - if (isIndyError(error.cause.cause, 'CommonInvalidStructure')) { - return badRequestError(400, { - reason: `credentialDefinitionId "${credentialDefinitionId}" has invalid structure.`, - }) - } - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Creates a new credential definition. - * - * @param credentialDefinitionRequest - * @returns CredDef - */ - @Example(CredentialDefinitionExample) - @Post('/') - public async createCredentialDefinition( - @Body() - credentialDefinitionRequest: { - schemaId: SchemaId - supportRevocation: boolean - tag: string - }, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - const schema = await this.agent.ledger.getSchema(credentialDefinitionRequest.schemaId) - - return await this.agent.ledger.registerCredentialDefinition({ - schema, - supportRevocation: credentialDefinitionRequest.supportRevocation, - tag: credentialDefinitionRequest.tag, - }) - } catch (error) { - if (error instanceof LedgerNotFoundError) { - return notFoundError(404, { - reason: `schema with schemaId "${credentialDefinitionRequest.schemaId}" not found.`, - }) - } - - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } -} diff --git a/packages/rest/src/controllers/credentials/SchemaController.ts b/packages/rest/src/controllers/credentials/SchemaController.ts deleted file mode 100644 index 02ef02b7..00000000 --- a/packages/rest/src/controllers/credentials/SchemaController.ts +++ /dev/null @@ -1,96 +0,0 @@ -import type { Version } from '../examples' -import type { Schema } from 'indy-sdk' - -import { Agent, AriesFrameworkError, IndySdkError } from '@aries-framework/core' -import { LedgerError } from '@aries-framework/core/build/modules/ledger/error/LedgerError' -import { isIndyError } from '@aries-framework/core/build/utils/indyError' -import { Body, Example, Get, Path, Post, Res, Route, Tags, TsoaResponse } from 'tsoa' -import { injectable } from 'tsyringe' - -import { SchemaId, SchemaExample } from '../examples' - -@Tags('Schemas') -@Route('/schemas') -@injectable() -export class SchemaController { - private agent: Agent - - public constructor(agent: Agent) { - this.agent = agent - } - - /** - * Retrieve schema by schema id - * - * @param schemaId - * @returns Schema - */ - @Example(SchemaExample) - @Get('/:schemaId') - public async getSchemaById( - @Path('schemaId') schemaId: SchemaId, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() forbiddenError: TsoaResponse<403, { reason: string }>, - @Res() badRequestError: TsoaResponse<400, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - return await this.agent.ledger.getSchema(schemaId) - } catch (error) { - if (error instanceof IndySdkError && error.message === 'IndyError(LedgerNotFound): LedgerNotFound') { - return notFoundError(404, { - reason: `schema definition with schemaId "${schemaId}" not found.`, - }) - } else if (error instanceof LedgerError && error.cause instanceof IndySdkError) { - if (isIndyError(error.cause.cause, 'LedgerInvalidTransaction')) { - return forbiddenError(403, { - reason: `schema definition with schemaId "${schemaId}" can not be returned.`, - }) - } - if (isIndyError(error.cause.cause, 'CommonInvalidStructure')) { - return badRequestError(400, { - reason: `schemaId "${schemaId}" has invalid structure.`, - }) - } - } - - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Creates a new schema and registers schema on ledger - * - * @param schema - * @returns schema - */ - @Example(SchemaExample) - @Post('/') - public async createSchema( - @Body() - schema: { - name: string - version: Version - attributes: string[] - }, - @Res() forbiddenError: TsoaResponse<400, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - return await this.agent.ledger.registerSchema({ - name: schema.name, - version: schema.version, - attributes: schema.attributes, - }) - } catch (error) { - if (error instanceof AriesFrameworkError) { - if (error.message.includes('UnauthorizedClientRequest')) { - return forbiddenError(400, { - reason: 'this action is not allowed.', - }) - } - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } -} diff --git a/packages/rest/src/controllers/did/DidController.ts b/packages/rest/src/controllers/did/DidController.ts deleted file mode 100644 index 244404de..00000000 --- a/packages/rest/src/controllers/did/DidController.ts +++ /dev/null @@ -1,37 +0,0 @@ -import type { DidResolutionResultProps } from '../types' - -import { Agent } from '@aries-framework/core' -import { Controller, Example, Get, Path, Route, Tags } from 'tsoa' -import { injectable } from 'tsyringe' - -import { Did, DidRecordExample } from '../examples' - -@Tags('Dids') -@Route('/dids') -@injectable() -export class DidController extends Controller { - private agent: Agent - - public constructor(agent: Agent) { - super() - this.agent = agent - } - - /** - * Resolves did and returns did resolution result - * @param did Decentralized Identifier - * @returns DidResolutionResult - */ - @Example(DidRecordExample) - @Get('/:did') - public async getDidRecordByDid(@Path('did') did: Did) { - const resolveResult = await this.agent.dids.resolve(did) - - if (!resolveResult.didDocument) { - this.setStatus(500) - return { resolveResult } - } - - return { ...resolveResult, didDocument: resolveResult.didDocument.toJSON() } - } -} diff --git a/packages/rest/src/controllers/did/DidsController.ts b/packages/rest/src/controllers/did/DidsController.ts new file mode 100644 index 00000000..c41eff21 --- /dev/null +++ b/packages/rest/src/controllers/did/DidsController.ts @@ -0,0 +1,185 @@ +import type { + DidResolveFailedResponse, + DidResolveSuccessResponse, + DidImportFailedResponse, + DidCreateFinishedResponse, + DidCreateFailedResponse, + DidCreateActionResponse, + DidCreateWaitResponse, + DidDocumentJson, +} from './DidsControllerTypes' + +import { DidDocument, JsonTransformer, TypedArrayEncoder } from '@credo-ts/core' +import { + Body, + Controller, + Example, + Get, + Path, + Post, + Route, + Tags, + Response, + SuccessResponse, + Security, + Request, +} from 'tsoa' +import { injectable } from 'tsyringe' + +import { RequestWithAgent } from '../../authentication' +import { alternativeResponse } from '../../utils/response' + +import { + didResolveFailedResponseExample, + didResolveSuccessResponseExample, + didCreateFinishedResponseExample, +} from './DidsControllerExamples' +import { DidImportOptions, DidCreateOptions } from './DidsControllerTypes' + +@Tags('Dids') +@Route('/dids') +@injectable() +@Security('tenants', ['tenant']) +export class DidController extends Controller { + /** + * Resolves did and returns did resolution result + */ + @Example(didResolveSuccessResponseExample) + @Response(404, 'Did not found', didResolveFailedResponseExample) + @Response(500, 'Error resolving did', didResolveFailedResponseExample) + @Get('/:did') + public async resolveDid( + @Request() request: RequestWithAgent, + @Path('did') did: string, + ): Promise { + const resolveResult = await request.user.agent.dids.resolve(did) + + const response = { ...resolveResult, didDocument: resolveResult.didDocument?.toJSON() } + + if (resolveResult.didResolutionMetadata.error === 'notFound') { + this.setStatus(404) + return alternativeResponse(response as DidResolveFailedResponse) + } + + if (!resolveResult.didDocument) { + this.setStatus(500) + return alternativeResponse(response as DidResolveFailedResponse) + } + + return response as DidResolveSuccessResponse + } + + /** + * Import a did (with optional did document). + * + * If no did document is provided, the did will be resolved to fetch the did document. + */ + @Post('/import') + @SuccessResponse(201, 'Did imported successfully') + public async importDid(@Request() request: RequestWithAgent, @Body() options: DidImportOptions): Promise { + try { + await request.user.agent.dids.import({ + did: options.did, + didDocument: options.didDocument ? JsonTransformer.fromJSON(options.didDocument, DidDocument) : undefined, + overwrite: options.overwrite, + privateKeys: options.privateKeys?.map(({ keyType, privateKeyBase58 }) => ({ + keyType, + privateKey: TypedArrayEncoder.fromBase58(privateKeyBase58), + })), + }) + } catch (error) { + this.setStatus(500) + return alternativeResponse({ + message: error instanceof Error ? error.message : 'Unknown error', + }) + } + } + + /** + * Create a new did. + */ + @Example(didCreateFinishedResponseExample) + @Response(500, 'Error creating did') + @Response(200, 'Action required') + @Response(202, 'Wait for action to complete') + @Post('/create') + public async createDid( + @Request() request: RequestWithAgent, + @Body() options: DidCreateOptions, + ): Promise { + const didResult = await request.user.agent.dids.create({ + ...options, + didDocument: + 'didDocument' in options && options.didDocument + ? JsonTransformer.fromJSON(options.didDocument, DidDocument) + : undefined, + secret: { + ...options.secret, + seed: + typeof options.secret?.seedBase58 === 'string' + ? TypedArrayEncoder.fromBase58(options.secret.seedBase58) + : undefined, + privateKey: + typeof options.secret?.privateKeyBase58 === 'string' + ? TypedArrayEncoder.fromBase58(options.secret.privateKeyBase58) + : undefined, + }, + }) + + const didDocumentJson = didResult.didState.didDocument?.toJSON() as DidDocumentJson + + const { ...copiedSecret } = didResult.didState.secret + copiedSecret.seedBase58 = copiedSecret.seed + ? TypedArrayEncoder.toBase58(copiedSecret.seed as Uint8Array) + : undefined + copiedSecret.privateKeyBase58 = copiedSecret.privateKey + ? TypedArrayEncoder.toBase58(copiedSecret.privateKey as Uint8Array) + : undefined + delete copiedSecret.seed + delete copiedSecret.privateKey + + if (didResult.didState.state === 'failed') { + this.setStatus(500) + return alternativeResponse({ + ...didResult, + didState: { + ...didResult.didState, + didDocument: didDocumentJson, + secret: copiedSecret, + }, + }) + } + + if (didResult.didState.state === 'wait') { + this.setStatus(2002) + return alternativeResponse({ + ...didResult, + didState: { + ...didResult.didState, + didDocument: didDocumentJson, + secret: copiedSecret, + }, + }) + } + + if (didResult.didState.state === 'action') { + return alternativeResponse({ + ...didResult, + didState: { + ...didResult.didState, + didDocument: didDocumentJson, + secret: copiedSecret, + }, + }) + } + + return { + ...didResult, + didState: { + ...didResult.didState, + didDocument: didDocumentJson, + secret: copiedSecret, + }, + } + } +} diff --git a/packages/rest/src/controllers/did/DidsControllerExamples.ts b/packages/rest/src/controllers/did/DidsControllerExamples.ts new file mode 100644 index 00000000..d10f35bc --- /dev/null +++ b/packages/rest/src/controllers/did/DidsControllerExamples.ts @@ -0,0 +1,106 @@ +import type { + DidCreateFinishedResponse, + DidResolveFailedResponse, + DidResolveSuccessResponse, +} from './DidsControllerTypes' + +export const didResolveSuccessResponseExample: DidResolveSuccessResponse = { + didDocument: { + '@context': [ + 'https://w3id.org/did/v1', + 'https://w3id.org/security/suites/ed25519-2018/v1', + 'https://w3id.org/security/suites/x25519-2019/v1', + ], + id: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', + alsoKnownAs: undefined, + controller: undefined, + verificationMethod: [ + { + id: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', + type: 'Ed25519VerificationKey2018', + controller: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', + publicKeyBase58: '6fioC1zcDPyPEL19pXRS2E4iJ46zH7xP6uSgAaPdwDrx', + }, + ], + authentication: [ + 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', + ], + assertionMethod: [ + 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', + ], + capabilityInvocation: [ + 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', + ], + capabilityDelegation: [ + 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', + ], + keyAgreement: [ + { + id: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6LSrdqo4M24WRDJj1h2hXxgtDTyzjjKCiyapYVgrhwZAySn', + type: 'X25519KeyAgreementKey2019', + controller: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', + publicKeyBase58: 'FxfdY3DCQxVZddKGAtSjZdFW9bCCW7oRwZn1NFJ2Tbg2', + }, + ], + service: undefined, + }, + didDocumentMetadata: {}, + didResolutionMetadata: { + contentType: 'application/did+ld+json', + }, +} + +export const didResolveFailedResponseExample: DidResolveFailedResponse = { + didDocument: null, + didDocumentMetadata: {}, + didResolutionMetadata: { + error: 'notFound', + message: 'DID not found', + }, +} + +export const didCreateFinishedResponseExample: DidCreateFinishedResponse = { + didState: { + did: 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + state: 'finished', + didDocument: { + '@context': [ + 'https://w3id.org/did/v1', + 'https://w3id.org/security/suites/ed25519-2018/v1', + 'https://w3id.org/security/suites/x25519-2019/v1', + ], + id: 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + verificationMethod: [ + { + id: 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + type: 'Ed25519VerificationKey2018', + controller: 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + publicKeyBase58: 'ApexJxnhZHC6Ctq4fCoNHKYgu87HuRTZ7oSyfehG57zE', + }, + ], + authentication: [ + 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + ], + assertionMethod: [ + 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + ], + keyAgreement: [ + { + id: 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6LSm5B4fB9NA55xB7PSeMYTMS9sf8uboJvyZBaDLLSZ7Ryd', + type: 'X25519KeyAgreementKey2019', + controller: 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + publicKeyBase58: 'APzu8sLW4cND5j1g7i2W2qwPozNV6hkpgCrXqso2Q4Cs', + }, + ], + capabilityInvocation: [ + 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + ], + capabilityDelegation: [ + 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + ], + }, + }, + + didDocumentMetadata: {}, + didRegistrationMetadata: {}, +} diff --git a/packages/rest/src/controllers/did/DidsControllerTypes.ts b/packages/rest/src/controllers/did/DidsControllerTypes.ts new file mode 100644 index 00000000..db0e101a --- /dev/null +++ b/packages/rest/src/controllers/did/DidsControllerTypes.ts @@ -0,0 +1,158 @@ +import type { AnyJsonObject } from '../types' +import type { DidResolutionMetadata, DidDocumentMetadata, KeyType } from '@credo-ts/core' +import type { DIDDocument } from 'did-resolver' + +/** + * @example did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK + */ +export type Did = string + +/** + * @example + * { + * "@context": [ + * "https://w3id.org/did/v1", + * "https://w3id.org/security/suites/ed25519-2018/v1", + * "https://w3id.org/security/suites/x25519-2019/v1" + * ], + * "id": "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK", + * "verificationMethod": [ + * { + * "id": "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK#z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK", + * "type": "Ed25519VerificationKey2018", + * "controller": "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK", + * "publicKeyBase58": "48GdbJyVULjHDaBNS6ct9oAGtckZUS5v8asrPzvZ7R1w" + * } + * ], + * "authentication": [ + * "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK#z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK" + * ], + * "assertionMethod": [ + * "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK#z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK" + * ], + * "keyAgreement": [ + * { + * "id": "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK#z6LSj72tK8brWgZja8NLRwPigth2T9QRiG1uH9oKZuKjdh9p", + * "type": "X25519KeyAgreementKey2019", + * "controller": "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK", + * "publicKeyBase58": "8RrinpnzRDqzUjzZuHsmNJUYbzsK1eqkQB5e5SgCvKP4" + * } + * ], + * "capabilityInvocation": [ + * "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK#z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK" + * ], + * "capabilityDelegation": [ + * "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK#z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK" + * ] + * } + */ +export type DidDocumentJson = DIDDocument + +export interface DidResolveSuccessResponse { + didResolutionMetadata: DidResolutionMetadata + didDocument: DidDocumentJson + didDocumentMetadata: DidDocumentMetadata +} + +export interface DidResolveFailedResponse { + didResolutionMetadata: DidResolutionMetadata & { message: string; error: string } + didDocument: DidDocumentJson | null + didDocumentMetadata: DidDocumentMetadata +} + +interface PrivateKey { + keyType: KeyType + + /** + * Base58 encoded private key + */ + privateKeyBase58: string +} + +export interface DidImportOptions { + did: Did + didDocument?: DidDocumentJson + + /** + * Private keys to import as part of the did document + */ + privateKeys?: PrivateKey[] + + /** + * Whether to overwrite the existing did document and private keys + */ + overwrite?: boolean +} + +export interface DidImportFailedResponse { + message: string +} + +// TODO: add typing for more did methods +export type DidCreateOptions = KeyOrJwkDidCreateOptions | DidCreateBaseOptions + +interface DidCreateBaseOptions { + method?: string + did?: Did + options?: AnyJsonObject + secret?: AnyJsonObject + didDocument?: DidDocumentJson +} + +interface KeyOrJwkDidCreateOptions extends Omit { + method: 'key' | 'jwk' + + options: { + keyType: KeyType + } + // how to encode buffer? + secret?: { + seedBase58?: string + privateKeyBase58?: string + } +} + +export interface DidCreateBaseResponse { + jobId?: string + didRegistrationMetadata: AnyJsonObject + didDocumentMetadata: DidResolutionMetadata + + didState: T +} + +export type DidCreateFinishedResponse = DidCreateBaseResponse<{ + state: 'finished' + did: Did + didDocument: DidDocumentJson + + secret?: AnyJsonObject +}> + +export type DidCreateFailedResponse = DidCreateBaseResponse<{ + state: 'failed' + did?: Did + didDocument?: DidDocumentJson + + secret?: AnyJsonObject + reason: string +}> + +export type DidCreateWaitResponse = DidCreateBaseResponse<{ + state: 'wait' + did?: Did + didDocument?: DidDocumentJson + + secret?: AnyJsonObject +}> + +export type DidCreateActionResponse = DidCreateBaseResponse<{ + state: 'action' + action: string + did?: Did + didDocument?: DidDocumentJson + + secret?: AnyJsonObject + + // Other fields can be added + [key: string]: unknown +}> diff --git a/packages/rest/src/controllers/did/__tests__/DidsController.test.ts b/packages/rest/src/controllers/did/__tests__/DidsController.test.ts new file mode 100644 index 00000000..8974f636 --- /dev/null +++ b/packages/rest/src/controllers/did/__tests__/DidsController.test.ts @@ -0,0 +1,165 @@ +import type { RestRootAgent } from '../../../utils/agent' +import type { Express } from 'express' + +import request from 'supertest' + +import { getTestAgent } from '../../../../tests/utils/helpers' +import { setupServer } from '../../../server' + +describe('DidsController', () => { + let app: Express + let agent: RestRootAgent + + beforeAll(async () => { + agent = await getTestAgent('DidsController REST Agent Test') + app = await setupServer(agent, { port: 3000 }) + }) + + afterEach(() => { + jest.clearAllMocks() + }) + + afterAll(async () => { + await agent.shutdown() + await agent.wallet.delete() + }) + + describe('resolve did', () => { + test('should return did', async () => { + const response = await request(app).get( + `/dids/${encodeURIComponent('did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc')}`, + ) + + expect(response.statusCode).toBe(200) + expect(response.body).toEqual({ + didDocument: { + '@context': [ + 'https://w3id.org/did/v1', + 'https://w3id.org/security/suites/ed25519-2018/v1', + 'https://w3id.org/security/suites/x25519-2019/v1', + ], + assertionMethod: [ + 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + ], + authentication: [ + 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + ], + capabilityDelegation: [ + 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + ], + capabilityInvocation: [ + 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + ], + id: 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + keyAgreement: [ + { + controller: 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + id: 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6LSm5B4fB9NA55xB7PSeMYTMS9sf8uboJvyZBaDLLSZ7Ryd', + publicKeyBase58: 'APzu8sLW4cND5j1g7i2W2qwPozNV6hkpgCrXqso2Q4Cs', + type: 'X25519KeyAgreementKey2019', + }, + ], + verificationMethod: [ + { + controller: 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + id: 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + publicKeyBase58: 'ApexJxnhZHC6Ctq4fCoNHKYgu87HuRTZ7oSyfehG57zE', + type: 'Ed25519VerificationKey2018', + }, + ], + }, + didDocumentMetadata: {}, + didResolutionMetadata: { + contentType: 'application/did+ld+json', + resolutionTime: expect.any(Number), + servedFromCache: false, + }, + }) + }) + }) + + describe('create did', () => { + test('should create did ', async () => { + const response = await request(app) + .post(`/dids/create`) + .send({ + method: 'key', + options: { + keyType: 'ed25519', + }, + secret: { + privateKeyBase58: '4Fv58mZUUUcktagjui3fgtG9GnQg3cVjAGLqi5TVB1QW', + }, + }) + + expect(response.statusCode).toBe(200) + expect(response.body).toEqual({ + didDocumentMetadata: {}, + didRegistrationMetadata: {}, + didState: { + did: 'did:key:z6Mkp2z5JZNa48qiupnSL32rt9Yj5nT31GDvL1GtNmYqgc7o', + didDocument: { + '@context': [ + 'https://w3id.org/did/v1', + 'https://w3id.org/security/suites/ed25519-2018/v1', + 'https://w3id.org/security/suites/x25519-2019/v1', + ], + assertionMethod: [ + 'did:key:z6Mkp2z5JZNa48qiupnSL32rt9Yj5nT31GDvL1GtNmYqgc7o#z6Mkp2z5JZNa48qiupnSL32rt9Yj5nT31GDvL1GtNmYqgc7o', + ], + authentication: [ + 'did:key:z6Mkp2z5JZNa48qiupnSL32rt9Yj5nT31GDvL1GtNmYqgc7o#z6Mkp2z5JZNa48qiupnSL32rt9Yj5nT31GDvL1GtNmYqgc7o', + ], + capabilityDelegation: [ + 'did:key:z6Mkp2z5JZNa48qiupnSL32rt9Yj5nT31GDvL1GtNmYqgc7o#z6Mkp2z5JZNa48qiupnSL32rt9Yj5nT31GDvL1GtNmYqgc7o', + ], + capabilityInvocation: [ + 'did:key:z6Mkp2z5JZNa48qiupnSL32rt9Yj5nT31GDvL1GtNmYqgc7o#z6Mkp2z5JZNa48qiupnSL32rt9Yj5nT31GDvL1GtNmYqgc7o', + ], + id: 'did:key:z6Mkp2z5JZNa48qiupnSL32rt9Yj5nT31GDvL1GtNmYqgc7o', + keyAgreement: [ + { + controller: 'did:key:z6Mkp2z5JZNa48qiupnSL32rt9Yj5nT31GDvL1GtNmYqgc7o', + id: 'did:key:z6Mkp2z5JZNa48qiupnSL32rt9Yj5nT31GDvL1GtNmYqgc7o#z6LSnGC4ui2fKtMYS7Qf7VTdNo3sFHGURfgDCJfD9RoWmZ1X', + publicKeyBase58: 'Bb1uPQDoERdoLj2taqwg4CqPQ8jMj4W4KKwXey9z4BEm', + type: 'X25519KeyAgreementKey2019', + }, + ], + verificationMethod: [ + { + controller: 'did:key:z6Mkp2z5JZNa48qiupnSL32rt9Yj5nT31GDvL1GtNmYqgc7o', + id: 'did:key:z6Mkp2z5JZNa48qiupnSL32rt9Yj5nT31GDvL1GtNmYqgc7o#z6Mkp2z5JZNa48qiupnSL32rt9Yj5nT31GDvL1GtNmYqgc7o', + publicKeyBase58: 'Aaj2iK88ibMFoKwjeU5233zjGDBBbNyZdzMxYVapmPLR', + type: 'Ed25519VerificationKey2018', + }, + ], + }, + secret: { + privateKeyBase58: '4Fv58mZUUUcktagjui3fgtG9GnQg3cVjAGLqi5TVB1QW', + }, + state: 'finished', + }, + }) + }) + }) + + describe('import did', () => { + test('should import did ', async () => { + const response = await request(app) + .post(`/dids/import`) + .send({ + did: 'did:key:z6Mkp2z5JZNa48qiupnSL32rt9Yj5nT31GDvL1GtNmYqgc7o', + overwrite: true, + privateKeys: [ + { + keyType: 'ed25519', + privateKeyBase58: '4Fv58mZUUUcktagjui3fgtG9GnQg3cVjAGLqi5TVB1QW', + }, + ], + }) + + expect(response.statusCode).toBe(201) + expect(response.body).toEqual({}) + }) + }) +}) diff --git a/packages/rest/src/controllers/didcomm/basic-messages/BasicMessagesController.ts b/packages/rest/src/controllers/didcomm/basic-messages/BasicMessagesController.ts new file mode 100644 index 00000000..4a78d873 --- /dev/null +++ b/packages/rest/src/controllers/didcomm/basic-messages/BasicMessagesController.ts @@ -0,0 +1,72 @@ +import { RecordNotFoundError, BasicMessageRole } from '@credo-ts/core' +import { Body, Controller, Example, Get, Post, Query, Request, Route, Security, Tags } from 'tsoa' +import { injectable } from 'tsyringe' + +import { RequestWithAgent } from '../../../authentication' +import { apiErrorResponse } from '../../../utils/response' +import { RecordId, ThreadId } from '../../types' + +import { basicMessageRecordExample } from './BasicMessagesControllerExamples' +import { + basicMessageRecordToApiModel, + DidCommBasicMessagesSendOptions, + type DidCommBasicMessagesRecord, +} from './BasicMessagesControllerTypes' + +@Tags('DIDComm Basic Messages') +@Route('/didcomm/basic-messages') +@Security('tenants', ['tenant']) +@injectable() +export class DidCommBasicMessagesController extends Controller { + /** + * Retrieve basic messages by connection id + * + * @param connectionId Connection identifier + * @returns BasicMessageRecord[] + */ + @Example([basicMessageRecordExample]) + @Get('/') + public async findBasicMessagesByQuery( + @Request() request: RequestWithAgent, + @Query('connectionId') connectionId?: RecordId, + @Query('role') role?: BasicMessageRole, + @Query('threadId') threadId?: ThreadId, + @Query('parentThreadId') parentThreadId?: ThreadId, + ): Promise { + const basicMessageRecords = await request.user.agent.basicMessages.findAllByQuery({ + connectionId, + role, + threadId, + parentThreadId, + }) + return basicMessageRecords.map(basicMessageRecordToApiModel) + } + + /** + * Send a basic message to a connection + * + * @param connectionId Connection identifier + * @param content The content of the message + * @returns BasicMessageRecord + */ + @Example(basicMessageRecordExample) + @Post('/send') + public async sendMessage(@Request() request: RequestWithAgent, @Body() body: DidCommBasicMessagesSendOptions) { + try { + const basicMessageRecord = await request.user.agent.basicMessages.sendMessage( + body.connectionId, + body.content, + body.parentThreadId, + ) + return basicMessageRecordToApiModel(basicMessageRecord) + } catch (error) { + if (error instanceof RecordNotFoundError) { + this.setStatus(404) + return apiErrorResponse(`connection with id '${body.connectionId}' not found.`) + } + + this.setStatus(500) + return apiErrorResponse(error) + } + } +} diff --git a/packages/rest/src/controllers/didcomm/basic-messages/BasicMessagesControllerExamples.ts b/packages/rest/src/controllers/didcomm/basic-messages/BasicMessagesControllerExamples.ts new file mode 100644 index 00000000..cc48508d --- /dev/null +++ b/packages/rest/src/controllers/didcomm/basic-messages/BasicMessagesControllerExamples.ts @@ -0,0 +1,14 @@ +import type { DidCommBasicMessagesRecord } from './BasicMessagesControllerTypes' + +import { BasicMessageRecord, BasicMessageRole } from '@credo-ts/core' + +export const basicMessageRecordExample: DidCommBasicMessagesRecord = { + id: '74bcf865-1fdc-45b4-b517-9def02dfd25f', + createdAt: new Date('2022-08-18T08:38:40.216Z'), + type: BasicMessageRecord.type, + + content: 'Hello!', + sentTime: '2022-08-18T08:38:40.216Z', + connectionId: '2aecf74c-3073-4f98-9acb-92415d096834', + role: BasicMessageRole.Sender, +} diff --git a/packages/rest/src/controllers/didcomm/basic-messages/BasicMessagesControllerTypes.ts b/packages/rest/src/controllers/didcomm/basic-messages/BasicMessagesControllerTypes.ts new file mode 100644 index 00000000..7f3b14fb --- /dev/null +++ b/packages/rest/src/controllers/didcomm/basic-messages/BasicMessagesControllerTypes.ts @@ -0,0 +1,35 @@ +import type { CredoBaseRecord, RecordId, ThreadId } from '../../types' +import type { BasicMessageRole, BasicMessageRecord as CredoBasicMessageRecord } from '@credo-ts/core' + +export interface DidCommBasicMessagesRecord extends CredoBaseRecord { + connectionId: RecordId + role: BasicMessageRole + content: string + sentTime: string + threadId?: ThreadId + parentThreadId?: ThreadId +} + +export function basicMessageRecordToApiModel(record: CredoBasicMessageRecord): DidCommBasicMessagesRecord { + return { + // Base Record + id: record.id, + createdAt: record.createdAt, + updatedAt: record.updatedAt, + type: record.type, + + // Basic Message + connectionId: record.connectionId, + role: record.role, + content: record.content, + sentTime: record.sentTime, + threadId: record.threadId, + parentThreadId: record.parentThreadId, + } +} + +export interface DidCommBasicMessagesSendOptions { + connectionId: RecordId + content: string + parentThreadId?: ThreadId +} diff --git a/packages/rest/src/controllers/didcomm/basic-messages/__tests__/BasicMessagesController.test.ts b/packages/rest/src/controllers/didcomm/basic-messages/__tests__/BasicMessagesController.test.ts new file mode 100644 index 00000000..de219fcb --- /dev/null +++ b/packages/rest/src/controllers/didcomm/basic-messages/__tests__/BasicMessagesController.test.ts @@ -0,0 +1,91 @@ +import type { RestRootAgent } from '../../../../utils/agent' +import type { BasicMessageStateChangedEvent } from '@credo-ts/core' +import type { Express } from 'express' + +import { BasicMessageEventTypes, BasicMessageRole } from '@credo-ts/core' +import { filter, first, firstValueFrom, timeout } from 'rxjs' +import request from 'supertest' + +import { getTestAgent } from '../../../../../tests/utils/helpers' +import { setupServer } from '../../../../server' + +describe('BasicMessagesController', () => { + let app: Express + let agent: RestRootAgent + let inviterConnectionId: string + let receiverConnectionId: string + + beforeAll(async () => { + agent = await getTestAgent('Basic Message REST Agent Test') + app = await setupServer(agent, { port: 3000 }) + + const inviterOutOfBandRecord = await agent.oob.createInvitation() + let { connectionRecord: receiverConnection } = await agent.oob.receiveInvitation( + inviterOutOfBandRecord.outOfBandInvitation, + ) + + receiverConnection = await agent.connections.returnWhenIsConnected(receiverConnection!.id) + const [inviterConnection] = await agent.connections.findAllByOutOfBandId(inviterOutOfBandRecord.id) + + inviterConnectionId = inviterConnection.id + receiverConnectionId = receiverConnection!.id + }) + + afterAll(async () => { + await agent.shutdown() + await agent.wallet.delete() + }) + + describe('Send basic message to connection', () => { + test('should return 200 when message is sent', async () => { + const messageReceived = firstValueFrom( + agent.events.observable(BasicMessageEventTypes.BasicMessageStateChanged).pipe( + filter( + (event) => + event.payload.basicMessageRecord.role === BasicMessageRole.Receiver && + event.payload.basicMessageRecord.connectionId === receiverConnectionId, + ), + first(), + timeout(10000), + ), + ) + + const response = await request(app) + .post(`/didcomm/basic-messages/send`) + .send({ content: 'Hello!', connectionId: inviterConnectionId }) + + expect(response.statusCode).toBe(200) + + await messageReceived + }) + + test('should give 404 not found when connection is not found', async () => { + const response = await request(app) + .post(`/basic-messages`) + .send({ content: 'Hello!', connectionId: 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa' }) + + expect(response.statusCode).toBe(404) + }) + }) + + describe('Get basic messages', () => { + test('should return list of basic messages filtered by connection id', async () => { + const response = await request(app).get(`/didcomm/basic-messages`).query({ connectionId: inviterConnectionId }) + + expect(response.statusCode).toBe(200) + expect(response.body).toEqual([ + { + connectionId: inviterConnectionId, + content: 'Hello!', + createdAt: expect.any(String), + id: expect.any(String), + role: 'sender', + sentTime: expect.any(String), + threadId: expect.any(String), + type: 'BasicMessageRecord', + updatedAt: expect.any(String), + }, + ]) + }) + }) +}) diff --git a/packages/rest/src/controllers/didcomm/connections/ConnectionsController.ts b/packages/rest/src/controllers/didcomm/connections/ConnectionsController.ts new file mode 100644 index 00000000..09152a87 --- /dev/null +++ b/packages/rest/src/controllers/didcomm/connections/ConnectionsController.ts @@ -0,0 +1,137 @@ +import type { DidCommConnectionsRecord } from './ConnectionsControllerTypes' + +import { DidExchangeState, Agent, RecordNotFoundError } from '@credo-ts/core' +import { Controller, Delete, Example, Get, Path, Post, Query, Request, Route, Security, Tags } from 'tsoa' +import { injectable } from 'tsyringe' + +import { RequestWithAgent } from '../../../authentication' +import { apiErrorResponse } from '../../../utils/response' +import { Did } from '../../did/DidsControllerTypes' +import { RecordId } from '../../types' + +import { connectionsRecordExample } from './ConnectionsControllerExamples' +import { connectionRecordToApiModel } from './ConnectionsControllerTypes' + +@Tags('DIDComm Connections') +@Route('/didcomm/connections') +@Security('tenants', ['tenant']) +@injectable() +export class ConnectionsController extends Controller { + public constructor(private agent: Agent) { + super() + } + + /** + * Find connection record by query + */ + @Example([connectionsRecordExample]) + @Get('/') + public async findConnectionsByQuery( + @Request() request: RequestWithAgent, + @Query('outOfBandId') outOfBandId?: RecordId, + @Query('alias') alias?: string, + @Query('state') state?: DidExchangeState, + @Query('did') did?: Did, + @Query('theirDid') theirDid?: Did, + @Query('theirLabel') theirLabel?: string, + ) { + const connections = await request.user.agent.connections.findAllByQuery({ + alias, + did, + theirDid, + theirLabel, + state, + outOfBandId, + }) + + return connections.map(connectionRecordToApiModel) + } + + /** + * Retrieve connection record by connection id + * @param connectionId Connection identifier + * @returns ConnectionRecord + */ + @Example(connectionsRecordExample) + @Get('/:connectionId') + public async getConnectionById(@Request() request: RequestWithAgent, @Path('connectionId') connectionId: RecordId) { + const connection = await request.user.agent.connections.findById(connectionId) + + if (!connection) { + this.setStatus(404) + return apiErrorResponse(`connection with connection id "${connectionId}" not found.`) + } + + return connectionRecordToApiModel(connection) + } + + /** + * Deletes a connection record from the connection repository. + * + * @param connectionId Connection identifier + */ + @Delete('/:connectionId') + public async deleteConnection(@Request() request: RequestWithAgent, @Path('connectionId') connectionId: RecordId) { + try { + this.setStatus(204) + await request.user.agent.connections.deleteById(connectionId) + } catch (error) { + if (error instanceof RecordNotFoundError) { + this.setStatus(404) + return apiErrorResponse(`connection with connection id "${connectionId}" not found.`) + } + + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Accept a connection request as inviter by sending a connection response message + * for the connection with the specified connection id. + * + * This is not needed when auto accepting of connection is enabled. + */ + @Example(connectionsRecordExample) + @Post('/:connectionId/accept-request') + public async acceptRequest(@Request() request: RequestWithAgent, @Path('connectionId') connectionId: RecordId) { + try { + const connection = await request.user.agent.connections.acceptRequest(connectionId) + return connectionRecordToApiModel(connection) + } catch (error) { + if (error instanceof RecordNotFoundError) { + this.setStatus(404) + return apiErrorResponse(`connection with connection id "${connectionId}" not found.`) + } + + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Accept a connection response as invitee by sending a trust ping message + * for the connection with the specified connection id. + * + * This is not needed when auto accepting of connection is enabled. + * + * @param connectionId Connection identifier + * @returns ConnectionRecord + */ + @Example(connectionsRecordExample) + @Post('/:connectionId/accept-response') + public async acceptResponse(@Request() request: RequestWithAgent, @Path('connectionId') connectionId: RecordId) { + try { + const connection = await request.user.agent.connections.acceptResponse(connectionId) + return connectionRecordToApiModel(connection) + } catch (error) { + if (error instanceof RecordNotFoundError) { + this.setStatus(404) + return apiErrorResponse(`connection with connection id "${connectionId}" not found.`) + } + + this.setStatus(500) + return apiErrorResponse(error) + } + } +} diff --git a/packages/rest/src/controllers/didcomm/connections/ConnectionsControllerExamples.ts b/packages/rest/src/controllers/didcomm/connections/ConnectionsControllerExamples.ts new file mode 100644 index 00000000..5d4b15f5 --- /dev/null +++ b/packages/rest/src/controllers/didcomm/connections/ConnectionsControllerExamples.ts @@ -0,0 +1,15 @@ +import type { DidCommConnectionsRecord } from './ConnectionsControllerTypes' + +import { ConnectionRecord, DidExchangeRole, DidExchangeState } from '@credo-ts/core' + +export const connectionsRecordExample: DidCommConnectionsRecord = { + id: '821f9b26-ad04-4f56-89b6-e2ef9c72b36e', + type: ConnectionRecord.type, + createdAt: new Date('2022-01-01T00:00:00.000Z'), + did: 'did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv', + state: DidExchangeState.InvitationSent, + role: DidExchangeRole.Responder, + invitationDid: + 'did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119', + outOfBandId: 'edbc89fe-785f-4774-a288-46012486881d', +} diff --git a/packages/rest/src/controllers/didcomm/connections/ConnectionsControllerTypes.ts b/packages/rest/src/controllers/didcomm/connections/ConnectionsControllerTypes.ts new file mode 100644 index 00000000..0138e415 --- /dev/null +++ b/packages/rest/src/controllers/didcomm/connections/ConnectionsControllerTypes.ts @@ -0,0 +1,58 @@ +import type { Did } from '../../did/DidsControllerTypes' +import type { CredoBaseRecord, ThreadId } from '../../types' +import type { + ConnectionType, + ConnectionRecord as CredoConnectionRecord, + DidExchangeRole, + DidExchangeState, + HandshakeProtocol, +} from '@credo-ts/core' + +export interface DidCommConnectionsRecord extends CredoBaseRecord { + did?: Did + theirDid?: Did + theirLabel?: string + state: DidExchangeState + role: DidExchangeRole + alias?: string + autoAcceptConnection?: boolean + threadId?: ThreadId + imageUrl?: string + mediatorId?: string + errorMessage?: string + protocol?: HandshakeProtocol + outOfBandId?: string + invitationDid?: Did + connectionTypes?: Array + previousDids?: Array + previousTheirDids?: Array +} + +export function connectionRecordToApiModel(record: CredoConnectionRecord): DidCommConnectionsRecord { + return { + // Base Record + id: record.id, + createdAt: record.createdAt, + updatedAt: record.updatedAt, + type: record.type, + + // Connection + did: record.did, + theirDid: record.theirDid, + theirLabel: record.theirLabel, + state: record.state, + role: record.role, + alias: record.alias, + autoAcceptConnection: record.autoAcceptConnection, + threadId: record.threadId, + imageUrl: record.imageUrl, + mediatorId: record.mediatorId, + errorMessage: record.errorMessage, + protocol: record.protocol, + outOfBandId: record.outOfBandId, + invitationDid: record.invitationDid, + connectionTypes: record.connectionTypes, + previousDids: record.previousDids, + previousTheirDids: record.previousTheirDids, + } +} diff --git a/packages/rest/src/controllers/didcomm/credentials/CredentialsController.ts b/packages/rest/src/controllers/didcomm/credentials/CredentialsController.ts new file mode 100644 index 00000000..178e2def --- /dev/null +++ b/packages/rest/src/controllers/didcomm/credentials/CredentialsController.ts @@ -0,0 +1,281 @@ +import type { + DidCommCredentialsCreateOfferResponse, + DidCommCredentialsExchangeRecord, +} from './CredentialsControllerTypes' + +import { CredentialState, RecordNotFoundError, CredentialRole } from '@credo-ts/core' +import { Body, Controller, Delete, Get, Path, Post, Route, Tags, Example, Query, Security, Request } from 'tsoa' +import { injectable } from 'tsyringe' + +import { RequestWithAgent } from '../../../authentication' +import { apiErrorResponse } from '../../../utils/response' +import { RecordId, ThreadId } from '../../types' + +import { credentialExchangeRecordExample, didCommCredentialsCreateOfferResponse } from './CredentialsControllerExamples' +import { + AcceptCredentialRequestOptions, + OfferCredentialOptions, + ProposeCredentialOptions, + AcceptCredentialProposalOptions, + AcceptCredentialOfferOptions, + CreateOfferOptions, + credentialExchangeRecordToApiModel, +} from './CredentialsControllerTypes' + +@Tags('DIDComm Credentials') +@Route('/didcomm/credentials') +@Security('tenants', ['tenant']) +@injectable() +export class CredentialsController extends Controller { + /** + * Retrieve all credential exchange records by query + */ + @Example([credentialExchangeRecordExample]) + @Get('/') + public async findCredentialsByQuery( + @Request() request: RequestWithAgent, + @Query('threadId') threadId?: ThreadId, + @Query('parentThreadId') parentThreadId?: ThreadId, + @Query('connectionId') connectionId?: RecordId, + @Query('state') state?: CredentialState, + @Query('role') role?: CredentialRole, + ) { + const credentials = await request.user.agent.credentials.findAllByQuery({ + connectionId, + threadId, + state, + parentThreadId, + role, + }) + + return credentials.map(credentialExchangeRecordToApiModel) + } + + /** + * Retrieve credential exchange record by credential record id + * + * @param credentialExchangeId + * @returns CredentialExchangeRecord + */ + @Example(credentialExchangeRecordExample) + @Get('/:credentialExchangeId') + public async getCredentialById( + @Request() request: RequestWithAgent, + @Path('credentialExchangeId') credentialExchangeId: RecordId, + ) { + try { + const credential = await request.user.agent.credentials.getById(credentialExchangeId) + return credentialExchangeRecordToApiModel(credential) + } catch (error) { + if (error instanceof RecordNotFoundError) { + this.setStatus(404) + return apiErrorResponse(`credential exchange with id "${credentialExchangeId}" not found.`) + } + + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Deletes a credential exchange record in the credential repository. + * + * @param credentialExchangeId + */ + @Delete('/:credentialExchangeId') + public async deleteCredential( + @Request() request: RequestWithAgent, + @Path('credentialExchangeId') credentialExchangeId: RecordId, + ) { + try { + this.setStatus(204) + await request.user.agent.credentials.deleteById(credentialExchangeId) + } catch (error) { + if (error instanceof RecordNotFoundError) { + this.setStatus(404) + return apiErrorResponse(`credential exchange with id "${credentialExchangeId}" not found.`) + } + + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Initiate a new credential exchange as holder by sending a propose credential message + * to the connection with a specified connection id. + * + * @param options + * @returns CredentialExchangeRecord + */ + @Example(credentialExchangeRecordExample) + @Post('/propose-credential') + public async proposeCredential(@Request() request: RequestWithAgent, @Body() options: ProposeCredentialOptions) { + try { + const credential = await request.user.agent.credentials.proposeCredential(options) + return credentialExchangeRecordToApiModel(credential) + } catch (error) { + if (error instanceof RecordNotFoundError) { + this.setStatus(404) + return apiErrorResponse(`connection with id "${options.connectionId}" not found.`) + } + + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Accept a credential proposal as issuer by sending an accept proposal message + * to the connection associated with the credential exchange record. + */ + @Example(credentialExchangeRecordExample) + @Post('/:credentialExchangeId/accept-proposal') + public async acceptProposal( + @Request() request: RequestWithAgent, + @Path('credentialExchangeId') credentialExchangeId: RecordId, + @Body() options?: AcceptCredentialProposalOptions, + ) { + try { + const credential = await request.user.agent.credentials.acceptProposal({ + ...options, + credentialRecordId: credentialExchangeId, + }) + + return credentialExchangeRecordToApiModel(credential) + } catch (error) { + if (error instanceof RecordNotFoundError) { + this.setStatus(404) + return apiErrorResponse(`credential exchange with id "${credentialExchangeId}" not found.`) + } + + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Initiate a new credential exchange as issuer by creating a credential offer + * without specifying a connection id + */ + @Example(didCommCredentialsCreateOfferResponse) + @Post('/create-offer') + public async createOffer( + @Request() request: RequestWithAgent, + @Body() options: CreateOfferOptions, + ): Promise { + try { + const offer = await request.user.agent.credentials.createOffer(options) + return { + message: offer.message.toJSON(), + credentialExchange: credentialExchangeRecordToApiModel(offer.credentialRecord), + } + } catch (error) { + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Initiate a new credential exchange as issuer by sending a offer credential message + * to the connection with the specified connection id. + */ + @Example(credentialExchangeRecordExample) + @Post('/offer-credential') + public async offerCredential(@Request() request: RequestWithAgent, @Body() options: OfferCredentialOptions) { + try { + const credential = await request.user.agent.credentials.offerCredential(options) + return credentialExchangeRecordToApiModel(credential) + } catch (error) { + if (error instanceof RecordNotFoundError) { + this.setStatus(404) + return apiErrorResponse(`connection with id "${options.connectionId}" not found.`) + } + + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Accept a credential offer as holder by sending an accept offer message + * to the connection associated with the credential exchange record. + */ + @Example(credentialExchangeRecordExample) + @Post('/:credentialExchangeId/accept-offer') + public async acceptOffer( + @Request() request: RequestWithAgent, + @Path('credentialExchangeId') credentialExchangeId: RecordId, + @Body() options?: AcceptCredentialOfferOptions, + ) { + try { + const credential = await request.user.agent.credentials.acceptOffer({ + ...options, + credentialRecordId: credentialExchangeId, + }) + return credentialExchangeRecordToApiModel(credential) + } catch (error) { + if (error instanceof RecordNotFoundError) { + this.setStatus(404) + return apiErrorResponse(`credential exchange with id "${credentialExchangeId}" not found.`) + } + + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Accept a credential request as issuer by sending an accept request message + * to the connection associated with the credential exchange record. + */ + @Example(credentialExchangeRecordExample) + @Post('/:credentialExchangeId/accept-request') + public async acceptRequest( + @Request() request: RequestWithAgent, + @Path('credentialExchangeId') credentialExchangeId: RecordId, + @Body() options?: AcceptCredentialRequestOptions, + ) { + try { + const credential = await request.user.agent.credentials.acceptRequest({ + ...options, + credentialRecordId: credentialExchangeId, + }) + return credentialExchangeRecordToApiModel(credential) + } catch (error) { + if (error instanceof RecordNotFoundError) { + this.setStatus(404) + return apiErrorResponse(`credential exchange with id "${credentialExchangeId}" not found.`) + } + + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Accept a credential as holder by sending an accept credential message + * to the connection associated with the credential exchange record. + */ + @Example(credentialExchangeRecordExample) + @Post('/:credentialExchangeId/accept-credential') + public async acceptCredential( + @Request() request: RequestWithAgent, + @Path('credentialExchangeId') credentialExchangeId: RecordId, + ) { + try { + const credential = await request.user.agent.credentials.acceptCredential({ + credentialRecordId: credentialExchangeId, + }) + return credentialExchangeRecordToApiModel(credential) + } catch (error) { + if (error instanceof RecordNotFoundError) { + this.setStatus(404) + return apiErrorResponse(`credential exchange with id "${credentialExchangeId}" not found.`) + } + + this.setStatus(500) + return apiErrorResponse(error) + } + } +} diff --git a/packages/rest/src/controllers/didcomm/credentials/CredentialsControllerExamples.ts b/packages/rest/src/controllers/didcomm/credentials/CredentialsControllerExamples.ts new file mode 100644 index 00000000..a50fb6a9 --- /dev/null +++ b/packages/rest/src/controllers/didcomm/credentials/CredentialsControllerExamples.ts @@ -0,0 +1,27 @@ +import type { + DidCommCredentialsCreateOfferResponse, + DidCommCredentialsExchangeRecord, +} from './CredentialsControllerTypes' + +import { CredentialExchangeRecord, CredentialRole, CredentialState } from '@credo-ts/core' + +export const credentialExchangeRecordExample: DidCommCredentialsExchangeRecord = { + credentials: [], + type: CredentialExchangeRecord.type, + role: CredentialRole.Holder, + id: '821f9b26-ad04-4f56-89b6-e2ef9c72b36e', + createdAt: new Date('2022-01-01T00:00:00.000Z'), + state: CredentialState.OfferSent, + connectionId: 'ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b', + threadId: '82701488-b43c-4d7b-9244-4bb204a7ae26', + credentialAttributes: [], + protocolVersion: 'v1', +} + +export const didCommCredentialsCreateOfferResponse: DidCommCredentialsCreateOfferResponse = { + credentialExchange: credentialExchangeRecordExample, + message: { + '@id': '134b27f0-9366-4811-a36b-50bacfe57e61', + '@type': 'https://didcomm.org/issue-credential/1.0/offer-credential', + }, +} diff --git a/packages/rest/src/controllers/didcomm/credentials/CredentialsControllerTypes.ts b/packages/rest/src/controllers/didcomm/credentials/CredentialsControllerTypes.ts new file mode 100644 index 00000000..342c78cc --- /dev/null +++ b/packages/rest/src/controllers/didcomm/credentials/CredentialsControllerTypes.ts @@ -0,0 +1,115 @@ +import type { CredoBaseRecord, RecordId, ThreadId } from '../../types' +import type { AnonCredsCredentialFormat, LegacyIndyCredentialFormat } from '@credo-ts/anoncreds' +import type { + AutoAcceptCredential, + CredentialFormatPayload, + CredentialPreviewAttributeOptions, + CredentialRecordBinding, + CredentialRole, + CredentialState, + CredentialExchangeRecord as CredoCredentialExchangeRecord, +} from '@credo-ts/core' +import type { PlaintextMessage } from '@credo-ts/core/build/types' + +type CredentialFormats = [LegacyIndyCredentialFormat, AnonCredsCredentialFormat] +type CredentialProtocolVersion = 'v1' | 'v2' + +export interface DidCommCredentialsExchangeRecord extends CredoBaseRecord { + connectionId?: RecordId + threadId: ThreadId + parentThreadId?: ThreadId + state: CredentialState + role: CredentialRole + autoAcceptCredential?: AutoAcceptCredential + revocationNotification?: { + revocationDate: Date + comment?: string + } + errorMessage?: string + protocolVersion: string + credentials: CredentialRecordBinding[] + credentialAttributes?: CredentialPreviewAttributeOptions[] +} + +export function credentialExchangeRecordToApiModel( + record: CredoCredentialExchangeRecord, +): DidCommCredentialsExchangeRecord { + return { + // Base Record + id: record.id, + createdAt: record.createdAt, + updatedAt: record.updatedAt, + type: record.type, + + connectionId: record.connectionId, + threadId: record.threadId, + parentThreadId: record.parentThreadId, + state: record.state, + role: record.role, + autoAcceptCredential: record.autoAcceptCredential, + revocationNotification: record.revocationNotification + ? { + revocationDate: record.revocationNotification.revocationDate, + comment: record.revocationNotification.comment, + } + : undefined, + errorMessage: record.errorMessage, + protocolVersion: record.protocolVersion, + credentials: record.credentials, + credentialAttributes: record.credentialAttributes?.map((a) => ({ + name: a.name, + value: a.value, + mimeType: a.mimeType, + })), + } +} + +export interface ProposeCredentialOptions { + protocolVersion: CredentialProtocolVersion + credentialFormats: { + [key in CredentialFormats[number] as key['formatKey']]?: CredentialFormats[number]['credentialFormats']['createProposal'] + } + autoAcceptCredential?: AutoAcceptCredential + comment?: string + connectionId: RecordId +} + +export interface AcceptCredentialProposalOptions { + credentialFormats?: { + [key in CredentialFormats[number] as key['formatKey']]?: CredentialFormats[number]['credentialFormats']['acceptProposal'] + } + autoAcceptCredential?: AutoAcceptCredential + comment?: string +} + +export interface CreateOfferOptions { + protocolVersion: CredentialProtocolVersion + credentialFormats: CredentialFormatPayload + autoAcceptCredential?: AutoAcceptCredential + comment?: string +} + +export interface DidCommCredentialsCreateOfferResponse { + message: PlaintextMessage + credentialExchange: DidCommCredentialsExchangeRecord +} + +export interface OfferCredentialOptions { + protocolVersion: CredentialProtocolVersion + credentialFormats: CredentialFormatPayload + autoAcceptCredential?: AutoAcceptCredential + comment?: string + connectionId: RecordId +} + +export interface AcceptCredentialOfferOptions { + credentialFormats?: CredentialFormatPayload + autoAcceptCredential?: AutoAcceptCredential + comment?: string +} + +export interface AcceptCredentialRequestOptions { + credentialFormats?: CredentialFormatPayload + autoAcceptCredential?: AutoAcceptCredential + comment?: string +} diff --git a/packages/rest/src/controllers/didcomm/credentials/__tests__/CredentialsController.test.ts b/packages/rest/src/controllers/didcomm/credentials/__tests__/CredentialsController.test.ts new file mode 100644 index 00000000..d2153659 --- /dev/null +++ b/packages/rest/src/controllers/didcomm/credentials/__tests__/CredentialsController.test.ts @@ -0,0 +1,128 @@ +import type { RestRootAgent } from '../../../../utils/agent' +import type { CredentialStateChangedEvent } from '@credo-ts/core' +import type { Express } from 'express' + +import { CredentialEventTypes, CredentialRole, CredentialState } from '@credo-ts/core' +import { filter, first, firstValueFrom, timeout } from 'rxjs' +import request from 'supertest' + +import { getTestAgent } from '../../../../../tests/utils/helpers' +import { setupServer } from '../../../../server' +import { testAnonCredsSchema } from '../../../anoncreds/__tests__/fixtures' + +describe('BasicMessagesController', () => { + let app: Express + let agent: RestRootAgent + let inviterConnectionId: string + let receiverConnectionId: string + + let credentialDefinitionId: string + + beforeAll(async () => { + agent = await getTestAgent('DIDComm Credentials REST Agent Test') + app = await setupServer(agent, { port: 3000 }) + + const inviterOutOfBandRecord = await agent.oob.createInvitation() + let { connectionRecord: receiverConnection } = await agent.oob.receiveInvitation( + inviterOutOfBandRecord.outOfBandInvitation, + ) + + receiverConnection = await agent.connections.returnWhenIsConnected(receiverConnection!.id) + const [inviterConnection] = await agent.connections.findAllByOutOfBandId(inviterOutOfBandRecord.id) + + inviterConnectionId = inviterConnection.id + receiverConnectionId = receiverConnection.id + + const registerDefinitionResult = await agent.modules.anoncreds.registerCredentialDefinition({ + credentialDefinition: { + issuerId: testAnonCredsSchema.schema.issuerId, + schemaId: testAnonCredsSchema.schemaId, + tag: 'test', + }, + options: { + supportRevocation: false, + }, + }) + + if (registerDefinitionResult.credentialDefinitionState.state !== 'finished') { + throw new Error('Credential definition registration failed') + } + + credentialDefinitionId = registerDefinitionResult.credentialDefinitionState.credentialDefinitionId + }) + + afterAll(async () => { + await agent.shutdown() + await agent.wallet.delete() + }) + + test('Issue credential', async () => { + const offerReceived = firstValueFrom( + agent.events.observable(CredentialEventTypes.CredentialStateChanged).pipe( + filter( + (event) => + event.payload.credentialRecord.role === CredentialRole.Holder && + event.payload.credentialRecord.connectionId === receiverConnectionId && + event.payload.credentialRecord.state === CredentialState.OfferReceived, + ), + first(), + timeout(10000), + ), + ) + + const response = await request(app) + .post(`/didcomm/credentials/offer-credential`) + .send({ + connectionId: inviterConnectionId, + protocolVersion: 'v2', + credentialFormats: { + anoncreds: { + credentialDefinitionId: credentialDefinitionId, + attributes: [ + { + name: 'prop1', + value: 'Alice', + }, + { + name: 'prop2', + value: 'Bob', + }, + ], + }, + }, + autoAcceptCredential: 'contentApproved', + }) + + expect(response.statusCode).toBe(200) + + // Wait for offer to be received + await offerReceived + + const receiverExchangeResponse = await request(app).get(`/didcomm/credentials`).query({ + state: CredentialState.OfferReceived, + threadId: response.body.threadId, + }) + expect(receiverExchangeResponse.statusCode).toBe(200) + expect(receiverExchangeResponse.body).toHaveLength(1) + + const credentialIssued = firstValueFrom( + agent.events.observable(CredentialEventTypes.CredentialStateChanged).pipe( + filter( + (event) => + event.payload.credentialRecord.role === CredentialRole.Issuer && + event.payload.credentialRecord.connectionId === inviterConnectionId && + event.payload.credentialRecord.state === CredentialState.Done, + ), + first(), + timeout(10000), + ), + ) + + const acceptResponse = await request(app) + .post(`/didcomm/credentials/${receiverExchangeResponse.body[0].id}/accept-offer`) + .send({}) + expect(acceptResponse.statusCode).toBe(200) + + await credentialIssued + }) +}) diff --git a/packages/rest/src/controllers/didcomm/out-of-band/OutOfBandController.ts b/packages/rest/src/controllers/didcomm/out-of-band/OutOfBandController.ts new file mode 100644 index 00000000..289d0d1d --- /dev/null +++ b/packages/rest/src/controllers/didcomm/out-of-band/OutOfBandController.ts @@ -0,0 +1,270 @@ +import type { DidCommOutOfBandCreateInvitationResponse, DidCommOutOfBandRecord } from './OutOfBandControllerTypes' +import type { PlaintextMessage } from '@credo-ts/core/build/types' + +import { + AgentMessage, + JsonTransformer, + OutOfBandInvitation, + RecordNotFoundError, + ConnectionInvitationMessage, + OutOfBandState, + OutOfBandRole, +} from '@credo-ts/core' +import { parseMessageType, supportsIncomingMessageType } from '@credo-ts/core/build/utils/messageType' +import { Body, Controller, Delete, Example, Get, Path, Post, Query, Request, Route, Security, Tags } from 'tsoa' +import { injectable } from 'tsyringe' + +import { RequestWithAgent } from '../../../authentication' +import { apiErrorResponse } from '../../../utils/response' +import { RecordId } from '../../types' +import { connectionsRecordExample } from '../connections/ConnectionsControllerExamples' +import { connectionRecordToApiModel, type DidCommConnectionsRecord } from '../connections/ConnectionsControllerTypes' + +import { + legacyInvitationExample, + outOfBandCreateInvitationResponseExample, + outOfBandRecordExample, +} from './OutOfBandControllerExamples' +import { + outOfBandRecordToApiModel, + DidCommOutOfBandCreateInvitationOptions, + DidCommOutOfBandCreateLegacyConnectionInvitationOptions, + DidCommOutOfBandCreateLegacyConnectionlessInvitationOptions, + DidCommOutOfBandReceiveInvitationOptions, + DidCommOutOfBandAcceptInvitationOptions, +} from './OutOfBandControllerTypes' + +@Tags('DIDComm Out Of Band') +@Route('/didcomm/out-of-band') +@Security('tenants', ['tenant']) +@injectable() +export class OutOfBandController extends Controller { + /** + * Retrieve all out of band records by query + */ + @Example([outOfBandRecordExample]) + @Get() + public async findOutOfBandRecordsByQuery( + @Request() request: RequestWithAgent, + @Query('invitationId') invitationId?: string, + @Query('role') role?: OutOfBandRole, + @Query('state') state?: OutOfBandState, + @Query('threadId') threadId?: string, + ): Promise { + const outOfBandRecords = await request.user.agent.oob.findAllByQuery({ + invitationId, + role, + state, + threadId, + }) + + return outOfBandRecords.map(outOfBandRecordToApiModel) + } + + /** + * Retrieve an out of band record by id + */ + @Example(outOfBandRecordExample) + @Get('/:outOfBandId') + public async getOutOfBandRecordById( + @Request() request: RequestWithAgent, + @Path('outOfBandId') outOfBandId: RecordId, + ): Promise { + const outOfBandRecord = await request.user.agent.oob.findById(outOfBandId) + + if (!outOfBandRecord) { + this.setStatus(404) + return apiErrorResponse(`Out of band record with id "${outOfBandId}" not found.`) + } + return outOfBandRecordToApiModel(outOfBandRecord) + } + + /** + * Creates an outbound out-of-band record containing out-of-band invitation message defined in + * Aries RFC 0434: Out-of-Band Protocol 1.1. + */ + @Example(outOfBandCreateInvitationResponseExample) + @Post('/create-invitation') + public async createInvitation( + @Request() request: RequestWithAgent, + @Body() body?: DidCommOutOfBandCreateInvitationOptions, + ): Promise { + try { + const outOfBandRecord = await request.user.agent.oob.createInvitation({ + ...body, + messages: body?.messages?.map((m) => JsonTransformer.fromJSON(m, AgentMessage)), + }) + return { + invitationUrl: outOfBandRecord.outOfBandInvitation.toUrl({ + domain: request.user.agent.config.endpoints[0], + }), + invitation: outOfBandRecord.outOfBandInvitation.toJSON({ + useDidSovPrefixWhereAllowed: request.user.agent.config.useDidSovPrefixWhereAllowed, + }), + outOfBandRecord: outOfBandRecordToApiModel(outOfBandRecord), + } + } catch (error) { + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Creates an outbound out-of-band record in the same way how `createInvitation` method does it, + * but it also converts out-of-band invitation message to an "legacy" invitation message defined + * in RFC 0160: Connection Protocol and returns it together with out-of-band record. + * + * @param config configuration of how a invitation should be created + * @returns out-of-band record and invitation + */ + @Example<{ invitation: PlaintextMessage; outOfBandRecord: DidCommOutOfBandRecord }>({ + invitation: legacyInvitationExample, + outOfBandRecord: outOfBandRecordExample, + }) + @Post('/create-legacy-invitation') + public async createLegacyInvitation( + @Request() request: RequestWithAgent, + @Body() body?: DidCommOutOfBandCreateLegacyConnectionInvitationOptions, + ) { + try { + const { outOfBandRecord, invitation } = await request.user.agent.oob.createLegacyInvitation(body) + + return { + invitationUrl: invitation.toUrl({ + domain: request.user.agent.config.endpoints[0], + useDidSovPrefixWhereAllowed: request.user.agent.config.useDidSovPrefixWhereAllowed, + }), + invitation: invitation.toJSON({ + useDidSovPrefixWhereAllowed: request.user.agent.config.useDidSovPrefixWhereAllowed, + }), + outOfBandRecord: outOfBandRecordToApiModel(outOfBandRecord), + } + } catch (error) { + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Creates a new connectionless legacy invitation. + * + * Only works with messages created from: + * - /didcomm/credentials/create-offer + * - /didcomm/poofs/create-request + */ + @Example<{ message: PlaintextMessage; invitationUrl: string }>({ + message: { + '@id': 'eac4ff4e-b4fb-4c1d-aef3-b29c89d1cc00', + '@type': 'https://didcomm.org/issue-credential/1.0/offer-credential', + }, + invitationUrl: 'http://example.com/invitation_url', + }) + @Post('/create-legacy-connectionless-invitation') + public async createLegacyConnectionlessInvitation( + @Request() request: RequestWithAgent, + @Body() config: DidCommOutOfBandCreateLegacyConnectionlessInvitationOptions, + ) { + try { + const agentMessage = JsonTransformer.fromJSON(config.message, AgentMessage) + + return await request.user.agent.oob.createLegacyConnectionlessInvitation({ + ...config, + message: agentMessage, + }) + } catch (error) { + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Receive an out of band invitation. Supports urls as well as JSON messages. Also supports legacy + * connection invitations + */ + @Example<{ outOfBandRecord: DidCommOutOfBandRecord; connectionRecord?: DidCommConnectionsRecord }>({ + outOfBandRecord: outOfBandRecordExample, + connectionRecord: connectionsRecordExample, + }) + @Post('/receive-invitation') + public async receiveInvitation( + @Request() request: RequestWithAgent, + @Body() body: DidCommOutOfBandReceiveInvitationOptions, + ) { + const { invitation, ...config } = body + + try { + let invitationMessage: OutOfBandInvitation | ConnectionInvitationMessage + if (typeof invitation === 'string') { + invitationMessage = await request.user.agent.oob.parseInvitation(invitation) + } else if (supportsIncomingMessageType(parseMessageType(invitation['@type']), ConnectionInvitationMessage.type)) { + invitationMessage = JsonTransformer.fromJSON(invitation, ConnectionInvitationMessage) + } else if (supportsIncomingMessageType(parseMessageType(invitation['@type']), OutOfBandInvitation.type)) { + invitationMessage = JsonTransformer.fromJSON(invitation, OutOfBandInvitation) + } else { + return apiErrorResponse(`Invalid invitation message type ${invitation['@type']}`) + } + + const { outOfBandRecord, connectionRecord } = await request.user.agent.oob.receiveInvitation( + invitationMessage, + config, + ) + + return { + outOfBandRecord: outOfBandRecordToApiModel(outOfBandRecord), + connectionRecord: connectionRecord ? connectionRecordToApiModel(connectionRecord) : undefined, + } + } catch (error) { + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Accept a connection invitation as invitee (by sending a connection request message) for the connection with the specified connection id. + * This is not needed when auto accepting of connections is enabled. + */ + @Example<{ outOfBandRecord: DidCommOutOfBandRecord; connectionRecord?: DidCommConnectionsRecord }>({ + outOfBandRecord: outOfBandRecordExample, + connectionRecord: connectionsRecordExample, + }) + @Post('/:outOfBandId/accept-invitation') + public async acceptInvitation( + @Request() request: RequestWithAgent, + @Path('outOfBandId') outOfBandId: RecordId, + @Body() acceptInvitationConfig: DidCommOutOfBandAcceptInvitationOptions, + ) { + try { + const { outOfBandRecord, connectionRecord } = await request.user.agent.oob.acceptInvitation( + outOfBandId, + acceptInvitationConfig, + ) + + return { + outOfBandRecord: outOfBandRecordToApiModel(outOfBandRecord), + connectionRecord: connectionRecord ? connectionRecordToApiModel(connectionRecord) : undefined, + } + } catch (error) { + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Deletes an out of band record from the repository. + */ + @Delete('/:outOfBandId') + public async deleteOutOfBandRecord(@Request() request: RequestWithAgent, @Path('outOfBandId') outOfBandId: RecordId) { + try { + this.setStatus(204) + await request.user.agent.oob.deleteById(outOfBandId) + } catch (error) { + if (error instanceof RecordNotFoundError) { + this.setStatus(404) + return apiErrorResponse(`Out of band record with id ${outOfBandId} not found.`) + } + + this.setStatus(500) + return apiErrorResponse(error) + } + } +} diff --git a/packages/rest/src/controllers/didcomm/out-of-band/OutOfBandControllerExamples.ts b/packages/rest/src/controllers/didcomm/out-of-band/OutOfBandControllerExamples.ts new file mode 100644 index 00000000..e4fc02be --- /dev/null +++ b/packages/rest/src/controllers/didcomm/out-of-band/OutOfBandControllerExamples.ts @@ -0,0 +1,41 @@ +import type { DidCommOutOfBandCreateInvitationResponse, DidCommOutOfBandRecord } from './OutOfBandControllerTypes' + +import { OutOfBandRecord, OutOfBandRole, OutOfBandState } from '@credo-ts/core' + +export const outOfBandInvitationExample = { + '@type': 'https://didcomm.org/out-of-band/1.1/invitation', + '@id': 'd6472943-e5d0-4d95-8b48-790ed5a41931', + label: 'Aries Test Agent', + accept: ['didcomm/aip1', 'didcomm/aip2;env=rfc19'], + handshake_protocols: ['https://didcomm.org/didexchange/1.0', 'https://didcomm.org/connections/1.0'], + services: [ + { + id: '#inline-0', + serviceEndpoint: 'https://6b77-89-20-162-146.ngrok.io', + type: 'did-communication', + recipientKeys: ['did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM'], + routingKeys: [], + }, + ], +} + +export const legacyInvitationExample = { + '@type': 'https://didcomm.org/connections/1./invitation', + '@id': 'd6b23733-be49-408b-98ab-ba9460384087', +} + +export const outOfBandRecordExample: DidCommOutOfBandRecord = { + outOfBandInvitation: outOfBandInvitationExample, + id: '42a95528-0e30-4f86-a462-0efb02178b53', + createdAt: new Date('2022-01-01T00:00:00.000Z'), + role: OutOfBandRole.Sender, + state: OutOfBandState.PrepareResponse, + reusable: false, + type: OutOfBandRecord.type, +} + +export const outOfBandCreateInvitationResponseExample: DidCommOutOfBandCreateInvitationResponse = { + invitationUrl: 'https://example.com/?', + invitation: outOfBandInvitationExample, + outOfBandRecord: outOfBandRecordExample, +} diff --git a/packages/rest/src/controllers/didcomm/out-of-band/OutOfBandControllerTypes.ts b/packages/rest/src/controllers/didcomm/out-of-band/OutOfBandControllerTypes.ts new file mode 100644 index 00000000..76f45cfb --- /dev/null +++ b/packages/rest/src/controllers/didcomm/out-of-band/OutOfBandControllerTypes.ts @@ -0,0 +1,117 @@ +import type { Did } from '../../did/DidsControllerTypes' +import type { CredoBaseRecord, RecordId } from '../../types' +import type { + CreateLegacyInvitationConfig, + CreateOutOfBandInvitationConfig, + OutOfBandRecord as CredoOutOfBandRecord, + OutOfBandRole, + OutOfBandState, + ReceiveOutOfBandInvitationConfig, +} from '@credo-ts/core' +import type { PlaintextMessage } from '@credo-ts/core/build/types' + +export interface DidCommOutOfBandCreateInvitationOptions + extends Omit { + messages?: Array +} + +export interface DidCommOutOfBandCreateInvitationResponse { + invitation: PlaintextMessage + outOfBandRecord: DidCommOutOfBandRecord + invitationUrl: string +} + +export interface DidCommOutOfBandCreateLegacyConnectionInvitationOptions + extends Omit {} + +export interface DidCommOutOfBandCreateLegacyConnectionlessInvitationOptions { + message: PlaintextMessage + domain: string +} + +export interface DidCommOutOfBandReceiveInvitationOptions extends Omit { + invitation: PlaintextMessage | string +} + +export interface DidCommOutOfBandAcceptInvitationOptions { + autoAcceptConnection?: boolean + reuseConnection?: boolean + label?: string + alias?: string + imageUrl?: string + timeoutMs?: number + ourDid?: Did +} + +export interface DidCommOutOfBandRecord extends CredoBaseRecord { + /** + * The out of band invitation + */ + outOfBandInvitation: PlaintextMessage + + /** + * Our role in the out of band exchange + * + * @example receiver + */ + role: OutOfBandRole + + /** + * State of the out of band invitation + * + * @example await-response + */ + state: OutOfBandState + + /** + * Alias for the connection(s) created based on the out of band invitation + * + * @example "My Connection" + */ + alias?: string + + /** + * Whether the out of band invitation is reusable + * + * @example true + */ + reusable: boolean + + /** + * Whether to auto accept the out of band invitation. + * If not defined agent config will be used. + * + * @example true + */ + autoAcceptConnection?: boolean + + /** + * Mediator used for the out of band exchange + */ + mediatorId?: RecordId + + /** + * The id of the connection that was reused for the out of band exchange + */ + reuseConnectionId?: RecordId +} + +export function outOfBandRecordToApiModel(record: CredoOutOfBandRecord): DidCommOutOfBandRecord { + return { + // Base Record + id: record.id, + createdAt: record.createdAt, + updatedAt: record.updatedAt, + type: record.type, + + // OOB + outOfBandInvitation: record.outOfBandInvitation.toJSON(), + reusable: record.reusable, + role: record.role, + state: record.state, + alias: record.alias, + autoAcceptConnection: record.autoAcceptConnection, + mediatorId: record.mediatorId, + reuseConnectionId: record.reuseConnectionId, + } +} diff --git a/packages/rest/src/controllers/didcomm/out-of-band/__tests__/OutOfBandController.test.ts b/packages/rest/src/controllers/didcomm/out-of-band/__tests__/OutOfBandController.test.ts new file mode 100644 index 00000000..b020e99c --- /dev/null +++ b/packages/rest/src/controllers/didcomm/out-of-band/__tests__/OutOfBandController.test.ts @@ -0,0 +1,53 @@ +import type { RestRootAgent } from '../../../../utils/agent' +import type { ConnectionStateChangedEvent } from '@credo-ts/core' + +import { ConnectionEventTypes, DidExchangeState } from '@credo-ts/core' +import { randomUUID } from 'crypto' +import { type Express } from 'express' +import { filter, first, firstValueFrom, timeout } from 'rxjs' +import request from 'supertest' + +import { getTestAgent } from '../../../../../tests/utils/helpers' +import { setupServer } from '../../../../server' + +describe('OutOfBandController', () => { + let app: Express + let agent: RestRootAgent + + beforeAll(async () => { + agent = await getTestAgent('DIDComm Out Of Band REST Agent Test') + app = await setupServer(agent, { port: 3000 }) + }) + + afterAll(async () => { + await agent.shutdown() + await agent.wallet.delete() + }) + + test('Create connection using oob', async () => { + const alias = randomUUID() + const connectionCreated = firstValueFrom( + agent.events.observable(ConnectionEventTypes.ConnectionStateChanged).pipe( + filter( + (event) => + event.payload.connectionRecord.alias === alias && + event.payload.connectionRecord.state === DidExchangeState.Completed, + ), + first(), + timeout(10000), + ), + ) + + const createResponse = await request(app).post(`/didcomm/out-of-band/create-invitation`).send({ + alias, + }) + expect(createResponse.statusCode).toBe(200) + + const receiveResponse = await request(app).post(`/didcomm/out-of-band/receive-invitation`).send({ + invitation: createResponse.body.invitationUrl, + }) + expect(receiveResponse.statusCode).toBe(200) + + await connectionCreated + }) +}) diff --git a/packages/rest/src/controllers/didcomm/proofs/ProofsController.ts b/packages/rest/src/controllers/didcomm/proofs/ProofsController.ts new file mode 100644 index 00000000..74eeccd5 --- /dev/null +++ b/packages/rest/src/controllers/didcomm/proofs/ProofsController.ts @@ -0,0 +1,266 @@ +import type { DidCommProofsCreateRequestResponse, DidCommProofsExchangeRecord } from './ProofsControllerTypes' + +import { ProofRole, ProofState, RecordNotFoundError } from '@credo-ts/core' +import { Body, Controller, Delete, Example, Get, Path, Post, Query, Request, Route, Security, Tags } from 'tsoa' +import { injectable } from 'tsyringe' + +import { RequestWithAgent } from '../../../authentication' +import { apiErrorResponse } from '../../../utils/response' +import { RecordId, ThreadId } from '../../types' + +import { didCommProofsCreateRequestResponse, proofExchangeRecordExample } from './ProofsControllerExamples' +import { + DidCommProofsCreateRequestOptions, + DidCommProofsAcceptRequestOptions, + proofExchangeRecordToApiModel, + DidCommProofsProposeProofOptions, + DidCommProofsAcceptProposalOptions, + transformApiProofFormatToCredo, + DidCommProofsSendRequestOptions, +} from './ProofsControllerTypes' + +@Tags('DIDComm Proofs') +@Route('/didcomm/proofs') +@Security('tenants', ['tenant']) +@injectable() +export class ProofsController extends Controller { + /** + * Find proof exchanges by query + */ + @Example([proofExchangeRecordExample]) + @Get('/') + public async findProofsByQuery( + @Request() request: RequestWithAgent, + @Query('threadId') threadId?: ThreadId, + @Query('connectionId') connectionId?: RecordId, + @Query('state') state?: ProofState, + @Query('parentThreadId') parentThreadId?: ThreadId, + @Query('role') role?: ProofRole, + ): Promise { + const proofs = await request.user.agent.proofs.findAllByQuery({ + threadId, + connectionId, + state, + parentThreadId, + role, + }) + + return proofs.map(proofExchangeRecordToApiModel) + } + + /** + * Retrieve proof exchange by proof exchange id + */ + @Get('/:proofExchangeId') + @Example(proofExchangeRecordExample) + public async getProofExchangeById( + @Request() request: RequestWithAgent, + @Path('proofExchangeId') proofExchangeId: RecordId, + ): Promise { + const proofExchange = await request.user.agent.proofs.findById(proofExchangeId) + + if (!proofExchange) { + this.setStatus(404) + return apiErrorResponse(`proof exchange with id "${proofExchangeId}" not found.`) + } + + return proofExchangeRecordToApiModel(proofExchange) + } + + /** + * Deletes a proof exchange record. + */ + @Delete('/:proofExchangeId') + public async deleteProof( + @Request() request: RequestWithAgent, + @Path('proofExchangeId') proofExchangeId: RecordId, + ): Promise { + try { + this.setStatus(204) + await request.user.agent.proofs.deleteById(proofExchangeId) + } catch (error) { + if (error instanceof RecordNotFoundError) { + this.setStatus(404) + return apiErrorResponse(`proof exchange with id "${proofExchangeId}" not found.`) + } + + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Initiate a new presentation exchange as prover by sending a presentation proposal request + * to the connection with the specified connection id. + */ + @Post('/propose-proof') + @Example(proofExchangeRecordExample) + public async proposeProof( + @Request() request: RequestWithAgent, + @Body() body: DidCommProofsProposeProofOptions, + ): Promise { + try { + const proofExchange = await request.user.agent.proofs.proposeProof(body) + return proofExchangeRecordToApiModel(proofExchange) + } catch (error) { + if (error instanceof RecordNotFoundError) { + this.setStatus(404) + return apiErrorResponse(`connection with id "${body.connectionId}" not found.`) + } + + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Accept a presentation proposal as verifier by sending an accept proposal message + * to the connection associated with the proof record. + */ + @Post('/:proofExchangeId/accept-proposal') + @Example(proofExchangeRecordExample) + public async acceptProposal( + @Request() request: RequestWithAgent, + @Path('proofExchangeId') proofExchangeId: RecordId, + @Body() body: DidCommProofsAcceptProposalOptions, + ): Promise { + try { + const proof = await request.user.agent.proofs.acceptProposal({ + proofRecordId: proofExchangeId, + ...body, + }) + + return proofExchangeRecordToApiModel(proof) + } catch (error) { + if (error instanceof RecordNotFoundError) { + this.setStatus(404) + return apiErrorResponse(`proof exchange with id "${proofExchangeId}" not found.`) + } + + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Creates a presentation request not bound to any proposal or existing connection + */ + @Post('/create-request') + @Example(didCommProofsCreateRequestResponse) + public async createRequest( + @Request() request: RequestWithAgent, + @Body() body: DidCommProofsCreateRequestOptions, + ): Promise { + try { + // NOTE: Credo does not work well if 'undefined' is passed. We should fix this in credo + const proofFormats: Parameters[0]['proofFormats'] = {} + if (body.proofFormats.anoncreds) { + proofFormats.anoncreds = transformApiProofFormatToCredo(body.proofFormats.anoncreds) + } + if (body.proofFormats.indy) { + proofFormats.indy = transformApiProofFormatToCredo(body.proofFormats.indy) + } + + const { message, proofRecord: proofExchange } = await request.user.agent.proofs.createRequest({ + ...body, + proofFormats, + }) + + return { + message: message.toJSON(), + proofExchange: proofExchangeRecordToApiModel(proofExchange), + } + } catch (error) { + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Creates a presentation request bound to existing connection + */ + @Post('/request-proof') + @Example(proofExchangeRecordExample) + public async requestProof(@Request() request: RequestWithAgent, @Body() body: DidCommProofsSendRequestOptions) { + try { + // NOTE: Credo does not work well if 'undefined' is passed as a proofFormat key. We should fix this in credo + const proofFormats: Parameters[0]['proofFormats'] = {} + if (body.proofFormats.anoncreds) { + proofFormats.anoncreds = transformApiProofFormatToCredo(body.proofFormats.anoncreds) + } + if (body.proofFormats.indy) { + proofFormats.indy = transformApiProofFormatToCredo(body.proofFormats.indy) + } + + const proof = await request.user.agent.proofs.requestProof({ + ...body, + proofFormats, + }) + + return proofExchangeRecordToApiModel(proof) + } catch (error) { + if (error instanceof RecordNotFoundError) { + this.setStatus(404) + return apiErrorResponse(`connection with id "${body.connectionId}" not found.`) + } + + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Accept a presentation request as prover by sending an accept request message + * to the connection associated with the proof record. + */ + @Post('/:proofExchangeId/accept-request') + @Example(proofExchangeRecordExample) + public async acceptRequest( + @Request() request: RequestWithAgent, + @Path('proofExchangeId') proofExchangeId: RecordId, + @Body() body: DidCommProofsAcceptRequestOptions, + ) { + try { + const proof = await request.user.agent.proofs.acceptRequest({ + ...body, + proofRecordId: proofExchangeId, + proofFormats: body.proofFormats, + }) + + return proofExchangeRecordToApiModel(proof) + } catch (error) { + if (error instanceof RecordNotFoundError) { + this.setStatus(404) + return apiErrorResponse(`proof exchange with id "${proofExchangeId}" not found.`) + } + + this.setStatus(500) + return apiErrorResponse(error) + } + } + + /** + * Accept a presentation as prover by sending an accept presentation message + * to the connection associated with the proof record. + */ + @Post('/:proofExchangeId/accept-presentation') + @Example(proofExchangeRecordExample) + public async acceptPresentation( + @Request() request: RequestWithAgent, + @Path('proofExchangeId') proofExchangeId: RecordId, + ) { + try { + const proof = await request.user.agent.proofs.acceptPresentation({ proofRecordId: proofExchangeId }) + + return proofExchangeRecordToApiModel(proof) + } catch (error) { + if (error instanceof RecordNotFoundError) { + this.setStatus(404) + return apiErrorResponse(`proof exchange with id "${proofExchangeId}" not found.`) + } + + this.setStatus(500) + return apiErrorResponse(error) + } + } +} diff --git a/packages/rest/src/controllers/didcomm/proofs/ProofsControllerExamples.ts b/packages/rest/src/controllers/didcomm/proofs/ProofsControllerExamples.ts new file mode 100644 index 00000000..d8fb617e --- /dev/null +++ b/packages/rest/src/controllers/didcomm/proofs/ProofsControllerExamples.ts @@ -0,0 +1,23 @@ +import type { DidCommProofsCreateRequestResponse, DidCommProofsExchangeRecord } from './ProofsControllerTypes' + +import { AutoAcceptProof, ProofExchangeRecord, ProofRole, ProofState } from '@credo-ts/core' + +export const proofExchangeRecordExample: DidCommProofsExchangeRecord = { + id: '821f9b26-ad04-4f56-89b6-e2ef9c72b36e', + protocolVersion: 'v2', + role: ProofRole.Prover, + state: ProofState.ProposalSent, + threadId: '0019d466-5eea-4269-8c40-031b4896c5b7', + connectionId: '2aecf74c-3073-4f98-9acb-92415d096834', + createdAt: new Date('2022-01-01T00:00:00.000Z'), + autoAcceptProof: AutoAcceptProof.Always, + type: ProofExchangeRecord.type, +} + +export const didCommProofsCreateRequestResponse: DidCommProofsCreateRequestResponse = { + proofExchange: proofExchangeRecordExample, + message: { + '@id': '134b27f0-9366-4811-a36b-50bacfe57e61', + '@type': 'https://didcomm.org/present-proof/1.0/request-presentation', + }, +} diff --git a/packages/rest/src/controllers/didcomm/proofs/ProofsControllerTypes.ts b/packages/rest/src/controllers/didcomm/proofs/ProofsControllerTypes.ts new file mode 100644 index 00000000..eb1d5db3 --- /dev/null +++ b/packages/rest/src/controllers/didcomm/proofs/ProofsControllerTypes.ts @@ -0,0 +1,218 @@ +import type { CredoBaseRecord, RecordId, ThreadId } from '../../types' +import type { + AnonCredsProofFormat, + AnonCredsNonRevokedInterval, + AnonCredsPredicateType, + AnonCredsSelectedCredentials, + AnonCredsProposeProofFormat, + AnonCredsRequestProofFormat, + AnonCredsProofRequestRestriction, +} from '@credo-ts/anoncreds' +import type { + ProofExchangeRecord as CredoProofExchangeRecord, + AutoAcceptProof, + ProofState, + ProofRole, + CreateProofRequestOptions, + AcceptProofRequestOptions, + ProposeProofOptions, + AcceptProofProposalOptions, +} from '@credo-ts/core' +import type { PlaintextMessage } from '@credo-ts/core/build/types' + +import { maybeMapValues } from '../../../utils/helpers' + +type ProofProtocolVersion = 'v1' | 'v2' + +export interface DidCommProofsExchangeRecord extends CredoBaseRecord { + connectionId?: RecordId + threadId: ThreadId + parentThreadId?: ThreadId + state: ProofState + role: ProofRole + autoAcceptProof?: AutoAcceptProof + errorMessage?: string + protocolVersion: string +} + +export function proofExchangeRecordToApiModel(record: CredoProofExchangeRecord): DidCommProofsExchangeRecord { + return { + // Base Record + id: record.id, + createdAt: record.createdAt, + updatedAt: record.updatedAt, + type: record.type, + + // Proof + connectionId: record.connectionId, + threadId: record.threadId, + parentThreadId: record.parentThreadId, + state: record.state, + role: record.role, + autoAcceptProof: record.autoAcceptProof, + errorMessage: record.errorMessage, + protocolVersion: record.protocolVersion, + } +} + +interface AcceptAnonCredsProposalOptions extends NonNullable {} + +export interface DidCommProofsProposeProofOptions + extends Omit { + protocolVersion: ProofProtocolVersion + proofFormats: { + indy?: AnonCredsProposeProofFormat + anoncreds?: AnonCredsProposeProofFormat + } +} + +export interface DidCommProofsAcceptProposalOptions + extends Omit { + protocolVersion: ProofProtocolVersion + proofFormats?: { + indy?: AcceptAnonCredsProposalOptions + anoncreds?: AcceptAnonCredsProposalOptions + } +} + +export interface DidCommProofsCreateRequestResponse { + message: PlaintextMessage + proofExchange: DidCommProofsExchangeRecord +} + +export interface DidCommProofsAcceptRequestOptions + extends Omit { + proofFormats?: { + indy?: AnonCredsSelectedCredentials + anoncreds?: AnonCredsSelectedCredentials + } +} + +export interface DidCommProofsCreateRequestOptions + extends Omit { + protocolVersion: ProofProtocolVersion + proofFormats: { + indy?: AnonCredsRequestProofFormatOptions + anoncreds?: AnonCredsRequestProofFormatOptions + } +} + +export interface DidCommProofsSendRequestOptions extends DidCommProofsCreateRequestOptions { + connectionId: RecordId +} + +// Below method help with transforming API request models to Credo/AnonCreds models +function transformApiAttributeMarkersToCredo(attributes?: { [key: string]: boolean }) { + if (!attributes) { + return undefined + } + + return Object.entries(attributes).reduce<{ [key in `attr::${string}::marker`]: '1' | '0' }>( + (acc, [attr, val]) => ({ + [`attr::${attr}::marker`]: val ? '1' : '0', + ...acc, + }), + {}, + ) +} + +function transformApiAttributeValuesToCredo(attributeValues?: { [key in string]: string }) { + if (!attributeValues) { + return undefined + } + + return Object.entries(attributeValues).reduce<{ [key in `attr::${string}::value`]: string }>( + (acc, [attr, val]) => ({ + [`attr::${attr}::value`]: val, + ...acc, + }), + {}, + ) +} + +function transformApiRestrictionToCredo({ + attributeValues, + attributeMarkers, + ...others +}: AnonCredsProofRequestRestrictionOptions): AnonCredsProofRequestRestriction { + return { + ...transformApiAttributeMarkersToCredo(attributeMarkers), + ...transformApiAttributeValuesToCredo(attributeValues), + ...others, + } +} + +export function transformApiProofFormatToCredo( + proofFormat?: AnonCredsRequestProofFormatOptions, +): AnonCredsRequestProofFormat | undefined { + if (!proofFormat) { + return undefined + } + + const { requested_attributes, requested_predicates, ...rest } = proofFormat + + return { + ...rest, + requested_attributes: maybeMapValues( + ({ restrictions, ...other }) => ({ + restrictions: restrictions?.map(transformApiRestrictionToCredo), + ...other, + }), + requested_attributes, + ), + requested_predicates: maybeMapValues( + ({ restrictions, ...other }) => ({ + restrictions: restrictions?.map(transformApiRestrictionToCredo), + ...other, + }), + requested_predicates, + ), + } +} + +// Below types are needed because tsoa doesn't support +// attr::{string}::marker syntax in the request body +export interface AnonCredsProofRequestRestrictionOptions { + schema_id?: string + schema_issuer_id?: string + schema_name?: string + schema_version?: string + issuer_id?: string + cred_def_id?: string + rev_reg_id?: string + schema_issuer_did?: string + issuer_did?: string + attributeValues?: { + [key: string]: string + } + attributeMarkers?: { + [key: string]: boolean + } +} + +export interface AnonCredsRequestedAttributeOptions { + name?: string + names?: string[] + restrictions?: AnonCredsProofRequestRestrictionOptions[] + non_revoked?: AnonCredsNonRevokedInterval +} + +export interface AnonCredsRequestedPredicateOptions { + name: string + p_type: AnonCredsPredicateType + p_value: number + restrictions?: AnonCredsProofRequestRestrictionOptions[] + non_revoked?: AnonCredsNonRevokedInterval +} + +export interface AnonCredsRequestProofFormatOptions { + name: string + version: string + non_revoked?: AnonCredsNonRevokedInterval + requested_attributes?: { + [key: string]: AnonCredsRequestedAttributeOptions + } + requested_predicates?: { + [key: string]: AnonCredsRequestedPredicateOptions + } +} diff --git a/packages/rest/src/controllers/didcomm/proofs/__tests__/ProofsController.test.ts b/packages/rest/src/controllers/didcomm/proofs/__tests__/ProofsController.test.ts new file mode 100644 index 00000000..0f1f7700 --- /dev/null +++ b/packages/rest/src/controllers/didcomm/proofs/__tests__/ProofsController.test.ts @@ -0,0 +1,197 @@ +import type { RestRootAgent } from '../../../../utils/agent' +import type { CredentialStateChangedEvent, ProofStateChangedEvent } from '@credo-ts/core' + +import { + AutoAcceptCredential, + CredentialEventTypes, + CredentialRole, + CredentialState, + ProofEventTypes, + ProofRole, + ProofState, +} from '@credo-ts/core' +import { type Express } from 'express' +import { filter, first, firstValueFrom, timeout } from 'rxjs' +import request from 'supertest' + +import { getTestAgent } from '../../../../../tests/utils/helpers' +import { setupServer } from '../../../../server' +import { testAnonCredsSchema } from '../../../anoncreds/__tests__/fixtures' + +describe('ProofsController', () => { + let app: Express + let agent: RestRootAgent + let inviterConnectionId: string + let receiverConnectionId: string + + let credentialDefinitionId: string + + beforeAll(async () => { + agent = await getTestAgent('DIDComm Proofs REST Agent Test') + app = await setupServer(agent, { port: 3000 }) + + const inviterOutOfBandRecord = await agent.oob.createInvitation() + let { connectionRecord: receiverConnection } = await agent.oob.receiveInvitation( + inviterOutOfBandRecord.outOfBandInvitation, + ) + + receiverConnection = await agent.connections.returnWhenIsConnected(receiverConnection!.id) + const [inviterConnection] = await agent.connections.findAllByOutOfBandId(inviterOutOfBandRecord.id) + + inviterConnectionId = inviterConnection.id + receiverConnectionId = receiverConnection.id + + const registerDefinitionResult = await agent.modules.anoncreds.registerCredentialDefinition({ + credentialDefinition: { + issuerId: testAnonCredsSchema.schema.issuerId, + schemaId: testAnonCredsSchema.schemaId, + tag: 'test', + }, + options: { + supportRevocation: false, + }, + }) + + if (registerDefinitionResult.credentialDefinitionState.state !== 'finished') { + throw new Error('Credential definition registration failed') + } + + credentialDefinitionId = registerDefinitionResult.credentialDefinitionState.credentialDefinitionId + + const offerReceived = firstValueFrom( + agent.events.observable(CredentialEventTypes.CredentialStateChanged).pipe( + filter( + (event) => + event.payload.credentialRecord.role === CredentialRole.Holder && + event.payload.credentialRecord.connectionId === receiverConnectionId && + event.payload.credentialRecord.state === CredentialState.OfferReceived, + ), + first(), + timeout(10000), + ), + ) + + const offered = await agent.credentials.offerCredential({ + protocolVersion: 'v2', + autoAcceptCredential: AutoAcceptCredential.ContentApproved, + connectionId: inviterConnectionId, + credentialFormats: { + anoncreds: { + credentialDefinitionId, + attributes: [ + { + name: 'prop1', + value: 'Alice', + }, + { + name: 'prop2', + value: 'Bob', + }, + ], + }, + }, + }) + + await offerReceived + + const [received] = await agent.credentials.findAllByQuery({ + state: CredentialState.OfferReceived, + threadId: offered.threadId, + }) + + const credentialIssued = firstValueFrom( + agent.events.observable(CredentialEventTypes.CredentialStateChanged).pipe( + filter( + (event) => + event.payload.credentialRecord.role === CredentialRole.Issuer && + event.payload.credentialRecord.connectionId === inviterConnectionId && + event.payload.credentialRecord.state === CredentialState.Done, + ), + first(), + timeout(10000), + ), + ) + + await agent.credentials.acceptOffer({ + credentialRecordId: received.id, + }) + + await credentialIssued + }) + + afterAll(async () => { + await agent.shutdown() + await agent.wallet.delete() + }) + + test('Request proof', async () => { + const requestReceived = firstValueFrom( + agent.events.observable(ProofEventTypes.ProofStateChanged).pipe( + filter( + (event) => + event.payload.proofRecord.role === ProofRole.Prover && + event.payload.proofRecord.connectionId === receiverConnectionId && + event.payload.proofRecord.state === ProofState.RequestReceived, + ), + first(), + timeout(10000), + ), + ) + + const response = await request(app) + .post(`/didcomm/proofs/request-proof`) + .send({ + connectionId: inviterConnectionId, + protocolVersion: 'v2', + proofFormats: { + anoncreds: { + name: 'proof', + version: '1.0', + requested_attributes: { + prop1: { + name: 'prop1', + restrictions: [ + { + cred_def_id: credentialDefinitionId, + }, + ], + }, + }, + }, + }, + autoAcceptProof: 'contentApproved', + }) + + expect(response.statusCode).toBe(200) + + // Wait for request to be received + await requestReceived + + const receiverExchangeResponse = await request(app).get(`/didcomm/proofs`).query({ + state: ProofState.RequestReceived, + threadId: response.body.threadId, + }) + expect(receiverExchangeResponse.statusCode).toBe(200) + expect(receiverExchangeResponse.body).toHaveLength(1) + + const proofAcked = firstValueFrom( + agent.events.observable(ProofEventTypes.ProofStateChanged).pipe( + filter( + (event) => + event.payload.proofRecord.role === ProofRole.Prover && + event.payload.proofRecord.connectionId === receiverConnectionId && + event.payload.proofRecord.state === ProofState.Done, + ), + first(), + timeout(10000), + ), + ) + + const acceptResponse = await request(app) + .post(`/didcomm/proofs/${receiverExchangeResponse.body[0].id}/accept-request`) + .send({}) + expect(acceptResponse.statusCode).toBe(200) + + await proofAcked + }) +}) diff --git a/packages/rest/src/controllers/examples.ts b/packages/rest/src/controllers/examples.ts deleted file mode 100644 index 56b09885..00000000 --- a/packages/rest/src/controllers/examples.ts +++ /dev/null @@ -1,242 +0,0 @@ -import type { - AutoAcceptProof, - BasicMessageRole, - CredentialState, - DidExchangeRole, - DidExchangeState, - OutOfBandInvitationOptions, - OutOfBandRecordProps, - ProofRecordProps, - ProofState, - OutOfBandRole, - OutOfBandState, -} from '@aries-framework/core' - -/** - * @example "821f9b26-ad04-4f56-89b6-e2ef9c72b36e" - */ -export type RecordId = string - -/** - * @example "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL" - */ -export type Did = string - -/** - * @example "1.0.0" - */ -export type Version = string - -/** - * @example "WgWxqztrNooG92RXvxSTWv:3:CL:20:tag" - */ -export type CredentialDefinitionId = string - -/** - * @example "WgWxqztrNooG92RXvxSTWv:2:schema_name:1.0" - */ -export type SchemaId = string - -export const BasicMessageRecordExample = { - _tags: { - role: 'sender', - connectionId: '2aecf74c-3073-4f98-9acb-92415d096834', - }, - metadata: {}, - id: '74bcf865-1fdc-45b4-b517-9def02dfd25f', - createdAt: new Date('2022-08-18T08:38:40.216Z'), - content: 'string', - sentTime: '2022-08-18T08:38:40.216Z', - connectionId: '2aecf74c-3073-4f98-9acb-92415d096834', - role: 'sender' as BasicMessageRole, -} - -export const ConnectionRecordExample = { - _tags: { - invitationDid: - 'did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119', - did: 'did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv', - state: 'invitation-sent' as DidExchangeState, - invitationKey: '9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz', - outOfBandId: 'edbc89fe-785f-4774-a288-46012486881d', - verkey: '9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz', - role: 'responder' as DidExchangeRole, - }, - metadata: {}, - id: '821f9b26-ad04-4f56-89b6-e2ef9c72b36e', - createdAt: new Date('2022-01-01T00:00:00.000Z'), - did: 'did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv', - state: 'invitation-sent' as DidExchangeState, - role: 'responder' as DidExchangeRole, - invitationDid: - 'did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119', - outOfBandId: 'edbc89fe-785f-4774-a288-46012486881d', -} - -export const DidRecordExample = { - didDocument: { - '@context': [ - 'https://w3id.org/did/v1', - 'https://w3id.org/security/suites/ed25519-2018/v1', - 'https://w3id.org/security/suites/x25519-2019/v1', - ], - id: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', - alsoKnownAs: undefined, - controller: undefined, - verificationMethod: [ - { - id: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', - type: 'Ed25519VerificationKey2018', - controller: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', - publicKeyBase58: '6fioC1zcDPyPEL19pXRS2E4iJ46zH7xP6uSgAaPdwDrx', - }, - ], - authentication: [ - 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', - ], - assertionMethod: [ - 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', - ], - capabilityInvocation: [ - 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', - ], - capabilityDelegation: [ - 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', - ], - keyAgreement: [ - { - id: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6LSrdqo4M24WRDJj1h2hXxgtDTyzjjKCiyapYVgrhwZAySn', - type: 'X25519KeyAgreementKey2019', - controller: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', - publicKeyBase58: 'FxfdY3DCQxVZddKGAtSjZdFW9bCCW7oRwZn1NFJ2Tbg2', - }, - ], - service: undefined, - }, - didDocumentMetadata: {}, - didResolutionMetadata: { - contentType: 'application/did+ld+json', - }, -} - -type OutOfBandRecordProperties = Omit -export type OutOfBandInvitationProps = Omit< - OutOfBandInvitationOptions, - 'handshakeProtocols' | 'services' | 'appendedAttachments' -> - -export interface OutOfBandRecordWithInvitationProps extends OutOfBandRecordProperties { - outOfBandInvitation: OutOfBandInvitationProps -} - -export const outOfBandInvitationExample = { - '@type': 'did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation', - '@id': 'd6472943-e5d0-4d95-8b48-790ed5a41931', - label: 'Aries Test Agent', - accept: ['didcomm/aip1', 'didcomm/aip2;env=rfc19'], - handshake_protocols: ['https://didcomm.org/didexchange/1.0', 'https://didcomm.org/connections/1.0'], - services: [ - { - id: '#inline-0', - serviceEndpoint: 'https://6b77-89-20-162-146.ngrok.io', - type: 'did-communication', - recipientKeys: ['did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM'], - routingKeys: [], - }, - ], -} - -export const outOfBandRecordExample = { - _tags: { - invitationId: '1cbd22e4-1906-41e9-8807-83d84437f978', - state: 'await-response', - role: 'sender', - recipientKeyFingerprints: ['z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj'], - }, - outOfBandInvitation: outOfBandInvitationExample, - metadata: {}, - id: '42a95528-0e30-4f86-a462-0efb02178b53', - createdAt: new Date('2022-01-01T00:00:00.000Z'), - role: 'sender' as OutOfBandRole, - state: 'await-response' as OutOfBandState, - reusable: false, -} - -export const CredentialExchangeRecordExample = { - _tags: { - state: 'offer-sent', - threadId: '82701488-b43c-4d7b-9244-4bb204a7ae26', - connectionId: 'ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b', - }, - metadata: { - '_internal/indyCredential': { - credentialDefinitionId: 'q7ATwTYbQDgiigVijUAej:3:CL:318187:latest', - schemaId: 'q7ATwTYbQDgiigVijUAej:2:Employee Badge:1.0', - }, - }, - credentials: [], - id: '821f9b26-ad04-4f56-89b6-e2ef9c72b36e', - createdAt: new Date('2022-01-01T00:00:00.000Z'), - state: 'offer-sent' as CredentialState, - connectionId: 'ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b', - threadId: '82701488-b43c-4d7b-9244-4bb204a7ae26', - credentialAttributes: [], - protocolVersion: 'v1', -} - -export const ProofRecordExample = { - _tags: { - state: 'proposal-sent' as ProofState, - threadId: '0019d466-5eea-4269-8c40-031b4896c5b7', - connectionId: '2aecf74c-3073-4f98-9acb-92415d096834', - } as ProofRecordProps, - metadata: {}, - id: '821f9b26-ad04-4f56-89b6-e2ef9c72b36e', - createdAt: new Date('2022-01-01T00:00:00.000Z'), - state: 'proposal-sent' as ProofState, - connectionId: '2aecf74c-3073-4f98-9acb-92415d096834', - threadId: '0019d466-5eea-4269-8c40-031b4896c5b7', - autoAcceptProof: 'always' as AutoAcceptProof, -} - -export const SchemaExample = { - ver: '1.0', - id: 'WgWxqztrNooG92RXvxSTWv:2:schema_name:1.0', - name: 'schema', - version: '1.0', - attrNames: ['string'], - seqNo: 351936, -} - -export const CredentialDefinitionExample = { - ver: '1.0', - id: 'WgWxqztrNooG92RXvxSTWv:3:CL:20:tag', - schemaId: '351936', - type: 'CL', - tag: 'definition', - value: { - primary: { - n: 'string', - s: 'string', - r: { - master_secret: 'string', - string: 'string', - }, - rctxt: 'string', - z: 'string', - }, - revocation: { - g: '1 string', - g_dash: 'string', - h: 'string', - h0: 'string', - h1: 'string', - h2: 'string', - htilde: 'string', - h_cap: 'string', - u: 'string', - pk: 'string', - y: 'string', - }, - }, -} diff --git a/packages/rest/src/controllers/outofband/OutOfBandController.ts b/packages/rest/src/controllers/outofband/OutOfBandController.ts deleted file mode 100644 index 6ed0889d..00000000 --- a/packages/rest/src/controllers/outofband/OutOfBandController.ts +++ /dev/null @@ -1,289 +0,0 @@ -import type { OutOfBandInvitationProps, OutOfBandRecordWithInvitationProps } from '../examples' -import type { AgentMessageType } from '../types' -import type { - ConnectionRecordProps, - CreateOutOfBandInvitationConfig, - CreateLegacyInvitationConfig, -} from '@aries-framework/core' - -import { AgentMessage, JsonTransformer, OutOfBandInvitation, Agent, RecordNotFoundError } from '@aries-framework/core' -import { Body, Controller, Delete, Example, Get, Path, Post, Query, Res, Route, Tags, TsoaResponse } from 'tsoa' -import { injectable } from 'tsyringe' - -import { ConnectionRecordExample, outOfBandInvitationExample, outOfBandRecordExample, RecordId } from '../examples' -import { AcceptInvitationConfig, ReceiveInvitationByUrlProps, ReceiveInvitationProps } from '../types' - -@Tags('Out Of Band') -@Route('/oob') -@injectable() -export class OutOfBandController extends Controller { - private agent: Agent - - public constructor(agent: Agent) { - super() - this.agent = agent - } - - /** - * Retrieve all out of band records - * @param invitationId invitation identifier - * @returns OutOfBandRecord[] - */ - @Example([outOfBandRecordExample]) - @Get() - public async getAllOutOfBandRecords(@Query('invitationId') invitationId?: RecordId) { - let outOfBandRecords = await this.agent.oob.getAll() - - if (invitationId) outOfBandRecords = outOfBandRecords.filter((o) => o.outOfBandInvitation.id === invitationId) - - return outOfBandRecords.map((c) => c.toJSON()) - } - - /** - * Retrieve an out of band record by id - * @param recordId record identifier - * @returns OutOfBandRecord - */ - @Example(outOfBandRecordExample) - @Get('/:outOfBandId') - public async getOutOfBandRecordById( - @Path('outOfBandId') outOfBandId: RecordId, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - ) { - const outOfBandRecord = await this.agent.oob.findById(outOfBandId) - - if (!outOfBandRecord) - return notFoundError(404, { reason: `Out of band record with id "${outOfBandId}" not found.` }) - - return outOfBandRecord.toJSON() - } - - /** - * Creates an outbound out-of-band record containing out-of-band invitation message defined in - * Aries RFC 0434: Out-of-Band Protocol 1.1. - * @param config configuration of how out-of-band invitation should be created - * @returns Out of band record - */ - @Example<{ - invitationUrl: string - invitation: OutOfBandInvitationProps - outOfBandRecord: OutOfBandRecordWithInvitationProps - }>({ - invitationUrl: 'string', - invitation: outOfBandInvitationExample, - outOfBandRecord: outOfBandRecordExample, - }) - @Post('/create-invitation') - public async createInvitation( - @Res() internalServerError: TsoaResponse<500, { message: string }>, - @Body() config?: Omit, // props removed because of issues with serialization - ) { - try { - const outOfBandRecord = await this.agent.oob.createInvitation(config) - return { - invitationUrl: outOfBandRecord.outOfBandInvitation.toUrl({ - domain: this.agent.config.endpoints[0], - }), - invitation: outOfBandRecord.outOfBandInvitation.toJSON({ - useLegacyDidSovPrefix: this.agent.config.useLegacyDidSovPrefix, - }), - outOfBandRecord: outOfBandRecord.toJSON(), - } - } catch (error) { - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Creates an outbound out-of-band record in the same way how `createInvitation` method does it, - * but it also converts out-of-band invitation message to an "legacy" invitation message defined - * in RFC 0160: Connection Protocol and returns it together with out-of-band record. - * - * @param config configuration of how a invitation should be created - * @returns out-of-band record and invitation - */ - @Example<{ invitation: OutOfBandInvitationProps; outOfBandRecord: OutOfBandRecordWithInvitationProps }>({ - invitation: outOfBandInvitationExample, - outOfBandRecord: outOfBandRecordExample, - }) - @Post('/create-legacy-invitation') - public async createLegacyInvitation( - @Res() internalServerError: TsoaResponse<500, { message: string }>, - @Body() config?: Omit, // routing prop removed because of issues with public key serialization - ) { - try { - const { outOfBandRecord, invitation } = await this.agent.oob.createLegacyInvitation(config) - - return { - invitationUrl: invitation.toUrl({ - domain: this.agent.config.endpoints[0], - useLegacyDidSovPrefix: this.agent.config.useLegacyDidSovPrefix, - }), - invitation: invitation.toJSON({ - useLegacyDidSovPrefix: this.agent.config.useLegacyDidSovPrefix, - }), - outOfBandRecord: outOfBandRecord.toJSON(), - } - } catch (error) { - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Creates a new connectionless legacy invitation. - * - * @param config configuration of how a connection invitation should be created - * @returns a message and a invitationUrl - */ - @Example<{ message: AgentMessageType; invitationUrl: string }>({ - message: { - '@id': 'eac4ff4e-b4fb-4c1d-aef3-b29c89d1cc00', - '@type': 'https://didcomm.org/connections/1.0/invitation', - }, - invitationUrl: 'http://example.com/invitation_url', - }) - @Post('/create-legacy-connectionless-invitation') - public async createLegacyConnectionlessInvitation( - @Body() - config: { - recordId: string - message: AgentMessageType - domain: string - }, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - const agentMessage = JsonTransformer.fromJSON(config.message, AgentMessage) - - return await this.agent.oob.createLegacyConnectionlessInvitation({ - ...config, - message: agentMessage, - }) - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { reason: `connection with connection id "${config.recordId}" not found.` }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Creates inbound out-of-band record and assigns out-of-band invitation message to it if the - * message is valid. - * - * @param invitation either OutOfBandInvitation or ConnectionInvitationMessage - * @param config config for handling of invitation - * @returns out-of-band record and connection record if one has been created. - */ - @Example<{ outOfBandRecord: OutOfBandRecordWithInvitationProps; connectionRecord: ConnectionRecordProps }>({ - outOfBandRecord: outOfBandRecordExample, - connectionRecord: ConnectionRecordExample, - }) - @Post('/receive-invitation') - public async receiveInvitation( - @Body() invitationRequest: ReceiveInvitationProps, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - const { invitation, ...config } = invitationRequest - - try { - const invite = new OutOfBandInvitation({ ...invitation, handshakeProtocols: invitation.handshake_protocols }) - const { outOfBandRecord, connectionRecord } = await this.agent.oob.receiveInvitation(invite, config) - - return { - outOfBandRecord: outOfBandRecord.toJSON(), - connectionRecord: connectionRecord?.toJSON(), - } - } catch (error) { - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Creates inbound out-of-band record and assigns out-of-band invitation message to it if the - * message is valid. - * - * @param invitationUrl invitation url - * @param config config for handling of invitation - * @returns out-of-band record and connection record if one has been created. - */ - @Example<{ outOfBandRecord: OutOfBandRecordWithInvitationProps; connectionRecord: ConnectionRecordProps }>({ - outOfBandRecord: outOfBandRecordExample, - connectionRecord: ConnectionRecordExample, - }) - @Post('/receive-invitation-url') - public async receiveInvitationFromUrl( - @Body() invitationRequest: ReceiveInvitationByUrlProps, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - const { invitationUrl, ...config } = invitationRequest - - try { - const { outOfBandRecord, connectionRecord } = await this.agent.oob.receiveInvitationFromUrl(invitationUrl, config) - return { - outOfBandRecord: outOfBandRecord.toJSON(), - connectionRecord: connectionRecord?.toJSON(), - } - } catch (error) { - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Accept a connection invitation as invitee (by sending a connection request message) for the connection with the specified connection id. - * This is not needed when auto accepting of connections is enabled. - */ - @Example<{ outOfBandRecord: OutOfBandRecordWithInvitationProps; connectionRecord: ConnectionRecordProps }>({ - outOfBandRecord: outOfBandRecordExample, - connectionRecord: ConnectionRecordExample, - }) - @Post('/:outOfBandId/accept-invitation') - public async acceptInvitation( - @Path('outOfBandId') outOfBandId: RecordId, - @Body() acceptInvitationConfig: AcceptInvitationConfig, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - const { outOfBandRecord, connectionRecord } = await this.agent.oob.acceptInvitation( - outOfBandId, - acceptInvitationConfig, - ) - - return { - outOfBandRecord: outOfBandRecord.toJSON(), - connectionRecord: connectionRecord?.toJSON(), - } - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { - reason: `mediator with mediatorId ${acceptInvitationConfig?.mediatorId} not found`, - }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Deletes an out of band record from the repository. - * - * @param outOfBandId Record identifier - */ - @Delete('/:outOfBandId') - public async deleteOutOfBandRecord( - @Path('outOfBandId') outOfBandId: RecordId, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - this.setStatus(204) - await this.agent.oob.deleteById(outOfBandId) - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { reason: `Out of band record with id "${outOfBandId}" not found.` }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } -} diff --git a/packages/rest/src/controllers/proofs/ProofController.ts b/packages/rest/src/controllers/proofs/ProofController.ts deleted file mode 100644 index 908061c4..00000000 --- a/packages/rest/src/controllers/proofs/ProofController.ts +++ /dev/null @@ -1,280 +0,0 @@ -import type { ProofRecordProps } from '@aries-framework/core' - -import { Agent, JsonTransformer, PresentationPreview, RecordNotFoundError } from '@aries-framework/core' -import { JsonEncoder } from '@aries-framework/core/build/utils/JsonEncoder' -import { Body, Controller, Delete, Example, Get, Path, Post, Query, Res, Route, Tags, TsoaResponse } from 'tsoa' -import { injectable } from 'tsyringe' - -import { ProofRecordExample, RecordId } from '../examples' -import { RequestProofOptions, RequestProofProposalOptions } from '../types' - -@Tags('Proofs') -@Route('/proofs') -@injectable() -export class ProofController extends Controller { - private agent: Agent - - public constructor(agent: Agent) { - super() - this.agent = agent - } - - /** - * Retrieve all proof records - * - * @param threadId - * @returns ProofRecord[] - */ - @Example([ProofRecordExample]) - @Get('/') - public async getAllProofs(@Query('threadId') threadId?: string) { - let proofs = await this.agent.proofs.getAll() - - if (threadId) proofs = proofs.filter((p) => p.threadId === threadId) - - return proofs.map((proof) => proof.toJSON()) - } - - /** - * Retrieve proof record by proof record id - * - * @param proofRecordId - * @returns ProofRecord - */ - @Get('/:proofRecordId') - @Example(ProofRecordExample) - public async getProofById( - @Path('proofRecordId') proofRecordId: RecordId, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - const proof = await this.agent.proofs.getById(proofRecordId) - - return proof.toJSON() - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { - reason: `proof with proofRecordId "${proofRecordId}" not found.`, - }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Deletes a proof record in the proof repository. - * - * @param proofRecordId - */ - @Delete('/:proofRecordId') - public async deleteProof( - @Path('proofRecordId') proofRecordId: RecordId, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - this.setStatus(204) - await this.agent.proofs.deleteById(proofRecordId) - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { - reason: `proof with proofRecordId "${proofRecordId}" not found.`, - }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Initiate a new presentation exchange as prover by sending a presentation proposal request - * to the connection with the specified connection id. - * - * @param proposal - * @returns ProofRecord - */ - @Post('/propose-proof') - @Example(ProofRecordExample) - public async proposeProof( - @Body() proposal: RequestProofProposalOptions, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - const { attributes, predicates, connectionId, ...proposalOptions } = proposal - - try { - const presentationPreview = JsonTransformer.fromJSON({ attributes, predicates }, PresentationPreview) - - const proof = await this.agent.proofs.proposeProof(connectionId, presentationPreview, proposalOptions) - - return proof.toJSON() - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { - reason: `connection with connectionId "${connectionId}" not found.`, - }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Accept a presentation proposal as verifier by sending an accept proposal message - * to the connection associated with the proof record. - * - * @param proofRecordId - * @param proposal - * @returns ProofRecord - */ - @Post('/:proofRecordId/accept-proposal') - @Example(ProofRecordExample) - public async acceptProposal( - @Path('proofRecordId') proofRecordId: string, - @Body() - proposal: { - request: { name?: string; version?: string; nonce?: string } - comment?: string - }, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - const proof = await this.agent.proofs.acceptProposal(proofRecordId, proposal) - - return proof.toJSON() - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { - reason: `proof with proofRecordId "${proofRecordId}" not found.`, - }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Creates a presentation request not bound to any proposal or existing connection - * - * @param request - * @returns ProofRequestMessageResponse - */ - @Post('/request-outofband-proof') - @Example<{ proofUrl: string; proofRecord: ProofRecordProps }>({ - proofUrl: 'https://example.com/proof-url', - proofRecord: ProofRecordExample, - }) - public async requestProofOutOfBand(@Body() request: Omit) { - const { proofRequestOptions, ...requestOptions } = request - const proof = await this.agent.proofs.createOutOfBandRequest(proofRequestOptions, requestOptions) - - return { - proofUrl: `${this.agent.config.endpoints[0]}/?d_m=${JsonEncoder.toBase64URL( - proof.requestMessage.toJSON({ useLegacyDidSovPrefix: this.agent.config.useLegacyDidSovPrefix }), - )}`, - proofRecord: proof.proofRecord, - } - } - - /** - * Creates a presentation request bound to existing connection - * - * @param request - * @returns ProofRecord - */ - @Post('/request-proof') - @Example(ProofRecordExample) - public async requestProof( - @Body() request: RequestProofOptions, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - const { connectionId, proofRequestOptions, ...config } = request - - try { - const proof = await this.agent.proofs.requestProof(connectionId, proofRequestOptions, config) - - return proof.toJSON() - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { - reason: `connection with connectionId "${connectionId}" not found.`, - }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Accept a presentation request as prover by sending an accept request message - * to the connection associated with the proof record. - * - * @param proofRecordId - * @param request - * @returns ProofRecord - */ - @Post('/:proofRecordId/accept-request') - @Example(ProofRecordExample) - public async acceptRequest( - @Path('proofRecordId') proofRecordId: string, - @Body() - request: { - filterByPresentationPreview?: boolean - filterByNonRevocationRequirements?: boolean - comment?: string - }, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - const { filterByPresentationPreview, filterByNonRevocationRequirements, comment } = request - - const retrievedCredentials = await this.agent.proofs.getRequestedCredentialsForProofRequest(proofRecordId, { - filterByPresentationPreview: filterByPresentationPreview, - filterByNonRevocationRequirements: filterByNonRevocationRequirements, - }) - - const requestedCredentials = this.agent.proofs.autoSelectCredentialsForProofRequest(retrievedCredentials) - - const proof = await this.agent.proofs.acceptRequest(proofRecordId, requestedCredentials, { - comment, - }) - - return proof.toJSON() - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { - reason: `proof with proofRecordId "${proofRecordId}" not found.`, - }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } - - /** - * Accept a presentation as prover by sending an accept presentation message - * to the connection associated with the proof record. - * - * @param proofRecordId - * @returns ProofRecord - */ - @Post('/:proofRecordId/accept-presentation') - @Example(ProofRecordExample) - public async acceptPresentation( - @Path('proofRecordId') proofRecordId: string, - @Res() notFoundError: TsoaResponse<404, { reason: string }>, - @Res() internalServerError: TsoaResponse<500, { message: string }>, - ) { - try { - const proof = await this.agent.proofs.acceptPresentation(proofRecordId) - - return proof.toJSON() - } catch (error) { - if (error instanceof RecordNotFoundError) { - return notFoundError(404, { - reason: `proof with proofRecordId "${proofRecordId}" not found.`, - }) - } - return internalServerError(500, { message: `something went wrong: ${error}` }) - } - } -} diff --git a/packages/rest/src/controllers/tenants/TenantsController.ts b/packages/rest/src/controllers/tenants/TenantsController.ts new file mode 100644 index 00000000..508861c5 --- /dev/null +++ b/packages/rest/src/controllers/tenants/TenantsController.ts @@ -0,0 +1,30 @@ +import type { TenantsRecord } from './TenantsControllerTypes' + +import { CreateTenantOptions } from '@credo-ts/tenants' +import { Body, Controller, Post, Request, Route, Security, Tags } from 'tsoa' +import { injectable } from 'tsyringe' + +import { RequestWithRootTenantAgent } from '../../authentication' + +import { tenantRecordToApiModel } from './TenantsControllerTypes' + +@Tags('Tenants') +@Route('/tenants') +@Security('tenants', ['admin']) +@injectable() +export class TenantsController extends Controller { + /** + * create new tenant + */ + @Post('/') + public async createTenant( + @Request() request: RequestWithRootTenantAgent, + @Body() body: CreateTenantOptions, + ): Promise { + const tenant = await request.user.agent.modules.tenants.createTenant({ + config: body.config, + }) + + return tenantRecordToApiModel(tenant) + } +} diff --git a/packages/rest/src/controllers/tenants/TenantsControllerTypes.ts b/packages/rest/src/controllers/tenants/TenantsControllerTypes.ts new file mode 100644 index 00000000..725e9988 --- /dev/null +++ b/packages/rest/src/controllers/tenants/TenantsControllerTypes.ts @@ -0,0 +1,26 @@ +import type { CredoBaseRecord } from '../types' +import type { TenantRecord as CredoTenantRecord } from '@credo-ts/tenants' +import type { TenantConfig } from '@credo-ts/tenants/build/models/TenantConfig' + +type TenantApiConfig = Omit + +export interface TenantsRecord extends CredoBaseRecord { + storageVersion: string + config: TenantApiConfig +} + +export function tenantRecordToApiModel(record: CredoTenantRecord): TenantsRecord { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { walletConfig: _, ...config } = record.config + + return { + // Base Record + id: record.id, + createdAt: record.createdAt, + updatedAt: record.updatedAt, + type: record.type, + + storageVersion: record.storageVersion, + config, + } +} diff --git a/packages/rest/src/controllers/tenants/__tests__/TenantsController.test.ts b/packages/rest/src/controllers/tenants/__tests__/TenantsController.test.ts new file mode 100644 index 00000000..1df31fdc --- /dev/null +++ b/packages/rest/src/controllers/tenants/__tests__/TenantsController.test.ts @@ -0,0 +1,34 @@ +import type { RestRootAgentWithTenants } from '../../../utils/agent' +import type { Express } from 'express' + +import request from 'supertest' + +import { getTestAgent } from '../../../../tests/utils/helpers' +import { setupServer } from '../../../server' + +describe('TenantsController', () => { + let app: Express + let agent: RestRootAgentWithTenants + + beforeAll(async () => { + agent = await getTestAgent('Tenants REST Agent Test', undefined, true) + app = await setupServer(agent, { port: 3000 }) + }) + + afterAll(async () => { + await agent.shutdown() + await agent.wallet.delete() + }) + + test('Create tenant', async () => { + const response = await request(app) + .post('/tenants') + .send({ + config: { + label: agent.config.label, + }, + }) + + expect(response.statusCode).toBe(200) + }) +}) diff --git a/packages/rest/src/controllers/types.ts b/packages/rest/src/controllers/types.ts index fd5105e1..91553a99 100644 --- a/packages/rest/src/controllers/types.ts +++ b/packages/rest/src/controllers/types.ts @@ -1,194 +1,24 @@ -import type { - AutoAcceptCredential, - AutoAcceptProof, - CredentialFormatPayload, - HandshakeProtocol, - IndyCredentialFormat, - PresentationPreviewAttributeOptions, - PresentationPreviewPredicateOptions, - ProofAttributeInfo, - ProofPredicateInfo, - ProofRecord, - ProofRequestConfig, - ProtocolVersionType, - ReceiveOutOfBandInvitationConfig, - V1CredentialService, - V2CredentialService, - OutOfBandDidCommService, - DidResolutionMetadata, - DidDocumentMetadata, -} from '@aries-framework/core' -import type { DIDDocument } from 'did-resolver' - -export interface AgentInfo { - label: string - endpoints: string[] - isInitialized: boolean - publicDid?: { - did: string - verkey: string - } -} - -export interface AgentMessageType { - '@id': string - '@type': string - [key: string]: unknown -} - -export interface DidResolutionResultProps { - didResolutionMetadata: DidResolutionMetadata - didDocument: DIDDocument | null - didDocumentMetadata: DidDocumentMetadata -} - -export interface ProofRequestMessageResponse { - message: string - proofRecord: ProofRecord -} - -type CredentialFormats = [IndyCredentialFormat] -type CredentialServices = [V1CredentialService, V2CredentialService] - -export interface ProposeCredentialOptions { - protocolVersion: ProtocolVersionType - credentialFormats: { - indy: { - schemaIssuerDid: string - schemaId: string - schemaName: string - schemaVersion: string - credentialDefinitionId: string - issuerDid: string - attributes: { - name: string - value: string - }[] - } - } - autoAcceptCredential?: AutoAcceptCredential - comment?: string - connectionId: string -} - -export interface AcceptCredentialProposalOptions { - credentialFormats?: { - indy: { - schemaIssuerDid: string - schemaId: string - schemaName: string - schemaVersion: string - credentialDefinitionId: string - issuerDid: string - attributes: { - name: string - value: string - }[] - } - } - autoAcceptCredential?: AutoAcceptCredential - comment?: string -} - -export interface CreateOfferOptions { - protocolVersion: ProtocolVersionType - credentialFormats: { - indy: { - credentialDefinitionId: string - attributes: { - name: string - value: string - }[] - } - } - autoAcceptCredential?: AutoAcceptCredential - comment?: string -} - -export interface OfferCredentialOptions { - protocolVersion: ProtocolVersionType - credentialFormats: { - indy: { - credentialDefinitionId: string - attributes: { - name: string - value: string - }[] - } - } - autoAcceptCredential?: AutoAcceptCredential - comment?: string - connectionId: string -} - -export interface AcceptCredentialOfferOptions { - credentialFormats?: CredentialFormatPayload - autoAcceptCredential?: AutoAcceptCredential - comment?: string -} - -export interface AcceptCredentialRequestOptions { - credentialFormats?: CredentialFormatPayload - autoAcceptCredential?: AutoAcceptCredential - comment?: string -} - -type ReceiveOutOfBandInvitationProps = Omit - -export interface ReceiveInvitationProps extends ReceiveOutOfBandInvitationProps { - invitation: Omit -} - -export interface ReceiveInvitationByUrlProps extends ReceiveOutOfBandInvitationProps { - invitationUrl: string -} - -export interface AcceptInvitationConfig { - autoAcceptConnection?: boolean - reuseConnection?: boolean - label?: string - alias?: string - imageUrl?: string - mediatorId?: string -} - -export interface OutOfBandInvitationSchema { - '@id'?: string - '@type': string - label: string - goalCode?: string - goal?: string - accept?: string[] - handshake_protocols?: HandshakeProtocol[] - services: Array - imageUrl?: string -} - -export interface ConnectionInvitationSchema { - id?: string - '@type': string - label: string - did?: string - recipientKeys?: string[] - serviceEndpoint?: string - routingKeys?: string[] - imageUrl?: string -} - -export interface RequestProofOptions extends ProofRequestConfig { - connectionId: string - proofRequestOptions: { - name: string - version: string - requestedAttributes?: { [key: string]: ProofAttributeInfo } - requestedPredicates?: { [key: string]: ProofPredicateInfo } - } -} - -export interface RequestProofProposalOptions { - connectionId: string - attributes: PresentationPreviewAttributeOptions[] - predicates: PresentationPreviewPredicateOptions[] - comment?: string - autoAcceptProof?: AutoAcceptProof +/** + * JSON object that can contain any key-value pairs + */ +export interface AnyJsonObject extends Record {} + +/** + * @example "821f9b26-ad04-4f56-89b6-e2ef9c72b36e" + */ +export type RecordId = string + +/** + * @example "ea4e5e69-fc04-465a-90d2-9f8ff78aa71d" + */ +export type ThreadId = string + +/** + * Base record model for Credo + */ +export interface CredoBaseRecord { + id: RecordId + createdAt: Date + updatedAt?: Date + type: string } diff --git a/packages/rest/src/error/ApiError.ts b/packages/rest/src/error/ApiError.ts new file mode 100644 index 00000000..fb733e1e --- /dev/null +++ b/packages/rest/src/error/ApiError.ts @@ -0,0 +1,4 @@ +export interface ApiError { + message: string + details?: unknown +} diff --git a/packages/rest/src/error/StatusException.ts b/packages/rest/src/error/StatusException.ts new file mode 100644 index 00000000..c41dced6 --- /dev/null +++ b/packages/rest/src/error/StatusException.ts @@ -0,0 +1,8 @@ +export class StatusException extends Error { + public status: number + + public constructor(message: string, status: number) { + super(message) + this.status = status + } +} diff --git a/packages/rest/src/error/index.ts b/packages/rest/src/error/index.ts new file mode 100644 index 00000000..1a8ad899 --- /dev/null +++ b/packages/rest/src/error/index.ts @@ -0,0 +1,2 @@ +export * from './ApiError' +export * from './StatusException' diff --git a/packages/rest/src/events/BasicMessageEvents.ts b/packages/rest/src/events/BasicMessageEvents.ts index 50324109..a985373d 100644 --- a/packages/rest/src/events/BasicMessageEvents.ts +++ b/packages/rest/src/events/BasicMessageEvents.ts @@ -1,30 +1,32 @@ import type { ServerConfig } from '../utils/ServerConfig' -import type { Agent, BasicMessageStateChangedEvent } from '@aries-framework/core' +import type { Agent, BasicMessageStateChangedEvent } from '@credo-ts/core' -import { BasicMessageEventTypes } from '@aries-framework/core' +import { BasicMessageEventTypes } from '@credo-ts/core' + +import { basicMessageRecordToApiModel } from '../controllers/didcomm/basic-messages/BasicMessagesControllerTypes' import { sendWebSocketEvent } from './WebSocketEvents' import { sendWebhookEvent } from './WebhookEvent' export const basicMessageEvents = async (agent: Agent, config: ServerConfig) => { agent.events.on(BasicMessageEventTypes.BasicMessageStateChanged, async (event: BasicMessageStateChangedEvent) => { - const record = event.payload.basicMessageRecord - const body = record.toJSON() + const { basicMessageRecord, ...payload } = event.payload + const webhookPayload = { + ...event, + payload: { + ...payload, + basicMessageRecord: basicMessageRecordToApiModel(basicMessageRecord), + }, + } // Only send webhook if webhook url is configured if (config.webhookUrl) { - await sendWebhookEvent(config.webhookUrl + '/basic-messages', body, agent.config.logger) + await sendWebhookEvent(config.webhookUrl, webhookPayload, agent.config.logger) } if (config.socketServer) { // Always emit websocket event to clients (could be 0) - sendWebSocketEvent(config.socketServer, { - ...event, - payload: { - message: event.payload.message.toJSON(), - basicMessageRecord: body, - }, - }) + await sendWebSocketEvent(config.socketServer, webhookPayload) } }) } diff --git a/packages/rest/src/events/ConnectionEvents.ts b/packages/rest/src/events/ConnectionEvents.ts index c0298c7a..d9d8be63 100644 --- a/packages/rest/src/events/ConnectionEvents.ts +++ b/packages/rest/src/events/ConnectionEvents.ts @@ -1,30 +1,32 @@ import type { ServerConfig } from '../utils/ServerConfig' -import type { Agent, ConnectionStateChangedEvent } from '@aries-framework/core' +import type { Agent, ConnectionStateChangedEvent } from '@credo-ts/core' -import { ConnectionEventTypes } from '@aries-framework/core' +import { ConnectionEventTypes } from '@credo-ts/core' + +import { connectionRecordToApiModel } from '../controllers/didcomm/connections/ConnectionsControllerTypes' import { sendWebSocketEvent } from './WebSocketEvents' import { sendWebhookEvent } from './WebhookEvent' export const connectionEvents = async (agent: Agent, config: ServerConfig) => { agent.events.on(ConnectionEventTypes.ConnectionStateChanged, async (event: ConnectionStateChangedEvent) => { - const record = event.payload.connectionRecord - const body = record.toJSON() + const { connectionRecord, ...payload } = event.payload + const webhookPayload = { + ...event, + payload: { + ...payload, + connectionRecord: connectionRecordToApiModel(connectionRecord), + }, + } // Only send webhook if webhook url is configured if (config.webhookUrl) { - await sendWebhookEvent(config.webhookUrl + '/connections', body, agent.config.logger) + await sendWebhookEvent(config.webhookUrl, webhookPayload, agent.config.logger) } if (config.socketServer) { // Always emit websocket event to clients (could be 0) - sendWebSocketEvent(config.socketServer, { - ...event, - payload: { - ...event.payload, - connectionRecord: body, - }, - }) + await sendWebSocketEvent(config.socketServer, webhookPayload) } }) } diff --git a/packages/rest/src/events/CredentialEvents.ts b/packages/rest/src/events/CredentialEvents.ts index b8135d4f..3fdb584c 100644 --- a/packages/rest/src/events/CredentialEvents.ts +++ b/packages/rest/src/events/CredentialEvents.ts @@ -1,30 +1,32 @@ import type { ServerConfig } from '../utils/ServerConfig' -import type { Agent, CredentialStateChangedEvent } from '@aries-framework/core' +import type { Agent, CredentialStateChangedEvent } from '@credo-ts/core' -import { CredentialEventTypes } from '@aries-framework/core' +import { CredentialEventTypes } from '@credo-ts/core' + +import { credentialExchangeRecordToApiModel } from '../controllers/didcomm/credentials/CredentialsControllerTypes' import { sendWebSocketEvent } from './WebSocketEvents' import { sendWebhookEvent } from './WebhookEvent' export const credentialEvents = async (agent: Agent, config: ServerConfig) => { agent.events.on(CredentialEventTypes.CredentialStateChanged, async (event: CredentialStateChangedEvent) => { - const record = event.payload.credentialRecord - const body = record.toJSON() + const { credentialRecord, ...payload } = event.payload + const webhookPayload = { + ...event, + payload: { + ...payload, + credentialExchange: credentialExchangeRecordToApiModel(credentialRecord), + }, + } // Only send webhook if webhook url is configured if (config.webhookUrl) { - await sendWebhookEvent(config.webhookUrl + '/credentials', body, agent.config.logger) + await sendWebhookEvent(config.webhookUrl, webhookPayload, agent.config.logger) } if (config.socketServer) { // Always emit websocket event to clients (could be 0) - sendWebSocketEvent(config.socketServer, { - ...event, - payload: { - ...event.payload, - credentialRecord: body, - }, - }) + await sendWebSocketEvent(config.socketServer, webhookPayload) } }) } diff --git a/packages/rest/src/events/ProofEvents.ts b/packages/rest/src/events/ProofEvents.ts index 8dc4e772..38a33ec0 100644 --- a/packages/rest/src/events/ProofEvents.ts +++ b/packages/rest/src/events/ProofEvents.ts @@ -1,30 +1,32 @@ import type { ServerConfig } from '../utils/ServerConfig' -import type { Agent, ProofStateChangedEvent } from '@aries-framework/core' +import type { Agent, ProofStateChangedEvent } from '@credo-ts/core' -import { ProofEventTypes } from '@aries-framework/core' +import { ProofEventTypes } from '@credo-ts/core' + +import { proofExchangeRecordToApiModel } from '../controllers/didcomm/proofs/ProofsControllerTypes' import { sendWebSocketEvent } from './WebSocketEvents' import { sendWebhookEvent } from './WebhookEvent' export const proofEvents = async (agent: Agent, config: ServerConfig) => { agent.events.on(ProofEventTypes.ProofStateChanged, async (event: ProofStateChangedEvent) => { - const record = event.payload.proofRecord - const body = record.toJSON() + const { proofRecord, ...payload } = event.payload + const webhookPayload = { + ...event, + payload: { + ...payload, + proofExchange: proofExchangeRecordToApiModel(proofRecord), + }, + } // Only send webhook if webhook url is configured if (config.webhookUrl) { - await sendWebhookEvent(config.webhookUrl + '/proofs', body, agent.config.logger) + await sendWebhookEvent(config.webhookUrl, webhookPayload, agent.config.logger) } if (config.socketServer) { // Always emit websocket event to clients (could be 0) - sendWebSocketEvent(config.socketServer, { - ...event, - payload: { - ...event.payload, - proofRecord: body, - }, - }) + await sendWebSocketEvent(config.socketServer, webhookPayload) } }) } diff --git a/packages/rest/src/events/WebhookEvent.ts b/packages/rest/src/events/WebhookEvent.ts index 22404cd7..d7b215fe 100644 --- a/packages/rest/src/events/WebhookEvent.ts +++ b/packages/rest/src/events/WebhookEvent.ts @@ -1,4 +1,4 @@ -import type { Logger } from '@aries-framework/core' +import type { Logger } from '@credo-ts/core' import fetch from 'node-fetch' diff --git a/packages/rest/src/generated/routes.ts b/packages/rest/src/generated/routes.ts new file mode 100644 index 00000000..1fe10eef --- /dev/null +++ b/packages/rest/src/generated/routes.ts @@ -0,0 +1,3252 @@ +/* tslint:disable */ +/* eslint-disable */ +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +import { TsoaRoute, fetchMiddlewares, ExpressTemplateService } from '@tsoa/runtime'; +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +import { TenantsController } from './../controllers/tenants/TenantsController'; +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +import { ProofsController } from './../controllers/didcomm/proofs/ProofsController'; +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +import { OutOfBandController } from './../controllers/didcomm/out-of-band/OutOfBandController'; +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +import { CredentialsController } from './../controllers/didcomm/credentials/CredentialsController'; +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +import { ConnectionsController } from './../controllers/didcomm/connections/ConnectionsController'; +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +import { DidCommBasicMessagesController } from './../controllers/didcomm/basic-messages/BasicMessagesController'; +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +import { DidController } from './../controllers/did/DidsController'; +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +import { AnonCredsController } from './../controllers/anoncreds/AnonCredsController'; +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +import { AgentController } from './../controllers/agent/AgentController'; +import { expressAuthentication } from './../authentication'; +// @ts-ignore - no great way to install types from subpackage +import { iocContainer } from './../utils/tsyringeTsoaIocContainer'; +import type { IocContainer, IocContainerFactory } from '@tsoa/runtime'; +import type { Request as ExRequest, Response as ExResponse, RequestHandler, Router } from 'express'; + +const expressAuthenticationRecasted = expressAuthentication as (req: ExRequest, securityName: string, scopes?: string[], res?: ExResponse) => Promise; + + +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + +const models: TsoaRoute.Models = { + "Pick_TenantConfig.Exclude_keyofTenantConfig.walletConfig__": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"label":{"dataType":"string","required":true},"connectionImageUrl":{"dataType":"string"}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Omit_TenantConfig.walletConfig_": { + "dataType": "refAlias", + "type": {"ref":"Pick_TenantConfig.Exclude_keyofTenantConfig.walletConfig__","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "TenantApiConfig": { + "dataType": "refAlias", + "type": {"ref":"Omit_TenantConfig.walletConfig_","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "RecordId": { + "dataType": "refAlias", + "type": {"dataType":"string","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "TenantsRecord": { + "dataType": "refObject", + "properties": { + "id": {"ref":"RecordId","required":true}, + "createdAt": {"dataType":"datetime","required":true}, + "updatedAt": {"dataType":"datetime"}, + "type": {"dataType":"string","required":true}, + "storageVersion": {"dataType":"string","required":true}, + "config": {"ref":"TenantApiConfig","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CreateTenantOptions": { + "dataType": "refObject", + "properties": { + "config": {"ref":"Omit_TenantConfig.walletConfig_","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "ThreadId": { + "dataType": "refAlias", + "type": {"dataType":"string","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "ProofState": { + "dataType": "refEnum", + "enums": ["proposal-sent","proposal-received","request-sent","request-received","presentation-sent","presentation-received","declined","abandoned","done"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "ProofRole": { + "dataType": "refEnum", + "enums": ["verifier","prover"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AutoAcceptProof": { + "dataType": "refEnum", + "enums": ["always","contentApproved","never"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommProofsExchangeRecord": { + "dataType": "refObject", + "properties": { + "id": {"ref":"RecordId","required":true}, + "createdAt": {"dataType":"datetime","required":true}, + "updatedAt": {"dataType":"datetime"}, + "type": {"dataType":"string","required":true}, + "connectionId": {"ref":"RecordId"}, + "threadId": {"ref":"ThreadId","required":true}, + "parentThreadId": {"ref":"ThreadId"}, + "state": {"ref":"ProofState","required":true}, + "role": {"ref":"ProofRole","required":true}, + "autoAcceptProof": {"ref":"AutoAcceptProof"}, + "errorMessage": {"dataType":"string"}, + "protocolVersion": {"dataType":"string","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "ProofProtocolVersion": { + "dataType": "refAlias", + "type": {"dataType":"union","subSchemas":[{"dataType":"enum","enums":["v1"]},{"dataType":"enum","enums":["v2"]}],"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsPresentationPreviewAttribute": { + "dataType": "refObject", + "properties": { + "name": {"dataType":"string","required":true}, + "credentialDefinitionId": {"dataType":"string"}, + "mimeType": {"dataType":"string"}, + "value": {"dataType":"string"}, + "referent": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsPredicateType": { + "dataType": "refAlias", + "type": {"dataType":"union","subSchemas":[{"dataType":"enum","enums":[">="]},{"dataType":"enum","enums":[">"]},{"dataType":"enum","enums":["<="]},{"dataType":"enum","enums":["<"]}],"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsPresentationPreviewPredicate": { + "dataType": "refObject", + "properties": { + "name": {"dataType":"string","required":true}, + "credentialDefinitionId": {"dataType":"string","required":true}, + "predicate": {"ref":"AnonCredsPredicateType","required":true}, + "threshold": {"dataType":"double","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsNonRevokedInterval": { + "dataType": "refObject", + "properties": { + "from": {"dataType":"double"}, + "to": {"dataType":"double"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsProposeProofFormat": { + "dataType": "refObject", + "properties": { + "name": {"dataType":"string"}, + "version": {"dataType":"string"}, + "attributes": {"dataType":"array","array":{"dataType":"refObject","ref":"AnonCredsPresentationPreviewAttribute"}}, + "predicates": {"dataType":"array","array":{"dataType":"refObject","ref":"AnonCredsPresentationPreviewPredicate"}}, + "nonRevokedInterval": {"ref":"AnonCredsNonRevokedInterval"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Pick_ProposeProofOptions.Exclude_keyofProposeProofOptions.proofFormats-or-protocolVersion__": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"connectionId":{"dataType":"string","required":true},"goalCode":{"dataType":"string"},"parentThreadId":{"dataType":"string"},"autoAcceptProof":{"ref":"AutoAcceptProof"},"comment":{"dataType":"string"}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommProofsProposeProofOptions": { + "dataType": "refObject", + "properties": { + "connectionId": {"dataType":"string","required":true}, + "goalCode": {"dataType":"string"}, + "parentThreadId": {"dataType":"string"}, + "autoAcceptProof": {"ref":"AutoAcceptProof"}, + "comment": {"dataType":"string"}, + "protocolVersion": {"ref":"ProofProtocolVersion","required":true}, + "proofFormats": {"dataType":"nestedObjectLiteral","nestedProperties":{"anoncreds":{"ref":"AnonCredsProposeProofFormat"},"indy":{"ref":"AnonCredsProposeProofFormat"}},"required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AcceptAnonCredsProposalOptions": { + "dataType": "refObject", + "properties": { + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Pick_AcceptProofProposalOptions.Exclude_keyofAcceptProofProposalOptions.proofFormats-or-proofRecordId__": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"goalCode":{"dataType":"string"},"autoAcceptProof":{"ref":"AutoAcceptProof"},"comment":{"dataType":"string"},"willConfirm":{"dataType":"boolean","default":true}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommProofsAcceptProposalOptions": { + "dataType": "refObject", + "properties": { + "goalCode": {"dataType":"string"}, + "autoAcceptProof": {"ref":"AutoAcceptProof"}, + "comment": {"dataType":"string"}, + "willConfirm": {"dataType":"boolean","default":true}, + "protocolVersion": {"ref":"ProofProtocolVersion","required":true}, + "proofFormats": {"dataType":"nestedObjectLiteral","nestedProperties":{"anoncreds":{"ref":"AcceptAnonCredsProposalOptions"},"indy":{"ref":"AcceptAnonCredsProposalOptions"}}}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "PlaintextMessage": { + "dataType": "refObject", + "properties": { + "@type": {"dataType":"string","required":true}, + "@id": {"dataType":"string","required":true}, + "~thread": {"dataType":"nestedObjectLiteral","nestedProperties":{"pthid":{"dataType":"string"},"thid":{"dataType":"string"}}}, + }, + "additionalProperties": {"dataType":"any"}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommProofsCreateRequestResponse": { + "dataType": "refObject", + "properties": { + "message": {"ref":"PlaintextMessage","required":true}, + "proofExchange": {"ref":"DidCommProofsExchangeRecord","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsProofRequestRestrictionOptions": { + "dataType": "refObject", + "properties": { + "schema_id": {"dataType":"string"}, + "schema_issuer_id": {"dataType":"string"}, + "schema_name": {"dataType":"string"}, + "schema_version": {"dataType":"string"}, + "issuer_id": {"dataType":"string"}, + "cred_def_id": {"dataType":"string"}, + "rev_reg_id": {"dataType":"string"}, + "schema_issuer_did": {"dataType":"string"}, + "issuer_did": {"dataType":"string"}, + "attributeValues": {"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"dataType":"string"}}, + "attributeMarkers": {"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"dataType":"boolean"}}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsRequestedAttributeOptions": { + "dataType": "refObject", + "properties": { + "name": {"dataType":"string"}, + "names": {"dataType":"array","array":{"dataType":"string"}}, + "restrictions": {"dataType":"array","array":{"dataType":"refObject","ref":"AnonCredsProofRequestRestrictionOptions"}}, + "non_revoked": {"ref":"AnonCredsNonRevokedInterval"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsRequestedPredicateOptions": { + "dataType": "refObject", + "properties": { + "name": {"dataType":"string","required":true}, + "p_type": {"ref":"AnonCredsPredicateType","required":true}, + "p_value": {"dataType":"double","required":true}, + "restrictions": {"dataType":"array","array":{"dataType":"refObject","ref":"AnonCredsProofRequestRestrictionOptions"}}, + "non_revoked": {"ref":"AnonCredsNonRevokedInterval"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsRequestProofFormatOptions": { + "dataType": "refObject", + "properties": { + "name": {"dataType":"string","required":true}, + "version": {"dataType":"string","required":true}, + "non_revoked": {"ref":"AnonCredsNonRevokedInterval"}, + "requested_attributes": {"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"ref":"AnonCredsRequestedAttributeOptions"}}, + "requested_predicates": {"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"ref":"AnonCredsRequestedPredicateOptions"}}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Pick_CreateProofRequestOptions.Exclude_keyofCreateProofRequestOptions.proofFormats-or-protocolVersion__": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"goalCode":{"dataType":"string"},"parentThreadId":{"dataType":"string"},"autoAcceptProof":{"ref":"AutoAcceptProof"},"comment":{"dataType":"string"},"willConfirm":{"dataType":"boolean","default":true}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommProofsCreateRequestOptions": { + "dataType": "refObject", + "properties": { + "goalCode": {"dataType":"string"}, + "parentThreadId": {"dataType":"string"}, + "autoAcceptProof": {"ref":"AutoAcceptProof"}, + "comment": {"dataType":"string"}, + "willConfirm": {"dataType":"boolean","default":true}, + "protocolVersion": {"ref":"ProofProtocolVersion","required":true}, + "proofFormats": {"dataType":"nestedObjectLiteral","nestedProperties":{"anoncreds":{"ref":"AnonCredsRequestProofFormatOptions"},"indy":{"ref":"AnonCredsRequestProofFormatOptions"}},"required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommProofsSendRequestOptions": { + "dataType": "refObject", + "properties": { + "goalCode": {"dataType":"string"}, + "parentThreadId": {"dataType":"string"}, + "autoAcceptProof": {"ref":"AutoAcceptProof"}, + "comment": {"dataType":"string"}, + "willConfirm": {"dataType":"boolean","default":true}, + "protocolVersion": {"ref":"ProofProtocolVersion","required":true}, + "proofFormats": {"dataType":"nestedObjectLiteral","nestedProperties":{"anoncreds":{"ref":"AnonCredsRequestProofFormatOptions"},"indy":{"ref":"AnonCredsRequestProofFormatOptions"}},"required":true}, + "connectionId": {"ref":"RecordId","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Record_string.string-or-number_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"dataType":"union","subSchemas":[{"dataType":"string"},{"dataType":"double"}]},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsClaimRecord": { + "dataType": "refAlias", + "type": {"ref":"Record_string.string-or-number_","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsCredentialInfo": { + "dataType": "refObject", + "properties": { + "credentialId": {"dataType":"string","required":true}, + "attributes": {"ref":"AnonCredsClaimRecord","required":true}, + "schemaId": {"dataType":"string","required":true}, + "credentialDefinitionId": {"dataType":"string","required":true}, + "revocationRegistryId": {"dataType":"union","subSchemas":[{"dataType":"string"},{"dataType":"enum","enums":[null]}],"required":true}, + "credentialRevocationId": {"dataType":"union","subSchemas":[{"dataType":"string"},{"dataType":"enum","enums":[null]}],"required":true}, + "methodName": {"dataType":"string","required":true}, + "linkSecretId": {"dataType":"string","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsRequestedAttributeMatch": { + "dataType": "refObject", + "properties": { + "credentialId": {"dataType":"string","required":true}, + "timestamp": {"dataType":"double"}, + "revealed": {"dataType":"boolean","required":true}, + "credentialInfo": {"ref":"AnonCredsCredentialInfo","required":true}, + "revoked": {"dataType":"boolean"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Record_string.AnonCredsRequestedAttributeMatch_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"ref":"AnonCredsRequestedAttributeMatch"},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsRequestedPredicateMatch": { + "dataType": "refObject", + "properties": { + "credentialId": {"dataType":"string","required":true}, + "timestamp": {"dataType":"double"}, + "credentialInfo": {"ref":"AnonCredsCredentialInfo","required":true}, + "revoked": {"dataType":"boolean"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Record_string.AnonCredsRequestedPredicateMatch_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"ref":"AnonCredsRequestedPredicateMatch"},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Record_string.string_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"dataType":"string"},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsSelectedCredentials": { + "dataType": "refObject", + "properties": { + "attributes": {"ref":"Record_string.AnonCredsRequestedAttributeMatch_","required":true}, + "predicates": {"ref":"Record_string.AnonCredsRequestedPredicateMatch_","required":true}, + "selfAttestedAttributes": {"ref":"Record_string.string_","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Pick_AcceptProofRequestOptions.Exclude_keyofAcceptProofRequestOptions.proofFormats-or-proofRecordId__": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"goalCode":{"dataType":"string"},"autoAcceptProof":{"ref":"AutoAcceptProof"},"comment":{"dataType":"string"},"willConfirm":{"dataType":"boolean","default":true},"useReturnRoute":{"dataType":"boolean"}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommProofsAcceptRequestOptions": { + "dataType": "refObject", + "properties": { + "goalCode": {"dataType":"string"}, + "autoAcceptProof": {"ref":"AutoAcceptProof"}, + "comment": {"dataType":"string"}, + "willConfirm": {"dataType":"boolean","default":true}, + "useReturnRoute": {"dataType":"boolean"}, + "proofFormats": {"dataType":"nestedObjectLiteral","nestedProperties":{"anoncreds":{"ref":"AnonCredsSelectedCredentials"},"indy":{"ref":"AnonCredsSelectedCredentials"}}}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "OutOfBandRole": { + "dataType": "refEnum", + "enums": ["sender","receiver"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "OutOfBandState": { + "dataType": "refEnum", + "enums": ["initial","await-response","prepare-response","done"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommOutOfBandRecord": { + "dataType": "refObject", + "properties": { + "id": {"ref":"RecordId","required":true}, + "createdAt": {"dataType":"datetime","required":true}, + "updatedAt": {"dataType":"datetime"}, + "type": {"dataType":"string","required":true}, + "outOfBandInvitation": {"ref":"PlaintextMessage","required":true}, + "role": {"ref":"OutOfBandRole","required":true}, + "state": {"ref":"OutOfBandState","required":true}, + "alias": {"dataType":"string"}, + "reusable": {"dataType":"boolean","required":true}, + "autoAcceptConnection": {"dataType":"boolean"}, + "mediatorId": {"ref":"RecordId"}, + "reuseConnectionId": {"ref":"RecordId"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommOutOfBandCreateInvitationResponse": { + "dataType": "refObject", + "properties": { + "invitation": {"ref":"PlaintextMessage","required":true}, + "outOfBandRecord": {"ref":"DidCommOutOfBandRecord","required":true}, + "invitationUrl": {"dataType":"string","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "HandshakeProtocol": { + "dataType": "refEnum", + "enums": ["https://didcomm.org/didexchange/1.x","https://didcomm.org/connections/1.x"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Pick_CreateOutOfBandInvitationConfig.Exclude_keyofCreateOutOfBandInvitationConfig.routing-or-appendedAttachments-or-messages__": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"label":{"dataType":"string"},"goalCode":{"dataType":"string"},"alias":{"dataType":"string"},"imageUrl":{"dataType":"string"},"goal":{"dataType":"string"},"handshake":{"dataType":"boolean"},"handshakeProtocols":{"dataType":"array","array":{"dataType":"refEnum","ref":"HandshakeProtocol"}},"multiUseInvitation":{"dataType":"boolean"},"autoAcceptConnection":{"dataType":"boolean"}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommOutOfBandCreateInvitationOptions": { + "dataType": "refObject", + "properties": { + "label": {"dataType":"string"}, + "goalCode": {"dataType":"string"}, + "alias": {"dataType":"string"}, + "imageUrl": {"dataType":"string"}, + "goal": {"dataType":"string"}, + "handshake": {"dataType":"boolean"}, + "handshakeProtocols": {"dataType":"array","array":{"dataType":"refEnum","ref":"HandshakeProtocol"}}, + "multiUseInvitation": {"dataType":"boolean"}, + "autoAcceptConnection": {"dataType":"boolean"}, + "messages": {"dataType":"array","array":{"dataType":"refObject","ref":"PlaintextMessage"}}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Pick_CreateLegacyInvitationConfig.Exclude_keyofCreateLegacyInvitationConfig.routing__": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"label":{"dataType":"string"},"alias":{"dataType":"string"},"imageUrl":{"dataType":"string"},"multiUseInvitation":{"dataType":"boolean"},"autoAcceptConnection":{"dataType":"boolean"}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommOutOfBandCreateLegacyConnectionInvitationOptions": { + "dataType": "refObject", + "properties": { + "label": {"dataType":"string"}, + "alias": {"dataType":"string"}, + "imageUrl": {"dataType":"string"}, + "multiUseInvitation": {"dataType":"boolean"}, + "autoAcceptConnection": {"dataType":"boolean"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommOutOfBandCreateLegacyConnectionlessInvitationOptions": { + "dataType": "refObject", + "properties": { + "message": {"ref":"PlaintextMessage","required":true}, + "domain": {"dataType":"string","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Pick_ReceiveOutOfBandInvitationConfig.Exclude_keyofReceiveOutOfBandInvitationConfig.routing__": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"label":{"dataType":"string"},"alias":{"dataType":"string"},"imageUrl":{"dataType":"string"},"autoAcceptConnection":{"dataType":"boolean"},"autoAcceptInvitation":{"dataType":"boolean"},"reuseConnection":{"dataType":"boolean"},"acceptInvitationTimeoutMs":{"dataType":"double"},"ourDid":{"dataType":"string"}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommOutOfBandReceiveInvitationOptions": { + "dataType": "refObject", + "properties": { + "label": {"dataType":"string"}, + "alias": {"dataType":"string"}, + "imageUrl": {"dataType":"string"}, + "autoAcceptConnection": {"dataType":"boolean"}, + "autoAcceptInvitation": {"dataType":"boolean"}, + "reuseConnection": {"dataType":"boolean"}, + "acceptInvitationTimeoutMs": {"dataType":"double"}, + "ourDid": {"dataType":"string"}, + "invitation": {"dataType":"union","subSchemas":[{"ref":"PlaintextMessage"},{"dataType":"string"}],"required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Did": { + "dataType": "refAlias", + "type": {"dataType":"string","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommOutOfBandAcceptInvitationOptions": { + "dataType": "refObject", + "properties": { + "autoAcceptConnection": {"dataType":"boolean"}, + "reuseConnection": {"dataType":"boolean"}, + "label": {"dataType":"string"}, + "alias": {"dataType":"string"}, + "imageUrl": {"dataType":"string"}, + "timeoutMs": {"dataType":"double"}, + "ourDid": {"ref":"Did"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CredentialState": { + "dataType": "refEnum", + "enums": ["proposal-sent","proposal-received","offer-sent","offer-received","declined","request-sent","request-received","credential-issued","credential-received","done","abandoned"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CredentialRole": { + "dataType": "refEnum", + "enums": ["issuer","holder"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AutoAcceptCredential": { + "dataType": "refEnum", + "enums": ["always","contentApproved","never"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CredentialRecordBinding": { + "dataType": "refObject", + "properties": { + "credentialRecordType": {"dataType":"string","required":true}, + "credentialRecordId": {"dataType":"string","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CredentialPreviewAttributeOptions": { + "dataType": "refObject", + "properties": { + "name": {"dataType":"string","required":true}, + "mimeType": {"dataType":"string"}, + "value": {"dataType":"string","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommCredentialsExchangeRecord": { + "dataType": "refObject", + "properties": { + "id": {"ref":"RecordId","required":true}, + "createdAt": {"dataType":"datetime","required":true}, + "updatedAt": {"dataType":"datetime"}, + "type": {"dataType":"string","required":true}, + "connectionId": {"ref":"RecordId"}, + "threadId": {"ref":"ThreadId","required":true}, + "parentThreadId": {"ref":"ThreadId"}, + "state": {"ref":"CredentialState","required":true}, + "role": {"ref":"CredentialRole","required":true}, + "autoAcceptCredential": {"ref":"AutoAcceptCredential"}, + "revocationNotification": {"dataType":"nestedObjectLiteral","nestedProperties":{"comment":{"dataType":"string"},"revocationDate":{"dataType":"datetime","required":true}}}, + "errorMessage": {"dataType":"string"}, + "protocolVersion": {"dataType":"string","required":true}, + "credentials": {"dataType":"array","array":{"dataType":"refObject","ref":"CredentialRecordBinding"},"required":true}, + "credentialAttributes": {"dataType":"array","array":{"dataType":"refObject","ref":"CredentialPreviewAttributeOptions"}}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CredentialProtocolVersion": { + "dataType": "refAlias", + "type": {"dataType":"union","subSchemas":[{"dataType":"enum","enums":["v1"]},{"dataType":"enum","enums":["v2"]}],"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "JsonValue": { + "dataType": "refAlias", + "type": {"dataType":"union","subSchemas":[{"dataType":"string"},{"dataType":"double"},{"dataType":"boolean"},{"dataType":"enum","enums":[null]},{"ref":"JsonObject"},{"ref":"JsonArray"}],"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "JsonObject": { + "dataType": "refObject", + "properties": { + }, + "additionalProperties": {"ref":"JsonValue"}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "JsonArray": { + "dataType": "refAlias", + "type": {"dataType":"array","array":{"dataType":"refAlias","ref":"JsonValue"},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Record_string.unknown_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"dataType":"any"},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Pick_JwsGeneralFormat.Exclude_keyofJwsGeneralFormat.payload__": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"header":{"ref":"Record_string.unknown_","required":true},"signature":{"dataType":"string","required":true},"protected":{"dataType":"string","required":true}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Omit_JwsGeneralFormat.payload_": { + "dataType": "refAlias", + "type": {"ref":"Pick_JwsGeneralFormat.Exclude_keyofJwsGeneralFormat.payload__","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "JwsDetachedFormat": { + "dataType": "refAlias", + "type": {"ref":"Omit_JwsGeneralFormat.payload_","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "JwsFlattenedDetachedFormat": { + "dataType": "refObject", + "properties": { + "signatures": {"dataType":"array","array":{"dataType":"refAlias","ref":"JwsDetachedFormat"},"required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AttachmentData": { + "dataType": "refObject", + "properties": { + "base64": {"dataType":"string"}, + "json": {"ref":"JsonValue"}, + "links": {"dataType":"array","array":{"dataType":"string"}}, + "jws": {"dataType":"union","subSchemas":[{"ref":"JwsDetachedFormat"},{"ref":"JwsFlattenedDetachedFormat"}]}, + "sha256": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Attachment": { + "dataType": "refObject", + "properties": { + "id": {"dataType":"string","required":true}, + "description": {"dataType":"string"}, + "filename": {"dataType":"string"}, + "mimeType": {"dataType":"string"}, + "lastmodTime": {"dataType":"datetime"}, + "byteCount": {"dataType":"double"}, + "data": {"ref":"AttachmentData","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "LinkedAttachment": { + "dataType": "refObject", + "properties": { + "attributeName": {"dataType":"string","required":true}, + "attachment": {"ref":"Attachment","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsProposeCredentialFormat": { + "dataType": "refObject", + "properties": { + "schemaIssuerId": {"dataType":"string"}, + "schemaId": {"dataType":"string"}, + "schemaName": {"dataType":"string"}, + "schemaVersion": {"dataType":"string"}, + "credentialDefinitionId": {"dataType":"string"}, + "issuerId": {"dataType":"string"}, + "attributes": {"dataType":"array","array":{"dataType":"refObject","ref":"CredentialPreviewAttributeOptions"}}, + "linkedAttachments": {"dataType":"array","array":{"dataType":"refObject","ref":"LinkedAttachment"}}, + "schemaIssuerDid": {"dataType":"string"}, + "issuerDid": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Pick_AnonCredsProposeCredentialFormat.Exclude_keyofAnonCredsProposeCredentialFormat.schemaIssuerId-or-issuerId__": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"schemaId":{"dataType":"string"},"schemaName":{"dataType":"string"},"schemaVersion":{"dataType":"string"},"credentialDefinitionId":{"dataType":"string"},"attributes":{"dataType":"array","array":{"dataType":"refObject","ref":"CredentialPreviewAttributeOptions"}},"linkedAttachments":{"dataType":"array","array":{"dataType":"refObject","ref":"LinkedAttachment"}},"schemaIssuerDid":{"dataType":"string"},"issuerDid":{"dataType":"string"}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Omit_AnonCredsProposeCredentialFormat.schemaIssuerId-or-issuerId_": { + "dataType": "refAlias", + "type": {"ref":"Pick_AnonCredsProposeCredentialFormat.Exclude_keyofAnonCredsProposeCredentialFormat.schemaIssuerId-or-issuerId__","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "LegacyIndyProposeCredentialFormat": { + "dataType": "refAlias", + "type": {"ref":"Omit_AnonCredsProposeCredentialFormat.schemaIssuerId-or-issuerId_","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "ProposeCredentialOptions": { + "dataType": "refObject", + "properties": { + "protocolVersion": {"ref":"CredentialProtocolVersion","required":true}, + "credentialFormats": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"dataType":"union","subSchemas":[{"ref":"AnonCredsProposeCredentialFormat"},{"ref":"LegacyIndyProposeCredentialFormat"}]},"anoncreds":{"dataType":"union","subSchemas":[{"ref":"AnonCredsProposeCredentialFormat"},{"ref":"LegacyIndyProposeCredentialFormat"}]}},"required":true}, + "autoAcceptCredential": {"ref":"AutoAcceptCredential"}, + "comment": {"dataType":"string"}, + "connectionId": {"ref":"RecordId","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsAcceptProposalFormat": { + "dataType": "refObject", + "properties": { + "credentialDefinitionId": {"dataType":"string"}, + "revocationRegistryDefinitionId": {"dataType":"string"}, + "revocationRegistryIndex": {"dataType":"double"}, + "attributes": {"dataType":"array","array":{"dataType":"refObject","ref":"CredentialPreviewAttributeOptions"}}, + "linkedAttachments": {"dataType":"array","array":{"dataType":"refObject","ref":"LinkedAttachment"}}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AcceptCredentialProposalOptions": { + "dataType": "refObject", + "properties": { + "credentialFormats": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"ref":"AnonCredsAcceptProposalFormat"},"anoncreds":{"ref":"AnonCredsAcceptProposalFormat"}}}, + "autoAcceptCredential": {"ref":"AutoAcceptCredential"}, + "comment": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommCredentialsCreateOfferResponse": { + "dataType": "refObject", + "properties": { + "message": {"ref":"PlaintextMessage","required":true}, + "credentialExchange": {"ref":"DidCommCredentialsExchangeRecord","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsOfferCredentialFormat": { + "dataType": "refObject", + "properties": { + "credentialDefinitionId": {"dataType":"string","required":true}, + "revocationRegistryDefinitionId": {"dataType":"string"}, + "revocationRegistryIndex": {"dataType":"double"}, + "attributes": {"dataType":"array","array":{"dataType":"refObject","ref":"CredentialPreviewAttributeOptions"},"required":true}, + "linkedAttachments": {"dataType":"array","array":{"dataType":"refObject","ref":"LinkedAttachment"}}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CredentialFormatPayload_CredentialFormats.createOffer_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"ref":"AnonCredsOfferCredentialFormat"},"anoncreds":{"ref":"AnonCredsOfferCredentialFormat"}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CreateOfferOptions": { + "dataType": "refObject", + "properties": { + "protocolVersion": {"ref":"CredentialProtocolVersion","required":true}, + "credentialFormats": {"ref":"CredentialFormatPayload_CredentialFormats.createOffer_","required":true}, + "autoAcceptCredential": {"ref":"AutoAcceptCredential"}, + "comment": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "OfferCredentialOptions": { + "dataType": "refObject", + "properties": { + "protocolVersion": {"ref":"CredentialProtocolVersion","required":true}, + "credentialFormats": {"ref":"CredentialFormatPayload_CredentialFormats.createOffer_","required":true}, + "autoAcceptCredential": {"ref":"AutoAcceptCredential"}, + "comment": {"dataType":"string"}, + "connectionId": {"ref":"RecordId","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsAcceptOfferFormat": { + "dataType": "refObject", + "properties": { + "linkSecretId": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CredentialFormatPayload_CredentialFormats.acceptOffer_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"ref":"AnonCredsAcceptOfferFormat"},"anoncreds":{"ref":"AnonCredsAcceptOfferFormat"}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AcceptCredentialOfferOptions": { + "dataType": "refObject", + "properties": { + "credentialFormats": {"ref":"CredentialFormatPayload_CredentialFormats.acceptOffer_"}, + "autoAcceptCredential": {"ref":"AutoAcceptCredential"}, + "comment": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Record_string.never_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsAcceptRequestFormat": { + "dataType": "refAlias", + "type": {"ref":"Record_string.never_","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "CredentialFormatPayload_CredentialFormats.acceptRequest_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"ref":"AnonCredsAcceptRequestFormat"},"anoncreds":{"ref":"AnonCredsAcceptRequestFormat"}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AcceptCredentialRequestOptions": { + "dataType": "refObject", + "properties": { + "credentialFormats": {"ref":"CredentialFormatPayload_CredentialFormats.acceptRequest_"}, + "autoAcceptCredential": {"ref":"AutoAcceptCredential"}, + "comment": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidExchangeState": { + "dataType": "refEnum", + "enums": ["start","invitation-sent","invitation-received","request-sent","request-received","response-sent","response-received","abandoned","completed"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidExchangeRole": { + "dataType": "refEnum", + "enums": ["requester","responder"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "ConnectionType": { + "dataType": "refEnum", + "enums": ["mediator"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommConnectionsRecord": { + "dataType": "refObject", + "properties": { + "id": {"ref":"RecordId","required":true}, + "createdAt": {"dataType":"datetime","required":true}, + "updatedAt": {"dataType":"datetime"}, + "type": {"dataType":"string","required":true}, + "did": {"ref":"Did"}, + "theirDid": {"ref":"Did"}, + "theirLabel": {"dataType":"string"}, + "state": {"ref":"DidExchangeState","required":true}, + "role": {"ref":"DidExchangeRole","required":true}, + "alias": {"dataType":"string"}, + "autoAcceptConnection": {"dataType":"boolean"}, + "threadId": {"ref":"ThreadId"}, + "imageUrl": {"dataType":"string"}, + "mediatorId": {"dataType":"string"}, + "errorMessage": {"dataType":"string"}, + "protocol": {"ref":"HandshakeProtocol"}, + "outOfBandId": {"dataType":"string"}, + "invitationDid": {"ref":"Did"}, + "connectionTypes": {"dataType":"array","array":{"dataType":"union","subSchemas":[{"ref":"ConnectionType"},{"dataType":"string"}]}}, + "previousDids": {"dataType":"array","array":{"dataType":"refAlias","ref":"Did"}}, + "previousTheirDids": {"dataType":"array","array":{"dataType":"refAlias","ref":"Did"}}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "BasicMessageRole": { + "dataType": "refEnum", + "enums": ["sender","receiver"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommBasicMessagesRecord": { + "dataType": "refObject", + "properties": { + "id": {"ref":"RecordId","required":true}, + "createdAt": {"dataType":"datetime","required":true}, + "updatedAt": {"dataType":"datetime"}, + "type": {"dataType":"string","required":true}, + "connectionId": {"ref":"RecordId","required":true}, + "role": {"ref":"BasicMessageRole","required":true}, + "content": {"dataType":"string","required":true}, + "sentTime": {"dataType":"string","required":true}, + "threadId": {"ref":"ThreadId"}, + "parentThreadId": {"ref":"ThreadId"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommBasicMessagesSendOptions": { + "dataType": "refObject", + "properties": { + "connectionId": {"ref":"RecordId","required":true}, + "content": {"dataType":"string","required":true}, + "parentThreadId": {"ref":"ThreadId"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Record_string.any_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"dataType":"any"},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidResolutionMetadata": { + "dataType": "refObject", + "properties": { + "contentType": {"dataType":"string"}, + "error": {"dataType":"union","subSchemas":[{"dataType":"enum","enums":["invalidDid"]},{"dataType":"enum","enums":["notFound"]},{"dataType":"enum","enums":["representationNotSupported"]},{"dataType":"enum","enums":["unsupportedDidMethod"]},{"dataType":"string"}]}, + "message": {"dataType":"string"}, + "servedFromCache": {"dataType":"boolean"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "JsonWebKey": { + "dataType": "refObject", + "properties": { + "alg": {"dataType":"string"}, + "crv": {"dataType":"string"}, + "e": {"dataType":"string"}, + "ext": {"dataType":"boolean"}, + "key_ops": {"dataType":"array","array":{"dataType":"string"}}, + "kid": {"dataType":"string"}, + "kty": {"dataType":"string","required":true}, + "n": {"dataType":"string"}, + "use": {"dataType":"string"}, + "x": {"dataType":"string"}, + "y": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "VerificationMethod": { + "dataType": "refObject", + "properties": { + "id": {"dataType":"string","required":true}, + "type": {"dataType":"string","required":true}, + "controller": {"dataType":"string","required":true}, + "publicKeyBase58": {"dataType":"string"}, + "publicKeyBase64": {"dataType":"string"}, + "publicKeyJwk": {"ref":"JsonWebKey"}, + "publicKeyHex": {"dataType":"string"}, + "publicKeyMultibase": {"dataType":"string"}, + "blockchainAccountId": {"dataType":"string"}, + "ethereumAddress": {"dataType":"string"}, + "conditionOr": {"dataType":"array","array":{"dataType":"refObject","ref":"VerificationMethod"}}, + "conditionAnd": {"dataType":"array","array":{"dataType":"refObject","ref":"VerificationMethod"}}, + "threshold": {"dataType":"double"}, + "conditionThreshold": {"dataType":"array","array":{"dataType":"refObject","ref":"VerificationMethod"}}, + "conditionWeightedThreshold": {"dataType":"array","array":{"dataType":"refObject","ref":"ConditionWeightedThreshold"}}, + "conditionDelegated": {"dataType":"string"}, + "relationshipParent": {"dataType":"array","array":{"dataType":"string"}}, + "relationshipChild": {"dataType":"array","array":{"dataType":"string"}}, + "relationshipSibling": {"dataType":"array","array":{"dataType":"string"}}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "ConditionWeightedThreshold": { + "dataType": "refObject", + "properties": { + "condition": {"ref":"VerificationMethod","required":true}, + "weight": {"dataType":"double","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "ServiceEndpoint": { + "dataType": "refAlias", + "type": {"dataType":"union","subSchemas":[{"dataType":"string"},{"ref":"Record_string.any_"}],"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Service": { + "dataType": "refObject", + "properties": { + "id": {"dataType":"string","required":true}, + "type": {"dataType":"string","required":true}, + "serviceEndpoint": {"dataType":"union","subSchemas":[{"ref":"ServiceEndpoint"},{"dataType":"array","array":{"dataType":"refAlias","ref":"ServiceEndpoint"}}],"required":true}, + }, + "additionalProperties": {"dataType":"any"}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DIDDocument": { + "dataType": "refAlias", + "type": {"dataType":"intersection","subSchemas":[{"dataType":"nestedObjectLiteral","nestedProperties":{"publicKey":{"dataType":"array","array":{"dataType":"refObject","ref":"VerificationMethod"}},"service":{"dataType":"array","array":{"dataType":"refObject","ref":"Service"}},"verificationMethod":{"dataType":"array","array":{"dataType":"refObject","ref":"VerificationMethod"}},"controller":{"dataType":"union","subSchemas":[{"dataType":"string"},{"dataType":"array","array":{"dataType":"string"}}]},"alsoKnownAs":{"dataType":"array","array":{"dataType":"string"}},"id":{"dataType":"string","required":true},"@context":{"dataType":"union","subSchemas":[{"dataType":"enum","enums":["https://www.w3.org/ns/did/v1"]},{"dataType":"string"},{"dataType":"array","array":{"dataType":"string"}}]}}},{"dataType":"nestedObjectLiteral","nestedProperties":{"authentication":{"dataType":"array","array":{"dataType":"union","subSchemas":[{"dataType":"string"},{"ref":"VerificationMethod"}]}},"assertionMethod":{"dataType":"array","array":{"dataType":"union","subSchemas":[{"dataType":"string"},{"ref":"VerificationMethod"}]}},"keyAgreement":{"dataType":"array","array":{"dataType":"union","subSchemas":[{"dataType":"string"},{"ref":"VerificationMethod"}]}},"capabilityInvocation":{"dataType":"array","array":{"dataType":"union","subSchemas":[{"dataType":"string"},{"ref":"VerificationMethod"}]}},"capabilityDelegation":{"dataType":"array","array":{"dataType":"union","subSchemas":[{"dataType":"string"},{"ref":"VerificationMethod"}]}}}}],"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidDocumentJson": { + "dataType": "refAlias", + "type": {"ref":"DIDDocument","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DIDDocumentMetadata": { + "dataType": "refObject", + "properties": { + "created": {"dataType":"string"}, + "updated": {"dataType":"string"}, + "deactivated": {"dataType":"boolean"}, + "versionId": {"dataType":"string"}, + "nextUpdate": {"dataType":"string"}, + "nextVersionId": {"dataType":"string"}, + "equivalentId": {"dataType":"string"}, + "canonicalId": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidDocumentMetadata": { + "dataType": "refAlias", + "type": {"ref":"DIDDocumentMetadata","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidResolveSuccessResponse": { + "dataType": "refObject", + "properties": { + "didResolutionMetadata": {"ref":"DidResolutionMetadata","required":true}, + "didDocument": {"ref":"DidDocumentJson","required":true}, + "didDocumentMetadata": {"ref":"DidDocumentMetadata","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidResolveFailedResponse": { + "dataType": "refObject", + "properties": { + "didResolutionMetadata": {"dataType":"intersection","subSchemas":[{"ref":"DidResolutionMetadata"},{"dataType":"nestedObjectLiteral","nestedProperties":{"error":{"dataType":"string","required":true},"message":{"dataType":"string","required":true}}}],"required":true}, + "didDocument": {"dataType":"union","subSchemas":[{"ref":"DidDocumentJson"},{"dataType":"enum","enums":[null]}],"required":true}, + "didDocumentMetadata": {"ref":"DidDocumentMetadata","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "KeyType": { + "dataType": "refEnum", + "enums": ["ed25519","bls12381g1g2","bls12381g1","bls12381g2","x25519","p256","p384","p521","k256"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "PrivateKey": { + "dataType": "refObject", + "properties": { + "keyType": {"ref":"KeyType","required":true}, + "privateKeyBase58": {"dataType":"string","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidImportOptions": { + "dataType": "refObject", + "properties": { + "did": {"ref":"Did","required":true}, + "didDocument": {"ref":"DidDocumentJson"}, + "privateKeys": {"dataType":"array","array":{"dataType":"refObject","ref":"PrivateKey"}}, + "overwrite": {"dataType":"boolean"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnyJsonObject": { + "dataType": "refObject", + "properties": { + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCreateBaseResponse__state-finished--did-Did--didDocument-DidDocumentJson--secret_63_-AnyJsonObject__": { + "dataType": "refObject", + "properties": { + "jobId": {"dataType":"string"}, + "didRegistrationMetadata": {"ref":"AnyJsonObject","required":true}, + "didDocumentMetadata": {"ref":"DidResolutionMetadata","required":true}, + "didState": {"dataType":"nestedObjectLiteral","nestedProperties":{"secret":{"ref":"AnyJsonObject"},"didDocument":{"ref":"DidDocumentJson","required":true},"did":{"ref":"Did","required":true},"state":{"dataType":"enum","enums":["finished"],"required":true}},"required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCreateFinishedResponse": { + "dataType": "refAlias", + "type": {"ref":"DidCreateBaseResponse__state-finished--did-Did--didDocument-DidDocumentJson--secret_63_-AnyJsonObject__","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCreateBaseResponse__state-failed--did_63_-Did--didDocument_63_-DidDocumentJson--secret_63_-AnyJsonObject--reason-string__": { + "dataType": "refObject", + "properties": { + "jobId": {"dataType":"string"}, + "didRegistrationMetadata": {"ref":"AnyJsonObject","required":true}, + "didDocumentMetadata": {"ref":"DidResolutionMetadata","required":true}, + "didState": {"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true},"secret":{"ref":"AnyJsonObject"},"didDocument":{"ref":"DidDocumentJson"},"did":{"ref":"Did"},"state":{"dataType":"enum","enums":["failed"],"required":true}},"required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCreateFailedResponse": { + "dataType": "refAlias", + "type": {"ref":"DidCreateBaseResponse__state-failed--did_63_-Did--didDocument_63_-DidDocumentJson--secret_63_-AnyJsonObject--reason-string__","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCreateBaseResponse__state-action--action-string--did_63_-Did--didDocument_63_-DidDocumentJson--secret_63_-AnyJsonObject--_91_key-string_93__58_unknown__": { + "dataType": "refObject", + "properties": { + "jobId": {"dataType":"string"}, + "didRegistrationMetadata": {"ref":"AnyJsonObject","required":true}, + "didDocumentMetadata": {"ref":"DidResolutionMetadata","required":true}, + "didState": {"dataType":"nestedObjectLiteral","nestedProperties":{"secret":{"ref":"AnyJsonObject"},"didDocument":{"ref":"DidDocumentJson"},"did":{"ref":"Did"},"action":{"dataType":"string","required":true},"state":{"dataType":"enum","enums":["action"],"required":true}},"additionalProperties":{"dataType":"any"},"required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCreateActionResponse": { + "dataType": "refAlias", + "type": {"ref":"DidCreateBaseResponse__state-action--action-string--did_63_-Did--didDocument_63_-DidDocumentJson--secret_63_-AnyJsonObject--_91_key-string_93__58_unknown__","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCreateBaseResponse__state-wait--did_63_-Did--didDocument_63_-DidDocumentJson--secret_63_-AnyJsonObject__": { + "dataType": "refObject", + "properties": { + "jobId": {"dataType":"string"}, + "didRegistrationMetadata": {"ref":"AnyJsonObject","required":true}, + "didDocumentMetadata": {"ref":"DidResolutionMetadata","required":true}, + "didState": {"dataType":"nestedObjectLiteral","nestedProperties":{"secret":{"ref":"AnyJsonObject"},"didDocument":{"ref":"DidDocumentJson"},"did":{"ref":"Did"},"state":{"dataType":"enum","enums":["wait"],"required":true}},"required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCreateWaitResponse": { + "dataType": "refAlias", + "type": {"ref":"DidCreateBaseResponse__state-wait--did_63_-Did--didDocument_63_-DidDocumentJson--secret_63_-AnyJsonObject__","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Pick_DidCreateBaseOptions.Exclude_keyofDidCreateBaseOptions.did-or-didDocument__": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"method":{"dataType":"string"},"options":{"ref":"AnyJsonObject"},"secret":{"ref":"AnyJsonObject"}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "KeyOrJwkDidCreateOptions": { + "dataType": "refObject", + "properties": { + "method": {"dataType":"union","subSchemas":[{"dataType":"enum","enums":["key"]},{"dataType":"enum","enums":["jwk"]}],"required":true}, + "options": {"dataType":"nestedObjectLiteral","nestedProperties":{"keyType":{"ref":"KeyType","required":true}},"required":true}, + "secret": {"dataType":"nestedObjectLiteral","nestedProperties":{"privateKeyBase58":{"dataType":"string"},"seedBase58":{"dataType":"string"}}}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCreateBaseOptions": { + "dataType": "refObject", + "properties": { + "method": {"dataType":"string"}, + "did": {"ref":"Did"}, + "options": {"ref":"AnyJsonObject"}, + "secret": {"ref":"AnyJsonObject"}, + "didDocument": {"ref":"DidDocumentJson"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCreateOptions": { + "dataType": "refAlias", + "type": {"dataType":"union","subSchemas":[{"ref":"KeyOrJwkDidCreateOptions"},{"ref":"DidCreateBaseOptions"}],"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsSchemaId": { + "dataType": "refAlias", + "type": {"dataType":"string","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsSchema": { + "dataType": "refObject", + "properties": { + "issuerId": {"dataType":"string","required":true}, + "name": {"dataType":"string","required":true}, + "version": {"dataType":"string","required":true}, + "attrNames": {"dataType":"array","array":{"dataType":"string"},"required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsGetSchemaSuccessResponse": { + "dataType": "refObject", + "properties": { + "schemaId": {"ref":"AnonCredsSchemaId","required":true}, + "schema": {"ref":"AnonCredsSchema","required":true}, + "resolutionMetadata": {"ref":"AnyJsonObject","required":true}, + "schemaMetadata": {"ref":"AnyJsonObject","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Required_AnonCredsResolutionMetadata_": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"error":{"dataType":"string","required":true},"message":{"dataType":"string","required":true}},"additionalProperties":{"dataType":"any"},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsGetSchemaFailedResponse": { + "dataType": "refObject", + "properties": { + "schemaId": {"ref":"AnonCredsSchemaId","required":true}, + "schema": {"ref":"AnonCredsSchema"}, + "resolutionMetadata": {"ref":"Required_AnonCredsResolutionMetadata_","required":true}, + "schemaMetadata": {"ref":"AnyJsonObject","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "RegisterSchemaReturnStateFinished": { + "dataType": "refObject", + "properties": { + "state": {"dataType":"enum","enums":["finished"],"required":true}, + "schema": {"ref":"AnonCredsSchema","required":true}, + "schemaId": {"dataType":"string","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsRegisterSchemaSuccessResponse": { + "dataType": "refObject", + "properties": { + "jobId": {"dataType":"string"}, + "schemaState": {"ref":"RegisterSchemaReturnStateFinished","required":true}, + "schemaMetadata": {"ref":"AnyJsonObject","required":true}, + "registrationMetadata": {"ref":"AnyJsonObject","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "RegisterSchemaReturnStateFailed": { + "dataType": "refObject", + "properties": { + "state": {"dataType":"enum","enums":["failed"],"required":true}, + "reason": {"dataType":"string","required":true}, + "schema": {"ref":"AnonCredsSchema"}, + "schemaId": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsRegisterSchemaFailedResponse": { + "dataType": "refObject", + "properties": { + "jobId": {"dataType":"string"}, + "schemaState": {"ref":"RegisterSchemaReturnStateFailed","required":true}, + "schemaMetadata": {"ref":"AnyJsonObject","required":true}, + "registrationMetadata": {"ref":"AnyJsonObject","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "RegisterSchemaReturnStateAction": { + "dataType": "refObject", + "properties": { + "state": {"dataType":"enum","enums":["action"],"required":true}, + "action": {"dataType":"string","required":true}, + "schema": {"ref":"AnonCredsSchema","required":true}, + "schemaId": {"dataType":"string","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsRegisterSchemaActionResponse": { + "dataType": "refObject", + "properties": { + "jobId": {"dataType":"string"}, + "schemaState": {"ref":"RegisterSchemaReturnStateAction","required":true}, + "schemaMetadata": {"ref":"AnyJsonObject","required":true}, + "registrationMetadata": {"ref":"AnyJsonObject","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "RegisterSchemaReturnStateWait": { + "dataType": "refObject", + "properties": { + "state": {"dataType":"enum","enums":["wait"],"required":true}, + "schema": {"ref":"AnonCredsSchema"}, + "schemaId": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsRegisterSchemaWaitResponse": { + "dataType": "refObject", + "properties": { + "jobId": {"dataType":"string"}, + "schemaState": {"ref":"RegisterSchemaReturnStateWait","required":true}, + "schemaMetadata": {"ref":"AnyJsonObject","required":true}, + "registrationMetadata": {"ref":"AnyJsonObject","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsRegisterSchemaBody": { + "dataType": "refObject", + "properties": { + "schema": {"ref":"AnonCredsSchema","required":true}, + "options": {"ref":"AnyJsonObject"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsCredentialDefinitionId": { + "dataType": "refAlias", + "type": {"dataType":"string","validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsCredentialDefinition": { + "dataType": "refObject", + "properties": { + "issuerId": {"dataType":"string","required":true}, + "schemaId": {"dataType":"string","required":true}, + "type": {"dataType":"enum","enums":["CL"],"required":true}, + "tag": {"dataType":"string","required":true}, + "value": {"dataType":"nestedObjectLiteral","nestedProperties":{"revocation":{"dataType":"any"},"primary":{"ref":"Record_string.unknown_","required":true}},"required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsGetCredentialDefinitionSuccessResponse": { + "dataType": "refObject", + "properties": { + "credentialDefinitionId": {"ref":"AnonCredsCredentialDefinitionId","required":true}, + "credentialDefinition": {"ref":"AnonCredsCredentialDefinition","required":true}, + "resolutionMetadata": {"ref":"AnyJsonObject","required":true}, + "credentialDefinitionMetadata": {"ref":"AnyJsonObject","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsGetCredentialDefinitionFailedResponse": { + "dataType": "refObject", + "properties": { + "credentialDefinitionId": {"ref":"AnonCredsCredentialDefinitionId","required":true}, + "credentialDefinition": {"ref":"AnonCredsCredentialDefinition"}, + "resolutionMetadata": {"ref":"Required_AnonCredsResolutionMetadata_","required":true}, + "credentialDefinitionMetadata": {"ref":"AnyJsonObject","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "RegisterCredentialDefinitionReturnStateFinished": { + "dataType": "refObject", + "properties": { + "state": {"dataType":"enum","enums":["finished"],"required":true}, + "credentialDefinition": {"ref":"AnonCredsCredentialDefinition","required":true}, + "credentialDefinitionId": {"dataType":"string","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsRegisterCredentialDefinitionSuccessResponse": { + "dataType": "refObject", + "properties": { + "jobId": {"dataType":"string"}, + "credentialDefinitionState": {"ref":"RegisterCredentialDefinitionReturnStateFinished","required":true}, + "credentialDefinitionMetadata": {"ref":"AnyJsonObject","required":true}, + "registrationMetadata": {"ref":"AnyJsonObject","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "RegisterCredentialDefinitionReturnStateFailed": { + "dataType": "refObject", + "properties": { + "state": {"dataType":"enum","enums":["failed"],"required":true}, + "reason": {"dataType":"string","required":true}, + "credentialDefinition": {"ref":"AnonCredsCredentialDefinition"}, + "credentialDefinitionId": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsRegisterCredentialDefinitionFailedResponse": { + "dataType": "refObject", + "properties": { + "jobId": {"dataType":"string"}, + "credentialDefinitionState": {"ref":"RegisterCredentialDefinitionReturnStateFailed","required":true}, + "credentialDefinitionMetadata": {"ref":"AnyJsonObject","required":true}, + "registrationMetadata": {"ref":"AnyJsonObject","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "RegisterCredentialDefinitionReturnStateAction": { + "dataType": "refObject", + "properties": { + "state": {"dataType":"enum","enums":["action"],"required":true}, + "action": {"dataType":"string","required":true}, + "credentialDefinitionId": {"dataType":"string","required":true}, + "credentialDefinition": {"ref":"AnonCredsCredentialDefinition","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsRegisterCredentialDefinitionActionResponse": { + "dataType": "refObject", + "properties": { + "jobId": {"dataType":"string"}, + "credentialDefinitionState": {"ref":"RegisterCredentialDefinitionReturnStateAction","required":true}, + "credentialDefinitionMetadata": {"ref":"AnyJsonObject","required":true}, + "registrationMetadata": {"ref":"AnyJsonObject","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "RegisterCredentialDefinitionReturnStateWait": { + "dataType": "refObject", + "properties": { + "state": {"dataType":"enum","enums":["wait"],"required":true}, + "credentialDefinition": {"ref":"AnonCredsCredentialDefinition"}, + "credentialDefinitionId": {"dataType":"string"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsRegisterCredentialDefinitionWaitResponse": { + "dataType": "refObject", + "properties": { + "jobId": {"dataType":"string"}, + "credentialDefinitionState": {"ref":"RegisterCredentialDefinitionReturnStateWait","required":true}, + "credentialDefinitionMetadata": {"ref":"AnyJsonObject","required":true}, + "registrationMetadata": {"ref":"AnyJsonObject","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsRegisterCredentialDefinitionInput": { + "dataType": "refObject", + "properties": { + "issuerId": {"dataType":"string","required":true}, + "schemaId": {"dataType":"string","required":true}, + "tag": {"dataType":"string","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsRegisterCredentialDefinitionOptions": { + "dataType": "refObject", + "properties": { + "supportRevocation": {"dataType":"boolean","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AnonCredsRegisterCredentialDefinitionBody": { + "dataType": "refObject", + "properties": { + "credentialDefinition": {"ref":"AnonCredsRegisterCredentialDefinitionInput","required":true}, + "options": {"ref":"AnonCredsRegisterCredentialDefinitionOptions","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "DidCommMimeType": { + "dataType": "refEnum", + "enums": ["application/ssi-agent-wire","application/didcomm-envelope-enc"], + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "Pick_ReturnType_AgentConfig-at-toJSON_.Exclude_keyofReturnType_AgentConfig-at-toJSON_.walletConfig-or-logger-or-agentDependencies__": { + "dataType": "refAlias", + "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"label":{"dataType":"string","required":true},"connectionImageUrl":{"dataType":"string"},"endpoints":{"dataType":"array","array":{"dataType":"string"}},"didCommMimeType":{"ref":"DidCommMimeType"},"useDidKeyInProtocols":{"dataType":"boolean"},"useDidSovPrefixWhereAllowed":{"dataType":"boolean"},"autoUpdateStorageOnStartup":{"dataType":"boolean"},"backupBeforeStorageUpdate":{"dataType":"boolean"}},"validators":{}}, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "ApiAgentConfig": { + "dataType": "refObject", + "properties": { + "label": {"dataType":"string","required":true}, + "connectionImageUrl": {"dataType":"string"}, + "endpoints": {"dataType":"array","array":{"dataType":"string"}}, + "didCommMimeType": {"ref":"DidCommMimeType"}, + "useDidKeyInProtocols": {"dataType":"boolean"}, + "useDidSovPrefixWhereAllowed": {"dataType":"boolean"}, + "autoUpdateStorageOnStartup": {"dataType":"boolean"}, + "backupBeforeStorageUpdate": {"dataType":"boolean"}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + "AgentInfo": { + "dataType": "refObject", + "properties": { + "config": {"ref":"ApiAgentConfig","required":true}, + "isInitialized": {"dataType":"boolean","required":true}, + }, + "additionalProperties": false, + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +}; +const templateService = new ExpressTemplateService(models, {"noImplicitAdditionalProperties":"throw-on-extras","bodyCoercion":true}); + +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + +export function RegisterRoutes(app: Router) { + // ########################################################################################################### + // NOTE: If you do not see routes for all of your controllers in this file, then you might not have informed tsoa of where to look + // Please look into the "controllerPathGlobs" config option described in the readme: https://github.com/lukeautry/tsoa + // ########################################################################################################### + app.post('/tenants', + authenticateMiddleware([{"tenants":["admin"]}]), + ...(fetchMiddlewares(TenantsController)), + ...(fetchMiddlewares(TenantsController.prototype.createTenant)), + + async function TenantsController_createTenant(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + body: {"in":"body","name":"body","required":true,"ref":"CreateTenantOptions"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(TenantsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'createTenant', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.get('/didcomm/proofs', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(ProofsController)), + ...(fetchMiddlewares(ProofsController.prototype.findProofsByQuery)), + + async function ProofsController_findProofsByQuery(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + threadId: {"in":"query","name":"threadId","ref":"ThreadId"}, + connectionId: {"in":"query","name":"connectionId","ref":"RecordId"}, + state: {"in":"query","name":"state","ref":"ProofState"}, + parentThreadId: {"in":"query","name":"parentThreadId","ref":"ThreadId"}, + role: {"in":"query","name":"role","ref":"ProofRole"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(ProofsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'findProofsByQuery', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.get('/didcomm/proofs/:proofExchangeId', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(ProofsController)), + ...(fetchMiddlewares(ProofsController.prototype.getProofExchangeById)), + + async function ProofsController_getProofExchangeById(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + proofExchangeId: {"in":"path","name":"proofExchangeId","required":true,"ref":"RecordId"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(ProofsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'getProofExchangeById', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.delete('/didcomm/proofs/:proofExchangeId', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(ProofsController)), + ...(fetchMiddlewares(ProofsController.prototype.deleteProof)), + + async function ProofsController_deleteProof(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + proofExchangeId: {"in":"path","name":"proofExchangeId","required":true,"ref":"RecordId"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(ProofsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'deleteProof', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/proofs/propose-proof', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(ProofsController)), + ...(fetchMiddlewares(ProofsController.prototype.proposeProof)), + + async function ProofsController_proposeProof(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + body: {"in":"body","name":"body","required":true,"ref":"DidCommProofsProposeProofOptions"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(ProofsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'proposeProof', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/proofs/:proofExchangeId/accept-proposal', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(ProofsController)), + ...(fetchMiddlewares(ProofsController.prototype.acceptProposal)), + + async function ProofsController_acceptProposal(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + proofExchangeId: {"in":"path","name":"proofExchangeId","required":true,"ref":"RecordId"}, + body: {"in":"body","name":"body","required":true,"ref":"DidCommProofsAcceptProposalOptions"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(ProofsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'acceptProposal', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/proofs/create-request', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(ProofsController)), + ...(fetchMiddlewares(ProofsController.prototype.createRequest)), + + async function ProofsController_createRequest(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + body: {"in":"body","name":"body","required":true,"ref":"DidCommProofsCreateRequestOptions"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(ProofsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'createRequest', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/proofs/request-proof', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(ProofsController)), + ...(fetchMiddlewares(ProofsController.prototype.requestProof)), + + async function ProofsController_requestProof(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + body: {"in":"body","name":"body","required":true,"ref":"DidCommProofsSendRequestOptions"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(ProofsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'requestProof', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/proofs/:proofExchangeId/accept-request', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(ProofsController)), + ...(fetchMiddlewares(ProofsController.prototype.acceptRequest)), + + async function ProofsController_acceptRequest(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + proofExchangeId: {"in":"path","name":"proofExchangeId","required":true,"ref":"RecordId"}, + body: {"in":"body","name":"body","required":true,"ref":"DidCommProofsAcceptRequestOptions"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(ProofsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'acceptRequest', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/proofs/:proofExchangeId/accept-presentation', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(ProofsController)), + ...(fetchMiddlewares(ProofsController.prototype.acceptPresentation)), + + async function ProofsController_acceptPresentation(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + proofExchangeId: {"in":"path","name":"proofExchangeId","required":true,"ref":"RecordId"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(ProofsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'acceptPresentation', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.get('/didcomm/out-of-band', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(OutOfBandController)), + ...(fetchMiddlewares(OutOfBandController.prototype.findOutOfBandRecordsByQuery)), + + async function OutOfBandController_findOutOfBandRecordsByQuery(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + invitationId: {"in":"query","name":"invitationId","dataType":"string"}, + role: {"in":"query","name":"role","ref":"OutOfBandRole"}, + state: {"in":"query","name":"state","ref":"OutOfBandState"}, + threadId: {"in":"query","name":"threadId","dataType":"string"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(OutOfBandController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'findOutOfBandRecordsByQuery', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.get('/didcomm/out-of-band/:outOfBandId', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(OutOfBandController)), + ...(fetchMiddlewares(OutOfBandController.prototype.getOutOfBandRecordById)), + + async function OutOfBandController_getOutOfBandRecordById(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + outOfBandId: {"in":"path","name":"outOfBandId","required":true,"ref":"RecordId"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(OutOfBandController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'getOutOfBandRecordById', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/out-of-band/create-invitation', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(OutOfBandController)), + ...(fetchMiddlewares(OutOfBandController.prototype.createInvitation)), + + async function OutOfBandController_createInvitation(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + body: {"in":"body","name":"body","ref":"DidCommOutOfBandCreateInvitationOptions"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(OutOfBandController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'createInvitation', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/out-of-band/create-legacy-invitation', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(OutOfBandController)), + ...(fetchMiddlewares(OutOfBandController.prototype.createLegacyInvitation)), + + async function OutOfBandController_createLegacyInvitation(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + body: {"in":"body","name":"body","ref":"DidCommOutOfBandCreateLegacyConnectionInvitationOptions"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(OutOfBandController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'createLegacyInvitation', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/out-of-band/create-legacy-connectionless-invitation', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(OutOfBandController)), + ...(fetchMiddlewares(OutOfBandController.prototype.createLegacyConnectionlessInvitation)), + + async function OutOfBandController_createLegacyConnectionlessInvitation(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + config: {"in":"body","name":"config","required":true,"ref":"DidCommOutOfBandCreateLegacyConnectionlessInvitationOptions"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(OutOfBandController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'createLegacyConnectionlessInvitation', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/out-of-band/receive-invitation', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(OutOfBandController)), + ...(fetchMiddlewares(OutOfBandController.prototype.receiveInvitation)), + + async function OutOfBandController_receiveInvitation(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + body: {"in":"body","name":"body","required":true,"ref":"DidCommOutOfBandReceiveInvitationOptions"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(OutOfBandController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'receiveInvitation', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/out-of-band/:outOfBandId/accept-invitation', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(OutOfBandController)), + ...(fetchMiddlewares(OutOfBandController.prototype.acceptInvitation)), + + async function OutOfBandController_acceptInvitation(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + outOfBandId: {"in":"path","name":"outOfBandId","required":true,"ref":"RecordId"}, + acceptInvitationConfig: {"in":"body","name":"acceptInvitationConfig","required":true,"ref":"DidCommOutOfBandAcceptInvitationOptions"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(OutOfBandController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'acceptInvitation', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.delete('/didcomm/out-of-band/:outOfBandId', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(OutOfBandController)), + ...(fetchMiddlewares(OutOfBandController.prototype.deleteOutOfBandRecord)), + + async function OutOfBandController_deleteOutOfBandRecord(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + outOfBandId: {"in":"path","name":"outOfBandId","required":true,"ref":"RecordId"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(OutOfBandController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'deleteOutOfBandRecord', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.get('/didcomm/credentials', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(CredentialsController)), + ...(fetchMiddlewares(CredentialsController.prototype.findCredentialsByQuery)), + + async function CredentialsController_findCredentialsByQuery(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + threadId: {"in":"query","name":"threadId","ref":"ThreadId"}, + parentThreadId: {"in":"query","name":"parentThreadId","ref":"ThreadId"}, + connectionId: {"in":"query","name":"connectionId","ref":"RecordId"}, + state: {"in":"query","name":"state","ref":"CredentialState"}, + role: {"in":"query","name":"role","ref":"CredentialRole"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(CredentialsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'findCredentialsByQuery', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.get('/didcomm/credentials/:credentialExchangeId', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(CredentialsController)), + ...(fetchMiddlewares(CredentialsController.prototype.getCredentialById)), + + async function CredentialsController_getCredentialById(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + credentialExchangeId: {"in":"path","name":"credentialExchangeId","required":true,"ref":"RecordId"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(CredentialsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'getCredentialById', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.delete('/didcomm/credentials/:credentialExchangeId', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(CredentialsController)), + ...(fetchMiddlewares(CredentialsController.prototype.deleteCredential)), + + async function CredentialsController_deleteCredential(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + credentialExchangeId: {"in":"path","name":"credentialExchangeId","required":true,"ref":"RecordId"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(CredentialsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'deleteCredential', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/credentials/propose-credential', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(CredentialsController)), + ...(fetchMiddlewares(CredentialsController.prototype.proposeCredential)), + + async function CredentialsController_proposeCredential(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + options: {"in":"body","name":"options","required":true,"ref":"ProposeCredentialOptions"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(CredentialsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'proposeCredential', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/credentials/:credentialExchangeId/accept-proposal', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(CredentialsController)), + ...(fetchMiddlewares(CredentialsController.prototype.acceptProposal)), + + async function CredentialsController_acceptProposal(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + credentialExchangeId: {"in":"path","name":"credentialExchangeId","required":true,"ref":"RecordId"}, + options: {"in":"body","name":"options","ref":"AcceptCredentialProposalOptions"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(CredentialsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'acceptProposal', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/credentials/create-offer', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(CredentialsController)), + ...(fetchMiddlewares(CredentialsController.prototype.createOffer)), + + async function CredentialsController_createOffer(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + options: {"in":"body","name":"options","required":true,"ref":"CreateOfferOptions"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(CredentialsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'createOffer', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/credentials/offer-credential', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(CredentialsController)), + ...(fetchMiddlewares(CredentialsController.prototype.offerCredential)), + + async function CredentialsController_offerCredential(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + options: {"in":"body","name":"options","required":true,"ref":"OfferCredentialOptions"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(CredentialsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'offerCredential', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/credentials/:credentialExchangeId/accept-offer', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(CredentialsController)), + ...(fetchMiddlewares(CredentialsController.prototype.acceptOffer)), + + async function CredentialsController_acceptOffer(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + credentialExchangeId: {"in":"path","name":"credentialExchangeId","required":true,"ref":"RecordId"}, + options: {"in":"body","name":"options","ref":"AcceptCredentialOfferOptions"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(CredentialsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'acceptOffer', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/credentials/:credentialExchangeId/accept-request', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(CredentialsController)), + ...(fetchMiddlewares(CredentialsController.prototype.acceptRequest)), + + async function CredentialsController_acceptRequest(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + credentialExchangeId: {"in":"path","name":"credentialExchangeId","required":true,"ref":"RecordId"}, + options: {"in":"body","name":"options","ref":"AcceptCredentialRequestOptions"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(CredentialsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'acceptRequest', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/credentials/:credentialExchangeId/accept-credential', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(CredentialsController)), + ...(fetchMiddlewares(CredentialsController.prototype.acceptCredential)), + + async function CredentialsController_acceptCredential(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + credentialExchangeId: {"in":"path","name":"credentialExchangeId","required":true,"ref":"RecordId"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(CredentialsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'acceptCredential', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.get('/didcomm/connections', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(ConnectionsController)), + ...(fetchMiddlewares(ConnectionsController.prototype.findConnectionsByQuery)), + + async function ConnectionsController_findConnectionsByQuery(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + outOfBandId: {"in":"query","name":"outOfBandId","ref":"RecordId"}, + alias: {"in":"query","name":"alias","dataType":"string"}, + state: {"in":"query","name":"state","ref":"DidExchangeState"}, + did: {"in":"query","name":"did","ref":"Did"}, + theirDid: {"in":"query","name":"theirDid","ref":"Did"}, + theirLabel: {"in":"query","name":"theirLabel","dataType":"string"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(ConnectionsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'findConnectionsByQuery', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.get('/didcomm/connections/:connectionId', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(ConnectionsController)), + ...(fetchMiddlewares(ConnectionsController.prototype.getConnectionById)), + + async function ConnectionsController_getConnectionById(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(ConnectionsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'getConnectionById', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.delete('/didcomm/connections/:connectionId', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(ConnectionsController)), + ...(fetchMiddlewares(ConnectionsController.prototype.deleteConnection)), + + async function ConnectionsController_deleteConnection(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(ConnectionsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'deleteConnection', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/connections/:connectionId/accept-request', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(ConnectionsController)), + ...(fetchMiddlewares(ConnectionsController.prototype.acceptRequest)), + + async function ConnectionsController_acceptRequest(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(ConnectionsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'acceptRequest', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/connections/:connectionId/accept-response', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(ConnectionsController)), + ...(fetchMiddlewares(ConnectionsController.prototype.acceptResponse)), + + async function ConnectionsController_acceptResponse(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(ConnectionsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'acceptResponse', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.get('/didcomm/basic-messages', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(DidCommBasicMessagesController)), + ...(fetchMiddlewares(DidCommBasicMessagesController.prototype.findBasicMessagesByQuery)), + + async function DidCommBasicMessagesController_findBasicMessagesByQuery(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + connectionId: {"in":"query","name":"connectionId","ref":"RecordId"}, + role: {"in":"query","name":"role","ref":"BasicMessageRole"}, + threadId: {"in":"query","name":"threadId","ref":"ThreadId"}, + parentThreadId: {"in":"query","name":"parentThreadId","ref":"ThreadId"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(DidCommBasicMessagesController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'findBasicMessagesByQuery', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/didcomm/basic-messages/send', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(DidCommBasicMessagesController)), + ...(fetchMiddlewares(DidCommBasicMessagesController.prototype.sendMessage)), + + async function DidCommBasicMessagesController_sendMessage(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + body: {"in":"body","name":"body","required":true,"ref":"DidCommBasicMessagesSendOptions"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(DidCommBasicMessagesController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'sendMessage', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.get('/dids/:did', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(DidController)), + ...(fetchMiddlewares(DidController.prototype.resolveDid)), + + async function DidController_resolveDid(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + did: {"in":"path","name":"did","required":true,"dataType":"string"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(DidController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'resolveDid', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/dids/import', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(DidController)), + ...(fetchMiddlewares(DidController.prototype.importDid)), + + async function DidController_importDid(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + options: {"in":"body","name":"options","required":true,"ref":"DidImportOptions"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(DidController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'importDid', + controller, + response, + next, + validatedArgs, + successStatus: 201, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/dids/create', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(DidController)), + ...(fetchMiddlewares(DidController.prototype.createDid)), + + async function DidController_createDid(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + options: {"in":"body","name":"options","required":true,"ref":"DidCreateOptions"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(DidController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'createDid', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.get('/anoncreds/schemas/:schemaId', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(AnonCredsController)), + ...(fetchMiddlewares(AnonCredsController.prototype.getSchemaById)), + + async function AnonCredsController_getSchemaById(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + schemaId: {"in":"path","name":"schemaId","required":true,"ref":"AnonCredsSchemaId"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(AnonCredsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'getSchemaById', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/anoncreds/schemas', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(AnonCredsController)), + ...(fetchMiddlewares(AnonCredsController.prototype.registerSchema)), + + async function AnonCredsController_registerSchema(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + body: {"in":"body","name":"body","required":true,"ref":"AnonCredsRegisterSchemaBody"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(AnonCredsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'registerSchema', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.get('/anoncreds/credential-definitions/:credentialDefinitionId', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(AnonCredsController)), + ...(fetchMiddlewares(AnonCredsController.prototype.getCredentialDefinitionById)), + + async function AnonCredsController_getCredentialDefinitionById(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + credentialDefinitionId: {"in":"path","name":"credentialDefinitionId","required":true,"ref":"AnonCredsCredentialDefinitionId"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(AnonCredsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'getCredentialDefinitionById', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.post('/anoncreds/credential-definitions', + authenticateMiddleware([{"tenants":["tenant"]}]), + ...(fetchMiddlewares(AnonCredsController)), + ...(fetchMiddlewares(AnonCredsController.prototype.registerCredentialDefinition)), + + async function AnonCredsController_registerCredentialDefinition(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + body: {"in":"body","name":"body","required":true,"ref":"AnonCredsRegisterCredentialDefinitionBody"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(AnonCredsController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'registerCredentialDefinition', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + app.get('/agent', + authenticateMiddleware([{"tenants":["default"]}]), + ...(fetchMiddlewares(AgentController)), + ...(fetchMiddlewares(AgentController.prototype.getAgentInfo)), + + async function AgentController_getAgentInfo(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + request: {"in":"request","name":"request","required":true,"dataType":"object"}, + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get(AgentController); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + + await templateService.apiHandler({ + methodName: 'getAgentInfo', + controller, + response, + next, + validatedArgs, + successStatus: undefined, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + function authenticateMiddleware(security: TsoaRoute.Security[] = []) { + return async function runAuthenticationMiddleware(request: any, response: any, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + // keep track of failed auth attempts so we can hand back the most + // recent one. This behavior was previously existing so preserving it + // here + const failedAttempts: any[] = []; + const pushAndRethrow = (error: any) => { + failedAttempts.push(error); + throw error; + }; + + const secMethodOrPromises: Promise[] = []; + for (const secMethod of security) { + if (Object.keys(secMethod).length > 1) { + const secMethodAndPromises: Promise[] = []; + + for (const name in secMethod) { + secMethodAndPromises.push( + expressAuthenticationRecasted(request, name, secMethod[name], response) + .catch(pushAndRethrow) + ); + } + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + secMethodOrPromises.push(Promise.all(secMethodAndPromises) + .then(users => { return users[0]; })); + } else { + for (const name in secMethod) { + secMethodOrPromises.push( + expressAuthenticationRecasted(request, name, secMethod[name], response) + .catch(pushAndRethrow) + ); + } + } + } + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + try { + request['user'] = await Promise.any(secMethodOrPromises); + + // Response was sent in middleware, abort + if (response.writableEnded) { + return; + } + + next(); + } + catch(err) { + // Show most recent error as response + const error = failedAttempts.pop(); + error.status = error.status || 401; + + // Response was sent in middleware, abort + if (response.writableEnded) { + return; + } + next(error); + } + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + } + } + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +} + +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa \ No newline at end of file diff --git a/packages/rest/src/generated/swagger.json b/packages/rest/src/generated/swagger.json new file mode 100644 index 00000000..36bd01db --- /dev/null +++ b/packages/rest/src/generated/swagger.json @@ -0,0 +1,6739 @@ +{ + "openapi": "3.0.0", + "components": { + "examples": {}, + "headers": {}, + "parameters": {}, + "requestBodies": {}, + "responses": {}, + "schemas": { + "Pick_TenantConfig.Exclude_keyofTenantConfig.walletConfig__": { + "properties": { + "label": { + "type": "string" + }, + "connectionImageUrl": { + "type": "string" + } + }, + "required": [ + "label" + ], + "type": "object", + "description": "From T, pick a set of properties whose keys are in the union K" + }, + "Omit_TenantConfig.walletConfig_": { + "$ref": "#/components/schemas/Pick_TenantConfig.Exclude_keyofTenantConfig.walletConfig__", + "description": "Construct a type with the properties of T except for those in type K." + }, + "TenantApiConfig": { + "$ref": "#/components/schemas/Omit_TenantConfig.walletConfig_" + }, + "RecordId": { + "type": "string", + "example": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e" + }, + "TenantsRecord": { + "properties": { + "id": { + "$ref": "#/components/schemas/RecordId" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "storageVersion": { + "type": "string" + }, + "config": { + "$ref": "#/components/schemas/TenantApiConfig" + } + }, + "required": [ + "id", + "createdAt", + "type", + "storageVersion", + "config" + ], + "type": "object", + "additionalProperties": false + }, + "CreateTenantOptions": { + "properties": { + "config": { + "$ref": "#/components/schemas/Omit_TenantConfig.walletConfig_" + } + }, + "required": [ + "config" + ], + "type": "object", + "additionalProperties": false + }, + "ThreadId": { + "type": "string", + "example": "ea4e5e69-fc04-465a-90d2-9f8ff78aa71d" + }, + "ProofState": { + "description": "Present Proof protocol states as defined in RFC 0037", + "enum": [ + "proposal-sent", + "proposal-received", + "request-sent", + "request-received", + "presentation-sent", + "presentation-received", + "declined", + "abandoned", + "done" + ], + "type": "string" + }, + "ProofRole": { + "enum": [ + "verifier", + "prover" + ], + "type": "string" + }, + "AutoAcceptProof": { + "description": "Typing of the state for auto acceptance", + "enum": [ + "always", + "contentApproved", + "never" + ], + "type": "string" + }, + "DidCommProofsExchangeRecord": { + "properties": { + "id": { + "$ref": "#/components/schemas/RecordId" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "connectionId": { + "$ref": "#/components/schemas/RecordId" + }, + "threadId": { + "$ref": "#/components/schemas/ThreadId" + }, + "parentThreadId": { + "$ref": "#/components/schemas/ThreadId" + }, + "state": { + "$ref": "#/components/schemas/ProofState" + }, + "role": { + "$ref": "#/components/schemas/ProofRole" + }, + "autoAcceptProof": { + "$ref": "#/components/schemas/AutoAcceptProof" + }, + "errorMessage": { + "type": "string" + }, + "protocolVersion": { + "type": "string" + } + }, + "required": [ + "id", + "createdAt", + "type", + "threadId", + "state", + "role", + "protocolVersion" + ], + "type": "object", + "additionalProperties": false + }, + "ProofProtocolVersion": { + "type": "string", + "enum": [ + "v1", + "v2" + ] + }, + "AnonCredsPresentationPreviewAttribute": { + "properties": { + "name": { + "type": "string" + }, + "credentialDefinitionId": { + "type": "string" + }, + "mimeType": { + "type": "string" + }, + "value": { + "type": "string" + }, + "referent": { + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsPredicateType": { + "type": "string", + "enum": [ + ">=", + ">", + "<=", + "<" + ] + }, + "AnonCredsPresentationPreviewPredicate": { + "properties": { + "name": { + "type": "string" + }, + "credentialDefinitionId": { + "type": "string" + }, + "predicate": { + "$ref": "#/components/schemas/AnonCredsPredicateType" + }, + "threshold": { + "type": "number", + "format": "double" + } + }, + "required": [ + "name", + "credentialDefinitionId", + "predicate", + "threshold" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsNonRevokedInterval": { + "properties": { + "from": { + "type": "number", + "format": "double" + }, + "to": { + "type": "number", + "format": "double" + } + }, + "type": "object", + "additionalProperties": false + }, + "AnonCredsProposeProofFormat": { + "description": "Interface for creating an anoncreds proof proposal.", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "attributes": { + "items": { + "$ref": "#/components/schemas/AnonCredsPresentationPreviewAttribute" + }, + "type": "array" + }, + "predicates": { + "items": { + "$ref": "#/components/schemas/AnonCredsPresentationPreviewPredicate" + }, + "type": "array" + }, + "nonRevokedInterval": { + "$ref": "#/components/schemas/AnonCredsNonRevokedInterval" + } + }, + "type": "object", + "additionalProperties": false + }, + "Pick_ProposeProofOptions.Exclude_keyofProposeProofOptions.proofFormats-or-protocolVersion__": { + "properties": { + "connectionId": { + "type": "string" + }, + "goalCode": { + "type": "string" + }, + "parentThreadId": { + "type": "string" + }, + "autoAcceptProof": { + "$ref": "#/components/schemas/AutoAcceptProof" + }, + "comment": { + "type": "string" + } + }, + "required": [ + "connectionId" + ], + "type": "object", + "description": "From T, pick a set of properties whose keys are in the union K" + }, + "DidCommProofsProposeProofOptions": { + "properties": { + "connectionId": { + "type": "string" + }, + "goalCode": { + "type": "string" + }, + "parentThreadId": { + "type": "string" + }, + "autoAcceptProof": { + "$ref": "#/components/schemas/AutoAcceptProof" + }, + "comment": { + "type": "string" + }, + "protocolVersion": { + "$ref": "#/components/schemas/ProofProtocolVersion" + }, + "proofFormats": { + "properties": { + "anoncreds": { + "$ref": "#/components/schemas/AnonCredsProposeProofFormat" + }, + "indy": { + "$ref": "#/components/schemas/AnonCredsProposeProofFormat" + } + }, + "type": "object" + } + }, + "required": [ + "connectionId", + "protocolVersion", + "proofFormats" + ], + "type": "object", + "additionalProperties": false + }, + "AcceptAnonCredsProposalOptions": { + "properties": {}, + "type": "object", + "additionalProperties": false + }, + "Pick_AcceptProofProposalOptions.Exclude_keyofAcceptProofProposalOptions.proofFormats-or-proofRecordId__": { + "properties": { + "goalCode": { + "type": "string" + }, + "autoAcceptProof": { + "$ref": "#/components/schemas/AutoAcceptProof" + }, + "comment": { + "type": "string" + }, + "willConfirm": { + "type": "boolean", + "default": true + } + }, + "type": "object", + "description": "From T, pick a set of properties whose keys are in the union K" + }, + "DidCommProofsAcceptProposalOptions": { + "properties": { + "goalCode": { + "type": "string" + }, + "autoAcceptProof": { + "$ref": "#/components/schemas/AutoAcceptProof" + }, + "comment": { + "type": "string" + }, + "willConfirm": { + "type": "boolean", + "default": true + }, + "protocolVersion": { + "$ref": "#/components/schemas/ProofProtocolVersion" + }, + "proofFormats": { + "properties": { + "anoncreds": { + "$ref": "#/components/schemas/AcceptAnonCredsProposalOptions" + }, + "indy": { + "$ref": "#/components/schemas/AcceptAnonCredsProposalOptions" + } + }, + "type": "object" + } + }, + "required": [ + "protocolVersion" + ], + "type": "object", + "additionalProperties": false + }, + "PlaintextMessage": { + "properties": { + "@type": { + "type": "string" + }, + "@id": { + "type": "string" + }, + "~thread": { + "properties": { + "pthid": { + "type": "string" + }, + "thid": { + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "@type", + "@id" + ], + "type": "object", + "additionalProperties": {} + }, + "DidCommProofsCreateRequestResponse": { + "properties": { + "message": { + "$ref": "#/components/schemas/PlaintextMessage" + }, + "proofExchange": { + "$ref": "#/components/schemas/DidCommProofsExchangeRecord" + } + }, + "required": [ + "message", + "proofExchange" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsProofRequestRestrictionOptions": { + "properties": { + "schema_id": { + "type": "string" + }, + "schema_issuer_id": { + "type": "string" + }, + "schema_name": { + "type": "string" + }, + "schema_version": { + "type": "string" + }, + "issuer_id": { + "type": "string" + }, + "cred_def_id": { + "type": "string" + }, + "rev_reg_id": { + "type": "string" + }, + "schema_issuer_did": { + "type": "string" + }, + "issuer_did": { + "type": "string" + }, + "attributeValues": { + "properties": {}, + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "attributeMarkers": { + "properties": {}, + "additionalProperties": { + "type": "boolean" + }, + "type": "object" + } + }, + "type": "object", + "additionalProperties": false + }, + "AnonCredsRequestedAttributeOptions": { + "properties": { + "name": { + "type": "string" + }, + "names": { + "items": { + "type": "string" + }, + "type": "array" + }, + "restrictions": { + "items": { + "$ref": "#/components/schemas/AnonCredsProofRequestRestrictionOptions" + }, + "type": "array" + }, + "non_revoked": { + "$ref": "#/components/schemas/AnonCredsNonRevokedInterval" + } + }, + "type": "object", + "additionalProperties": false + }, + "AnonCredsRequestedPredicateOptions": { + "properties": { + "name": { + "type": "string" + }, + "p_type": { + "$ref": "#/components/schemas/AnonCredsPredicateType" + }, + "p_value": { + "type": "number", + "format": "double" + }, + "restrictions": { + "items": { + "$ref": "#/components/schemas/AnonCredsProofRequestRestrictionOptions" + }, + "type": "array" + }, + "non_revoked": { + "$ref": "#/components/schemas/AnonCredsNonRevokedInterval" + } + }, + "required": [ + "name", + "p_type", + "p_value" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsRequestProofFormatOptions": { + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "non_revoked": { + "$ref": "#/components/schemas/AnonCredsNonRevokedInterval" + }, + "requested_attributes": { + "properties": {}, + "additionalProperties": { + "$ref": "#/components/schemas/AnonCredsRequestedAttributeOptions" + }, + "type": "object" + }, + "requested_predicates": { + "properties": {}, + "additionalProperties": { + "$ref": "#/components/schemas/AnonCredsRequestedPredicateOptions" + }, + "type": "object" + } + }, + "required": [ + "name", + "version" + ], + "type": "object", + "additionalProperties": false + }, + "Pick_CreateProofRequestOptions.Exclude_keyofCreateProofRequestOptions.proofFormats-or-protocolVersion__": { + "properties": { + "goalCode": { + "type": "string" + }, + "parentThreadId": { + "type": "string" + }, + "autoAcceptProof": { + "$ref": "#/components/schemas/AutoAcceptProof" + }, + "comment": { + "type": "string" + }, + "willConfirm": { + "type": "boolean", + "default": true + } + }, + "type": "object", + "description": "From T, pick a set of properties whose keys are in the union K" + }, + "DidCommProofsCreateRequestOptions": { + "properties": { + "goalCode": { + "type": "string" + }, + "parentThreadId": { + "type": "string" + }, + "autoAcceptProof": { + "$ref": "#/components/schemas/AutoAcceptProof" + }, + "comment": { + "type": "string" + }, + "willConfirm": { + "type": "boolean", + "default": true + }, + "protocolVersion": { + "$ref": "#/components/schemas/ProofProtocolVersion" + }, + "proofFormats": { + "properties": { + "anoncreds": { + "$ref": "#/components/schemas/AnonCredsRequestProofFormatOptions" + }, + "indy": { + "$ref": "#/components/schemas/AnonCredsRequestProofFormatOptions" + } + }, + "type": "object" + } + }, + "required": [ + "protocolVersion", + "proofFormats" + ], + "type": "object", + "additionalProperties": false + }, + "DidCommProofsSendRequestOptions": { + "properties": { + "goalCode": { + "type": "string" + }, + "parentThreadId": { + "type": "string" + }, + "autoAcceptProof": { + "$ref": "#/components/schemas/AutoAcceptProof" + }, + "comment": { + "type": "string" + }, + "willConfirm": { + "type": "boolean", + "default": true + }, + "protocolVersion": { + "$ref": "#/components/schemas/ProofProtocolVersion" + }, + "proofFormats": { + "properties": { + "anoncreds": { + "$ref": "#/components/schemas/AnonCredsRequestProofFormatOptions" + }, + "indy": { + "$ref": "#/components/schemas/AnonCredsRequestProofFormatOptions" + } + }, + "type": "object" + }, + "connectionId": { + "$ref": "#/components/schemas/RecordId" + } + }, + "required": [ + "protocolVersion", + "proofFormats", + "connectionId" + ], + "type": "object", + "additionalProperties": false + }, + "Record_string.string-or-number_": { + "properties": {}, + "additionalProperties": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number", + "format": "double" + } + ] + }, + "type": "object", + "description": "Construct a type with a set of properties K of type T" + }, + "AnonCredsClaimRecord": { + "$ref": "#/components/schemas/Record_string.string-or-number_" + }, + "AnonCredsCredentialInfo": { + "properties": { + "credentialId": { + "type": "string" + }, + "attributes": { + "$ref": "#/components/schemas/AnonCredsClaimRecord" + }, + "schemaId": { + "type": "string" + }, + "credentialDefinitionId": { + "type": "string" + }, + "revocationRegistryId": { + "type": "string", + "nullable": true + }, + "credentialRevocationId": { + "type": "string", + "nullable": true + }, + "methodName": { + "type": "string" + }, + "linkSecretId": { + "type": "string" + } + }, + "required": [ + "credentialId", + "attributes", + "schemaId", + "credentialDefinitionId", + "revocationRegistryId", + "credentialRevocationId", + "methodName", + "linkSecretId" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsRequestedAttributeMatch": { + "properties": { + "credentialId": { + "type": "string" + }, + "timestamp": { + "type": "number", + "format": "double" + }, + "revealed": { + "type": "boolean" + }, + "credentialInfo": { + "$ref": "#/components/schemas/AnonCredsCredentialInfo" + }, + "revoked": { + "type": "boolean" + } + }, + "required": [ + "credentialId", + "revealed", + "credentialInfo" + ], + "type": "object", + "additionalProperties": false + }, + "Record_string.AnonCredsRequestedAttributeMatch_": { + "properties": {}, + "additionalProperties": { + "$ref": "#/components/schemas/AnonCredsRequestedAttributeMatch" + }, + "type": "object", + "description": "Construct a type with a set of properties K of type T" + }, + "AnonCredsRequestedPredicateMatch": { + "properties": { + "credentialId": { + "type": "string" + }, + "timestamp": { + "type": "number", + "format": "double" + }, + "credentialInfo": { + "$ref": "#/components/schemas/AnonCredsCredentialInfo" + }, + "revoked": { + "type": "boolean" + } + }, + "required": [ + "credentialId", + "credentialInfo" + ], + "type": "object", + "additionalProperties": false + }, + "Record_string.AnonCredsRequestedPredicateMatch_": { + "properties": {}, + "additionalProperties": { + "$ref": "#/components/schemas/AnonCredsRequestedPredicateMatch" + }, + "type": "object", + "description": "Construct a type with a set of properties K of type T" + }, + "Record_string.string_": { + "properties": {}, + "additionalProperties": { + "type": "string" + }, + "type": "object", + "description": "Construct a type with a set of properties K of type T" + }, + "AnonCredsSelectedCredentials": { + "properties": { + "attributes": { + "$ref": "#/components/schemas/Record_string.AnonCredsRequestedAttributeMatch_" + }, + "predicates": { + "$ref": "#/components/schemas/Record_string.AnonCredsRequestedPredicateMatch_" + }, + "selfAttestedAttributes": { + "$ref": "#/components/schemas/Record_string.string_" + } + }, + "required": [ + "attributes", + "predicates", + "selfAttestedAttributes" + ], + "type": "object", + "additionalProperties": false + }, + "Pick_AcceptProofRequestOptions.Exclude_keyofAcceptProofRequestOptions.proofFormats-or-proofRecordId__": { + "properties": { + "goalCode": { + "type": "string" + }, + "autoAcceptProof": { + "$ref": "#/components/schemas/AutoAcceptProof" + }, + "comment": { + "type": "string" + }, + "willConfirm": { + "type": "boolean", + "default": true + }, + "useReturnRoute": { + "type": "boolean", + "description": "whether to enable return routing on the send presentation message. This value only\nhas an effect for connectionless exchanges." + } + }, + "type": "object", + "description": "From T, pick a set of properties whose keys are in the union K" + }, + "DidCommProofsAcceptRequestOptions": { + "properties": { + "goalCode": { + "type": "string" + }, + "autoAcceptProof": { + "$ref": "#/components/schemas/AutoAcceptProof" + }, + "comment": { + "type": "string" + }, + "willConfirm": { + "type": "boolean", + "default": true + }, + "useReturnRoute": { + "type": "boolean", + "description": "whether to enable return routing on the send presentation message. This value only\nhas an effect for connectionless exchanges." + }, + "proofFormats": { + "properties": { + "anoncreds": { + "$ref": "#/components/schemas/AnonCredsSelectedCredentials" + }, + "indy": { + "$ref": "#/components/schemas/AnonCredsSelectedCredentials" + } + }, + "type": "object" + } + }, + "type": "object", + "additionalProperties": false + }, + "OutOfBandRole": { + "enum": [ + "sender", + "receiver" + ], + "type": "string" + }, + "OutOfBandState": { + "enum": [ + "initial", + "await-response", + "prepare-response", + "done" + ], + "type": "string" + }, + "DidCommOutOfBandRecord": { + "properties": { + "id": { + "$ref": "#/components/schemas/RecordId" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "outOfBandInvitation": { + "$ref": "#/components/schemas/PlaintextMessage", + "description": "The out of band invitation" + }, + "role": { + "$ref": "#/components/schemas/OutOfBandRole", + "description": "Our role in the out of band exchange" + }, + "state": { + "$ref": "#/components/schemas/OutOfBandState", + "description": "State of the out of band invitation" + }, + "alias": { + "type": "string", + "description": "Alias for the connection(s) created based on the out of band invitation", + "example": "My Connection" + }, + "reusable": { + "type": "boolean", + "description": "Whether the out of band invitation is reusable", + "example": true + }, + "autoAcceptConnection": { + "type": "boolean", + "description": "Whether to auto accept the out of band invitation.\nIf not defined agent config will be used.", + "example": true + }, + "mediatorId": { + "$ref": "#/components/schemas/RecordId", + "description": "Mediator used for the out of band exchange" + }, + "reuseConnectionId": { + "$ref": "#/components/schemas/RecordId", + "description": "The id of the connection that was reused for the out of band exchange" + } + }, + "required": [ + "id", + "createdAt", + "type", + "outOfBandInvitation", + "role", + "state", + "reusable" + ], + "type": "object", + "additionalProperties": false + }, + "DidCommOutOfBandCreateInvitationResponse": { + "properties": { + "invitation": { + "$ref": "#/components/schemas/PlaintextMessage" + }, + "outOfBandRecord": { + "$ref": "#/components/schemas/DidCommOutOfBandRecord" + }, + "invitationUrl": { + "type": "string" + } + }, + "required": [ + "invitation", + "outOfBandRecord", + "invitationUrl" + ], + "type": "object", + "additionalProperties": false + }, + "HandshakeProtocol": { + "description": "Enum values should be sorted based on order of preference. Values will be\nincluded in this order when creating out of band invitations.", + "enum": [ + "https://didcomm.org/didexchange/1.x", + "https://didcomm.org/connections/1.x" + ], + "type": "string" + }, + "Pick_CreateOutOfBandInvitationConfig.Exclude_keyofCreateOutOfBandInvitationConfig.routing-or-appendedAttachments-or-messages__": { + "properties": { + "label": { + "type": "string" + }, + "goalCode": { + "type": "string" + }, + "alias": { + "type": "string" + }, + "imageUrl": { + "type": "string" + }, + "goal": { + "type": "string" + }, + "handshake": { + "type": "boolean" + }, + "handshakeProtocols": { + "items": { + "$ref": "#/components/schemas/HandshakeProtocol" + }, + "type": "array" + }, + "multiUseInvitation": { + "type": "boolean" + }, + "autoAcceptConnection": { + "type": "boolean" + } + }, + "type": "object", + "description": "From T, pick a set of properties whose keys are in the union K" + }, + "DidCommOutOfBandCreateInvitationOptions": { + "properties": { + "label": { + "type": "string" + }, + "goalCode": { + "type": "string" + }, + "alias": { + "type": "string" + }, + "imageUrl": { + "type": "string" + }, + "goal": { + "type": "string" + }, + "handshake": { + "type": "boolean" + }, + "handshakeProtocols": { + "items": { + "$ref": "#/components/schemas/HandshakeProtocol" + }, + "type": "array" + }, + "multiUseInvitation": { + "type": "boolean" + }, + "autoAcceptConnection": { + "type": "boolean" + }, + "messages": { + "items": { + "$ref": "#/components/schemas/PlaintextMessage" + }, + "type": "array" + } + }, + "type": "object", + "additionalProperties": false + }, + "Pick_CreateLegacyInvitationConfig.Exclude_keyofCreateLegacyInvitationConfig.routing__": { + "properties": { + "label": { + "type": "string" + }, + "alias": { + "type": "string" + }, + "imageUrl": { + "type": "string" + }, + "multiUseInvitation": { + "type": "boolean" + }, + "autoAcceptConnection": { + "type": "boolean" + } + }, + "type": "object", + "description": "From T, pick a set of properties whose keys are in the union K" + }, + "DidCommOutOfBandCreateLegacyConnectionInvitationOptions": { + "properties": { + "label": { + "type": "string" + }, + "alias": { + "type": "string" + }, + "imageUrl": { + "type": "string" + }, + "multiUseInvitation": { + "type": "boolean" + }, + "autoAcceptConnection": { + "type": "boolean" + } + }, + "type": "object", + "additionalProperties": false + }, + "DidCommOutOfBandCreateLegacyConnectionlessInvitationOptions": { + "properties": { + "message": { + "$ref": "#/components/schemas/PlaintextMessage" + }, + "domain": { + "type": "string" + } + }, + "required": [ + "message", + "domain" + ], + "type": "object", + "additionalProperties": false + }, + "Pick_ReceiveOutOfBandInvitationConfig.Exclude_keyofReceiveOutOfBandInvitationConfig.routing__": { + "properties": { + "label": { + "type": "string" + }, + "alias": { + "type": "string" + }, + "imageUrl": { + "type": "string" + }, + "autoAcceptConnection": { + "type": "boolean" + }, + "autoAcceptInvitation": { + "type": "boolean" + }, + "reuseConnection": { + "type": "boolean" + }, + "acceptInvitationTimeoutMs": { + "type": "number", + "format": "double" + }, + "ourDid": { + "type": "string" + } + }, + "type": "object", + "description": "From T, pick a set of properties whose keys are in the union K" + }, + "DidCommOutOfBandReceiveInvitationOptions": { + "properties": { + "label": { + "type": "string" + }, + "alias": { + "type": "string" + }, + "imageUrl": { + "type": "string" + }, + "autoAcceptConnection": { + "type": "boolean" + }, + "autoAcceptInvitation": { + "type": "boolean" + }, + "reuseConnection": { + "type": "boolean" + }, + "acceptInvitationTimeoutMs": { + "type": "number", + "format": "double" + }, + "ourDid": { + "type": "string" + }, + "invitation": { + "anyOf": [ + { + "$ref": "#/components/schemas/PlaintextMessage" + }, + { + "type": "string" + } + ] + } + }, + "required": [ + "invitation" + ], + "type": "object", + "additionalProperties": false + }, + "Did": { + "type": "string" + }, + "DidCommOutOfBandAcceptInvitationOptions": { + "properties": { + "autoAcceptConnection": { + "type": "boolean" + }, + "reuseConnection": { + "type": "boolean" + }, + "label": { + "type": "string" + }, + "alias": { + "type": "string" + }, + "imageUrl": { + "type": "string" + }, + "timeoutMs": { + "type": "number", + "format": "double" + }, + "ourDid": { + "$ref": "#/components/schemas/Did" + } + }, + "type": "object", + "additionalProperties": false + }, + "CredentialState": { + "description": "Issue Credential states as defined in RFC 0036 and RFC 0453", + "enum": [ + "proposal-sent", + "proposal-received", + "offer-sent", + "offer-received", + "declined", + "request-sent", + "request-received", + "credential-issued", + "credential-received", + "done", + "abandoned" + ], + "type": "string" + }, + "CredentialRole": { + "enum": [ + "issuer", + "holder" + ], + "type": "string" + }, + "AutoAcceptCredential": { + "description": "Typing of the state for auto acceptance", + "enum": [ + "always", + "contentApproved", + "never" + ], + "type": "string" + }, + "CredentialRecordBinding": { + "properties": { + "credentialRecordType": { + "type": "string" + }, + "credentialRecordId": { + "type": "string" + } + }, + "required": [ + "credentialRecordType", + "credentialRecordId" + ], + "type": "object", + "additionalProperties": false + }, + "CredentialPreviewAttributeOptions": { + "properties": { + "name": { + "type": "string" + }, + "mimeType": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "type": "object", + "additionalProperties": false + }, + "DidCommCredentialsExchangeRecord": { + "properties": { + "id": { + "$ref": "#/components/schemas/RecordId" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "connectionId": { + "$ref": "#/components/schemas/RecordId" + }, + "threadId": { + "$ref": "#/components/schemas/ThreadId" + }, + "parentThreadId": { + "$ref": "#/components/schemas/ThreadId" + }, + "state": { + "$ref": "#/components/schemas/CredentialState" + }, + "role": { + "$ref": "#/components/schemas/CredentialRole" + }, + "autoAcceptCredential": { + "$ref": "#/components/schemas/AutoAcceptCredential" + }, + "revocationNotification": { + "properties": { + "comment": { + "type": "string" + }, + "revocationDate": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "revocationDate" + ], + "type": "object" + }, + "errorMessage": { + "type": "string" + }, + "protocolVersion": { + "type": "string" + }, + "credentials": { + "items": { + "$ref": "#/components/schemas/CredentialRecordBinding" + }, + "type": "array" + }, + "credentialAttributes": { + "items": { + "$ref": "#/components/schemas/CredentialPreviewAttributeOptions" + }, + "type": "array" + } + }, + "required": [ + "id", + "createdAt", + "type", + "threadId", + "state", + "role", + "protocolVersion", + "credentials" + ], + "type": "object", + "additionalProperties": false + }, + "CredentialProtocolVersion": { + "type": "string", + "enum": [ + "v1", + "v2" + ] + }, + "JsonValue": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number", + "format": "double" + }, + { + "type": "boolean" + }, + { + "$ref": "#/components/schemas/JsonObject" + }, + { + "$ref": "#/components/schemas/JsonArray" + } + ], + "nullable": true + }, + "JsonObject": { + "properties": {}, + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/JsonValue" + } + }, + "JsonArray": { + "items": { + "$ref": "#/components/schemas/JsonValue" + }, + "type": "array" + }, + "Record_string.unknown_": { + "properties": {}, + "additionalProperties": {}, + "type": "object", + "description": "Construct a type with a set of properties K of type T" + }, + "Pick_JwsGeneralFormat.Exclude_keyofJwsGeneralFormat.payload__": { + "properties": { + "header": { + "$ref": "#/components/schemas/Record_string.unknown_", + "description": "unprotected header" + }, + "signature": { + "type": "string", + "description": "Base64url encoded signature" + }, + "protected": { + "type": "string", + "description": "Base64url encoded protected header" + } + }, + "required": [ + "header", + "signature", + "protected" + ], + "type": "object", + "description": "From T, pick a set of properties whose keys are in the union K" + }, + "Omit_JwsGeneralFormat.payload_": { + "$ref": "#/components/schemas/Pick_JwsGeneralFormat.Exclude_keyofJwsGeneralFormat.payload__", + "description": "Construct a type with the properties of T except for those in type K." + }, + "JwsDetachedFormat": { + "$ref": "#/components/schemas/Omit_JwsGeneralFormat.payload_" + }, + "JwsFlattenedDetachedFormat": { + "properties": { + "signatures": { + "items": { + "$ref": "#/components/schemas/JwsDetachedFormat" + }, + "type": "array" + } + }, + "required": [ + "signatures" + ], + "type": "object", + "additionalProperties": false + }, + "AttachmentData": { + "description": "A JSON object that gives access to the actual content of the attachment", + "properties": { + "base64": { + "type": "string", + "description": "Base64-encoded data, when representing arbitrary content inline instead of via links. Optional." + }, + "json": { + "$ref": "#/components/schemas/JsonValue", + "description": "Directly embedded JSON data, when representing content inline instead of via links, and when the content is natively conveyable as JSON. Optional." + }, + "links": { + "items": { + "type": "string" + }, + "type": "array", + "description": "A list of zero or more locations at which the content may be fetched. Optional." + }, + "jws": { + "anyOf": [ + { + "$ref": "#/components/schemas/JwsDetachedFormat" + }, + { + "$ref": "#/components/schemas/JwsFlattenedDetachedFormat" + } + ], + "description": "A JSON Web Signature over the content of the attachment. Optional." + }, + "sha256": { + "type": "string", + "description": "The hash of the content. Optional." + } + }, + "type": "object", + "additionalProperties": false + }, + "Attachment": { + "description": "Represents DIDComm attachment\nhttps://github.com/hyperledger/aries-rfcs/blob/master/concepts/0017-attachments/README.md", + "properties": { + "id": { + "type": "string" + }, + "description": { + "type": "string", + "description": "An optional human-readable description of the content." + }, + "filename": { + "type": "string", + "description": "A hint about the name that might be used if this attachment is persisted as a file. It is not required, and need not be unique. If this field is present and mime-type is not, the extension on the filename may be used to infer a MIME type." + }, + "mimeType": { + "type": "string", + "description": "Describes the MIME type of the attached content. Optional but recommended." + }, + "lastmodTime": { + "type": "string", + "format": "date-time", + "description": "A hint about when the content in this attachment was last modified." + }, + "byteCount": { + "type": "number", + "format": "double", + "description": "Optional, and mostly relevant when content is included by reference instead of by value. Lets the receiver guess how expensive it will be, in time, bandwidth, and storage, to fully fetch the attachment." + }, + "data": { + "$ref": "#/components/schemas/AttachmentData" + } + }, + "required": [ + "id", + "data" + ], + "type": "object", + "additionalProperties": false + }, + "LinkedAttachment": { + "properties": { + "attributeName": { + "type": "string", + "description": "The name that will be used to generate the linked credential" + }, + "attachment": { + "$ref": "#/components/schemas/Attachment", + "description": "The attachment that needs to be linked to the credential" + } + }, + "required": [ + "attributeName", + "attachment" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsProposeCredentialFormat": { + "description": "This defines the module payload for calling CredentialsApi.createProposal\nor CredentialsApi.negotiateOffer", + "properties": { + "schemaIssuerId": { + "type": "string" + }, + "schemaId": { + "type": "string" + }, + "schemaName": { + "type": "string" + }, + "schemaVersion": { + "type": "string" + }, + "credentialDefinitionId": { + "type": "string" + }, + "issuerId": { + "type": "string" + }, + "attributes": { + "items": { + "$ref": "#/components/schemas/CredentialPreviewAttributeOptions" + }, + "type": "array" + }, + "linkedAttachments": { + "items": { + "$ref": "#/components/schemas/LinkedAttachment" + }, + "type": "array" + }, + "schemaIssuerDid": { + "type": "string" + }, + "issuerDid": { + "type": "string" + } + }, + "type": "object", + "additionalProperties": false + }, + "Pick_AnonCredsProposeCredentialFormat.Exclude_keyofAnonCredsProposeCredentialFormat.schemaIssuerId-or-issuerId__": { + "properties": { + "schemaId": { + "type": "string" + }, + "schemaName": { + "type": "string" + }, + "schemaVersion": { + "type": "string" + }, + "credentialDefinitionId": { + "type": "string" + }, + "attributes": { + "items": { + "$ref": "#/components/schemas/CredentialPreviewAttributeOptions" + }, + "type": "array" + }, + "linkedAttachments": { + "items": { + "$ref": "#/components/schemas/LinkedAttachment" + }, + "type": "array" + }, + "schemaIssuerDid": { + "type": "string" + }, + "issuerDid": { + "type": "string" + } + }, + "type": "object", + "description": "From T, pick a set of properties whose keys are in the union K" + }, + "Omit_AnonCredsProposeCredentialFormat.schemaIssuerId-or-issuerId_": { + "$ref": "#/components/schemas/Pick_AnonCredsProposeCredentialFormat.Exclude_keyofAnonCredsProposeCredentialFormat.schemaIssuerId-or-issuerId__", + "description": "Construct a type with the properties of T except for those in type K." + }, + "LegacyIndyProposeCredentialFormat": { + "$ref": "#/components/schemas/Omit_AnonCredsProposeCredentialFormat.schemaIssuerId-or-issuerId_", + "description": "This defines the module payload for calling CredentialsApi.createProposal\nor CredentialsApi.negotiateOffer\n\nNOTE: This doesn't include the `issuerId` and `schemaIssuerId` properties that are present in the newer format." + }, + "ProposeCredentialOptions": { + "properties": { + "protocolVersion": { + "$ref": "#/components/schemas/CredentialProtocolVersion" + }, + "credentialFormats": { + "properties": { + "indy": { + "anyOf": [ + { + "$ref": "#/components/schemas/AnonCredsProposeCredentialFormat" + }, + { + "$ref": "#/components/schemas/LegacyIndyProposeCredentialFormat" + } + ] + }, + "anoncreds": { + "anyOf": [ + { + "$ref": "#/components/schemas/AnonCredsProposeCredentialFormat" + }, + { + "$ref": "#/components/schemas/LegacyIndyProposeCredentialFormat" + } + ] + } + }, + "type": "object" + }, + "autoAcceptCredential": { + "$ref": "#/components/schemas/AutoAcceptCredential" + }, + "comment": { + "type": "string" + }, + "connectionId": { + "$ref": "#/components/schemas/RecordId" + } + }, + "required": [ + "protocolVersion", + "credentialFormats", + "connectionId" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsAcceptProposalFormat": { + "description": "This defines the module payload for calling CredentialsApi.acceptProposal", + "properties": { + "credentialDefinitionId": { + "type": "string" + }, + "revocationRegistryDefinitionId": { + "type": "string" + }, + "revocationRegistryIndex": { + "type": "number", + "format": "double" + }, + "attributes": { + "items": { + "$ref": "#/components/schemas/CredentialPreviewAttributeOptions" + }, + "type": "array" + }, + "linkedAttachments": { + "items": { + "$ref": "#/components/schemas/LinkedAttachment" + }, + "type": "array" + } + }, + "type": "object", + "additionalProperties": false + }, + "AcceptCredentialProposalOptions": { + "properties": { + "credentialFormats": { + "properties": { + "indy": { + "$ref": "#/components/schemas/AnonCredsAcceptProposalFormat" + }, + "anoncreds": { + "$ref": "#/components/schemas/AnonCredsAcceptProposalFormat" + } + }, + "type": "object" + }, + "autoAcceptCredential": { + "$ref": "#/components/schemas/AutoAcceptCredential" + }, + "comment": { + "type": "string" + } + }, + "type": "object", + "additionalProperties": false + }, + "DidCommCredentialsCreateOfferResponse": { + "properties": { + "message": { + "$ref": "#/components/schemas/PlaintextMessage" + }, + "credentialExchange": { + "$ref": "#/components/schemas/DidCommCredentialsExchangeRecord" + } + }, + "required": [ + "message", + "credentialExchange" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsOfferCredentialFormat": { + "description": "This defines the module payload for calling CredentialsApi.offerCredential\nor CredentialsApi.negotiateProposal", + "properties": { + "credentialDefinitionId": { + "type": "string" + }, + "revocationRegistryDefinitionId": { + "type": "string" + }, + "revocationRegistryIndex": { + "type": "number", + "format": "double" + }, + "attributes": { + "items": { + "$ref": "#/components/schemas/CredentialPreviewAttributeOptions" + }, + "type": "array" + }, + "linkedAttachments": { + "items": { + "$ref": "#/components/schemas/LinkedAttachment" + }, + "type": "array" + } + }, + "required": [ + "credentialDefinitionId", + "attributes" + ], + "type": "object", + "additionalProperties": false + }, + "CredentialFormatPayload_CredentialFormats.createOffer_": { + "properties": { + "indy": { + "$ref": "#/components/schemas/AnonCredsOfferCredentialFormat" + }, + "anoncreds": { + "$ref": "#/components/schemas/AnonCredsOfferCredentialFormat" + } + }, + "type": "object", + "description": "Get the payload for a specific method from a list of CredentialFormat interfaces and a method" + }, + "CreateOfferOptions": { + "properties": { + "protocolVersion": { + "$ref": "#/components/schemas/CredentialProtocolVersion" + }, + "credentialFormats": { + "$ref": "#/components/schemas/CredentialFormatPayload_CredentialFormats.createOffer_" + }, + "autoAcceptCredential": { + "$ref": "#/components/schemas/AutoAcceptCredential" + }, + "comment": { + "type": "string" + } + }, + "required": [ + "protocolVersion", + "credentialFormats" + ], + "type": "object", + "additionalProperties": false + }, + "OfferCredentialOptions": { + "properties": { + "protocolVersion": { + "$ref": "#/components/schemas/CredentialProtocolVersion" + }, + "credentialFormats": { + "$ref": "#/components/schemas/CredentialFormatPayload_CredentialFormats.createOffer_" + }, + "autoAcceptCredential": { + "$ref": "#/components/schemas/AutoAcceptCredential" + }, + "comment": { + "type": "string" + }, + "connectionId": { + "$ref": "#/components/schemas/RecordId" + } + }, + "required": [ + "protocolVersion", + "credentialFormats", + "connectionId" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsAcceptOfferFormat": { + "description": "This defines the module payload for calling CredentialsApi.acceptOffer. No options are available for this\nmethod, so it's an empty object", + "properties": { + "linkSecretId": { + "type": "string" + } + }, + "type": "object", + "additionalProperties": false + }, + "CredentialFormatPayload_CredentialFormats.acceptOffer_": { + "properties": { + "indy": { + "$ref": "#/components/schemas/AnonCredsAcceptOfferFormat" + }, + "anoncreds": { + "$ref": "#/components/schemas/AnonCredsAcceptOfferFormat" + } + }, + "type": "object", + "description": "Get the payload for a specific method from a list of CredentialFormat interfaces and a method" + }, + "AcceptCredentialOfferOptions": { + "properties": { + "credentialFormats": { + "$ref": "#/components/schemas/CredentialFormatPayload_CredentialFormats.acceptOffer_" + }, + "autoAcceptCredential": { + "$ref": "#/components/schemas/AutoAcceptCredential" + }, + "comment": { + "type": "string" + } + }, + "type": "object", + "additionalProperties": false + }, + "Record_string.never_": { + "properties": {}, + "type": "object", + "description": "Construct a type with a set of properties K of type T" + }, + "AnonCredsAcceptRequestFormat": { + "$ref": "#/components/schemas/Record_string.never_", + "description": "This defines the module payload for calling CredentialsApi.acceptRequest. No options are available for this\nmethod, so it's an empty object" + }, + "CredentialFormatPayload_CredentialFormats.acceptRequest_": { + "properties": { + "indy": { + "$ref": "#/components/schemas/AnonCredsAcceptRequestFormat" + }, + "anoncreds": { + "$ref": "#/components/schemas/AnonCredsAcceptRequestFormat" + } + }, + "type": "object", + "description": "Get the payload for a specific method from a list of CredentialFormat interfaces and a method" + }, + "AcceptCredentialRequestOptions": { + "properties": { + "credentialFormats": { + "$ref": "#/components/schemas/CredentialFormatPayload_CredentialFormats.acceptRequest_" + }, + "autoAcceptCredential": { + "$ref": "#/components/schemas/AutoAcceptCredential" + }, + "comment": { + "type": "string" + } + }, + "type": "object", + "additionalProperties": false + }, + "DidExchangeState": { + "description": "Connection states as defined in RFC 0023.", + "enum": [ + "start", + "invitation-sent", + "invitation-received", + "request-sent", + "request-received", + "response-sent", + "response-received", + "abandoned", + "completed" + ], + "type": "string" + }, + "DidExchangeRole": { + "enum": [ + "requester", + "responder" + ], + "type": "string" + }, + "ConnectionType": { + "enum": [ + "mediator" + ], + "type": "string" + }, + "DidCommConnectionsRecord": { + "properties": { + "id": { + "$ref": "#/components/schemas/RecordId" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "did": { + "$ref": "#/components/schemas/Did" + }, + "theirDid": { + "$ref": "#/components/schemas/Did" + }, + "theirLabel": { + "type": "string" + }, + "state": { + "$ref": "#/components/schemas/DidExchangeState" + }, + "role": { + "$ref": "#/components/schemas/DidExchangeRole" + }, + "alias": { + "type": "string" + }, + "autoAcceptConnection": { + "type": "boolean" + }, + "threadId": { + "$ref": "#/components/schemas/ThreadId" + }, + "imageUrl": { + "type": "string" + }, + "mediatorId": { + "type": "string" + }, + "errorMessage": { + "type": "string" + }, + "protocol": { + "$ref": "#/components/schemas/HandshakeProtocol" + }, + "outOfBandId": { + "type": "string" + }, + "invitationDid": { + "$ref": "#/components/schemas/Did" + }, + "connectionTypes": { + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/ConnectionType" + }, + { + "type": "string" + } + ] + }, + "type": "array" + }, + "previousDids": { + "items": { + "$ref": "#/components/schemas/Did" + }, + "type": "array" + }, + "previousTheirDids": { + "items": { + "$ref": "#/components/schemas/Did" + }, + "type": "array" + } + }, + "required": [ + "id", + "createdAt", + "type", + "state", + "role" + ], + "type": "object", + "additionalProperties": false + }, + "BasicMessageRole": { + "enum": [ + "sender", + "receiver" + ], + "type": "string" + }, + "DidCommBasicMessagesRecord": { + "properties": { + "id": { + "$ref": "#/components/schemas/RecordId" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "connectionId": { + "$ref": "#/components/schemas/RecordId" + }, + "role": { + "$ref": "#/components/schemas/BasicMessageRole" + }, + "content": { + "type": "string" + }, + "sentTime": { + "type": "string" + }, + "threadId": { + "$ref": "#/components/schemas/ThreadId" + }, + "parentThreadId": { + "$ref": "#/components/schemas/ThreadId" + } + }, + "required": [ + "id", + "createdAt", + "type", + "connectionId", + "role", + "content", + "sentTime" + ], + "type": "object", + "additionalProperties": false + }, + "DidCommBasicMessagesSendOptions": { + "properties": { + "connectionId": { + "$ref": "#/components/schemas/RecordId" + }, + "content": { + "type": "string" + }, + "parentThreadId": { + "$ref": "#/components/schemas/ThreadId" + } + }, + "required": [ + "connectionId", + "content" + ], + "type": "object", + "additionalProperties": false + }, + "Record_string.any_": { + "properties": {}, + "additionalProperties": {}, + "type": "object", + "description": "Construct a type with a set of properties K of type T" + }, + "DidResolutionMetadata": { + "properties": { + "contentType": { + "type": "string" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "string", + "enum": [ + "invalidDid", + "notFound", + "representationNotSupported", + "unsupportedDidMethod" + ] + } + ] + }, + "message": { + "type": "string" + }, + "servedFromCache": { + "type": "boolean" + } + }, + "type": "object", + "additionalProperties": false + }, + "JsonWebKey": { + "description": "Encapsulates a JSON web key type that includes only the public properties that\r\ncan be used in DID documents.\r\n\r\nThe private properties are intentionally omitted to discourage the use\r\n(and accidental disclosure) of private keys in DID documents.", + "properties": { + "alg": { + "type": "string" + }, + "crv": { + "type": "string" + }, + "e": { + "type": "string" + }, + "ext": { + "type": "boolean" + }, + "key_ops": { + "items": { + "type": "string" + }, + "type": "array" + }, + "kid": { + "type": "string" + }, + "kty": { + "type": "string" + }, + "n": { + "type": "string" + }, + "use": { + "type": "string" + }, + "x": { + "type": "string" + }, + "y": { + "type": "string" + } + }, + "required": [ + "kty" + ], + "type": "object", + "additionalProperties": false + }, + "VerificationMethod": { + "description": "Represents the properties of a Verification Method listed in a DID document.\r\n\r\nThis data type includes public key representations that are no longer present in the spec but are still used by\r\nseveral DID methods / resolvers and kept for backward compatibility.", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string" + }, + "controller": { + "type": "string" + }, + "publicKeyBase58": { + "type": "string" + }, + "publicKeyBase64": { + "type": "string" + }, + "publicKeyJwk": { + "$ref": "#/components/schemas/JsonWebKey" + }, + "publicKeyHex": { + "type": "string" + }, + "publicKeyMultibase": { + "type": "string" + }, + "blockchainAccountId": { + "type": "string" + }, + "ethereumAddress": { + "type": "string" + }, + "conditionOr": { + "items": { + "$ref": "#/components/schemas/VerificationMethod" + }, + "type": "array" + }, + "conditionAnd": { + "items": { + "$ref": "#/components/schemas/VerificationMethod" + }, + "type": "array" + }, + "threshold": { + "type": "number", + "format": "double" + }, + "conditionThreshold": { + "items": { + "$ref": "#/components/schemas/VerificationMethod" + }, + "type": "array" + }, + "conditionWeightedThreshold": { + "items": { + "$ref": "#/components/schemas/ConditionWeightedThreshold" + }, + "type": "array" + }, + "conditionDelegated": { + "type": "string" + }, + "relationshipParent": { + "items": { + "type": "string" + }, + "type": "array" + }, + "relationshipChild": { + "items": { + "type": "string" + }, + "type": "array" + }, + "relationshipSibling": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "id", + "type", + "controller" + ], + "type": "object", + "additionalProperties": false + }, + "ConditionWeightedThreshold": { + "properties": { + "condition": { + "$ref": "#/components/schemas/VerificationMethod" + }, + "weight": { + "type": "number", + "format": "double" + } + }, + "required": [ + "condition", + "weight" + ], + "type": "object", + "additionalProperties": false + }, + "ServiceEndpoint": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/Record_string.any_" + } + ], + "description": "Represents an endpoint of a Service entry in a DID document." + }, + "Service": { + "description": "Represents a Service entry in a {@link https://www.w3.org/TR/did-core/#did-document-properties DID document}.", + "properties": { + "id": { + "type": "string" + }, + "type": { + "type": "string" + }, + "serviceEndpoint": { + "anyOf": [ + { + "$ref": "#/components/schemas/ServiceEndpoint" + }, + { + "items": { + "$ref": "#/components/schemas/ServiceEndpoint" + }, + "type": "array" + } + ] + } + }, + "required": [ + "id", + "type", + "serviceEndpoint" + ], + "type": "object", + "additionalProperties": {} + }, + "DIDDocument": { + "allOf": [ + { + "properties": { + "publicKey": { + "items": { + "$ref": "#/components/schemas/VerificationMethod" + }, + "type": "array", + "deprecated": true + }, + "service": { + "items": { + "$ref": "#/components/schemas/Service" + }, + "type": "array" + }, + "verificationMethod": { + "items": { + "$ref": "#/components/schemas/VerificationMethod" + }, + "type": "array" + }, + "controller": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "alsoKnownAs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "@context": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string", + "enum": [ + "https://www.w3.org/ns/did/v1" + ] + } + ] + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "properties": { + "authentication": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/VerificationMethod" + } + ] + }, + "type": "array" + }, + "assertionMethod": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/VerificationMethod" + } + ] + }, + "type": "array" + }, + "keyAgreement": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/VerificationMethod" + } + ] + }, + "type": "array" + }, + "capabilityInvocation": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/VerificationMethod" + } + ] + }, + "type": "array" + }, + "capabilityDelegation": { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/VerificationMethod" + } + ] + }, + "type": "array" + } + }, + "type": "object" + } + ], + "description": "Represents a DID document." + }, + "DidDocumentJson": { + "$ref": "#/components/schemas/DIDDocument", + "example": { + "@context": [ + "https://w3id.org/did/v1", + "https://w3id.org/security/suites/ed25519-2018/v1", + "https://w3id.org/security/suites/x25519-2019/v1" + ], + "id": "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK", + "verificationMethod": [ + { + "id": "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK#z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK", + "type": "Ed25519VerificationKey2018", + "controller": "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK", + "publicKeyBase58": "48GdbJyVULjHDaBNS6ct9oAGtckZUS5v8asrPzvZ7R1w" + } + ], + "authentication": [ + "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK#z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK" + ], + "assertionMethod": [ + "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK#z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK" + ], + "keyAgreement": [ + { + "id": "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK#z6LSj72tK8brWgZja8NLRwPigth2T9QRiG1uH9oKZuKjdh9p", + "type": "X25519KeyAgreementKey2019", + "controller": "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK", + "publicKeyBase58": "8RrinpnzRDqzUjzZuHsmNJUYbzsK1eqkQB5e5SgCvKP4" + } + ], + "capabilityInvocation": [ + "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK#z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK" + ], + "capabilityDelegation": [ + "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK#z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK" + ] + } + }, + "DIDDocumentMetadata": { + "description": "Represents metadata about the DID document resulting from a {@link Resolvable.resolve} operation.", + "properties": { + "created": { + "type": "string" + }, + "updated": { + "type": "string" + }, + "deactivated": { + "type": "boolean" + }, + "versionId": { + "type": "string" + }, + "nextUpdate": { + "type": "string" + }, + "nextVersionId": { + "type": "string" + }, + "equivalentId": { + "type": "string" + }, + "canonicalId": { + "type": "string" + } + }, + "type": "object", + "additionalProperties": false + }, + "DidDocumentMetadata": { + "$ref": "#/components/schemas/DIDDocumentMetadata" + }, + "DidResolveSuccessResponse": { + "properties": { + "didResolutionMetadata": { + "$ref": "#/components/schemas/DidResolutionMetadata" + }, + "didDocument": { + "$ref": "#/components/schemas/DidDocumentJson" + }, + "didDocumentMetadata": { + "$ref": "#/components/schemas/DidDocumentMetadata" + } + }, + "required": [ + "didResolutionMetadata", + "didDocument", + "didDocumentMetadata" + ], + "type": "object", + "additionalProperties": false + }, + "DidResolveFailedResponse": { + "properties": { + "didResolutionMetadata": { + "allOf": [ + { + "$ref": "#/components/schemas/DidResolutionMetadata" + }, + { + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "error", + "message" + ], + "type": "object" + } + ] + }, + "didDocument": { + "allOf": [ + { + "$ref": "#/components/schemas/DidDocumentJson" + } + ], + "nullable": true + }, + "didDocumentMetadata": { + "$ref": "#/components/schemas/DidDocumentMetadata" + } + }, + "required": [ + "didResolutionMetadata", + "didDocument", + "didDocumentMetadata" + ], + "type": "object", + "additionalProperties": false + }, + "KeyType": { + "enum": [ + "ed25519", + "bls12381g1g2", + "bls12381g1", + "bls12381g2", + "x25519", + "p256", + "p384", + "p521", + "k256" + ], + "type": "string" + }, + "PrivateKey": { + "properties": { + "keyType": { + "$ref": "#/components/schemas/KeyType" + }, + "privateKeyBase58": { + "type": "string", + "description": "Base58 encoded private key" + } + }, + "required": [ + "keyType", + "privateKeyBase58" + ], + "type": "object", + "additionalProperties": false + }, + "DidImportOptions": { + "properties": { + "did": { + "$ref": "#/components/schemas/Did" + }, + "didDocument": { + "$ref": "#/components/schemas/DidDocumentJson" + }, + "privateKeys": { + "items": { + "$ref": "#/components/schemas/PrivateKey" + }, + "type": "array", + "description": "Private keys to import as part of the did document" + }, + "overwrite": { + "type": "boolean", + "description": "Whether to overwrite the existing did document and private keys" + } + }, + "required": [ + "did" + ], + "type": "object", + "additionalProperties": false + }, + "AnyJsonObject": { + "description": "JSON object that can contain any key-value pairs", + "properties": {}, + "type": "object", + "additionalProperties": false + }, + "DidCreateBaseResponse__state-finished--did-Did--didDocument-DidDocumentJson--secret_63_-AnyJsonObject__": { + "properties": { + "jobId": { + "type": "string" + }, + "didRegistrationMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "didDocumentMetadata": { + "$ref": "#/components/schemas/DidResolutionMetadata" + }, + "didState": { + "properties": { + "secret": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "didDocument": { + "$ref": "#/components/schemas/DidDocumentJson" + }, + "did": { + "$ref": "#/components/schemas/Did" + }, + "state": { + "type": "string", + "enum": [ + "finished" + ], + "nullable": false + } + }, + "required": [ + "didDocument", + "did", + "state" + ], + "type": "object" + } + }, + "required": [ + "didRegistrationMetadata", + "didDocumentMetadata", + "didState" + ], + "type": "object", + "additionalProperties": false + }, + "DidCreateFinishedResponse": { + "$ref": "#/components/schemas/DidCreateBaseResponse__state-finished--did-Did--didDocument-DidDocumentJson--secret_63_-AnyJsonObject__" + }, + "DidCreateBaseResponse__state-failed--did_63_-Did--didDocument_63_-DidDocumentJson--secret_63_-AnyJsonObject--reason-string__": { + "properties": { + "jobId": { + "type": "string" + }, + "didRegistrationMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "didDocumentMetadata": { + "$ref": "#/components/schemas/DidResolutionMetadata" + }, + "didState": { + "properties": { + "reason": { + "type": "string" + }, + "secret": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "didDocument": { + "$ref": "#/components/schemas/DidDocumentJson" + }, + "did": { + "$ref": "#/components/schemas/Did" + }, + "state": { + "type": "string", + "enum": [ + "failed" + ], + "nullable": false + } + }, + "required": [ + "reason", + "state" + ], + "type": "object" + } + }, + "required": [ + "didRegistrationMetadata", + "didDocumentMetadata", + "didState" + ], + "type": "object", + "additionalProperties": false + }, + "DidCreateFailedResponse": { + "$ref": "#/components/schemas/DidCreateBaseResponse__state-failed--did_63_-Did--didDocument_63_-DidDocumentJson--secret_63_-AnyJsonObject--reason-string__" + }, + "DidCreateBaseResponse__state-action--action-string--did_63_-Did--didDocument_63_-DidDocumentJson--secret_63_-AnyJsonObject--_91_key-string_93__58_unknown__": { + "properties": { + "jobId": { + "type": "string" + }, + "didRegistrationMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "didDocumentMetadata": { + "$ref": "#/components/schemas/DidResolutionMetadata" + }, + "didState": { + "properties": { + "secret": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "didDocument": { + "$ref": "#/components/schemas/DidDocumentJson" + }, + "did": { + "$ref": "#/components/schemas/Did" + }, + "action": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "action" + ], + "nullable": false + } + }, + "additionalProperties": {}, + "required": [ + "action", + "state" + ], + "type": "object" + } + }, + "required": [ + "didRegistrationMetadata", + "didDocumentMetadata", + "didState" + ], + "type": "object", + "additionalProperties": false + }, + "DidCreateActionResponse": { + "$ref": "#/components/schemas/DidCreateBaseResponse__state-action--action-string--did_63_-Did--didDocument_63_-DidDocumentJson--secret_63_-AnyJsonObject--_91_key-string_93__58_unknown__" + }, + "DidCreateBaseResponse__state-wait--did_63_-Did--didDocument_63_-DidDocumentJson--secret_63_-AnyJsonObject__": { + "properties": { + "jobId": { + "type": "string" + }, + "didRegistrationMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "didDocumentMetadata": { + "$ref": "#/components/schemas/DidResolutionMetadata" + }, + "didState": { + "properties": { + "secret": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "didDocument": { + "$ref": "#/components/schemas/DidDocumentJson" + }, + "did": { + "$ref": "#/components/schemas/Did" + }, + "state": { + "type": "string", + "enum": [ + "wait" + ], + "nullable": false + } + }, + "required": [ + "state" + ], + "type": "object" + } + }, + "required": [ + "didRegistrationMetadata", + "didDocumentMetadata", + "didState" + ], + "type": "object", + "additionalProperties": false + }, + "DidCreateWaitResponse": { + "$ref": "#/components/schemas/DidCreateBaseResponse__state-wait--did_63_-Did--didDocument_63_-DidDocumentJson--secret_63_-AnyJsonObject__" + }, + "Pick_DidCreateBaseOptions.Exclude_keyofDidCreateBaseOptions.did-or-didDocument__": { + "properties": { + "method": { + "type": "string" + }, + "options": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "secret": { + "$ref": "#/components/schemas/AnyJsonObject" + } + }, + "type": "object", + "description": "From T, pick a set of properties whose keys are in the union K" + }, + "KeyOrJwkDidCreateOptions": { + "properties": { + "method": { + "type": "string", + "enum": [ + "key", + "jwk" + ] + }, + "options": { + "properties": { + "keyType": { + "$ref": "#/components/schemas/KeyType" + } + }, + "required": [ + "keyType" + ], + "type": "object" + }, + "secret": { + "properties": { + "privateKeyBase58": { + "type": "string" + }, + "seedBase58": { + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "method", + "options" + ], + "type": "object", + "additionalProperties": false + }, + "DidCreateBaseOptions": { + "properties": { + "method": { + "type": "string" + }, + "did": { + "$ref": "#/components/schemas/Did" + }, + "options": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "secret": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "didDocument": { + "$ref": "#/components/schemas/DidDocumentJson" + } + }, + "type": "object", + "additionalProperties": false + }, + "DidCreateOptions": { + "anyOf": [ + { + "$ref": "#/components/schemas/KeyOrJwkDidCreateOptions" + }, + { + "$ref": "#/components/schemas/DidCreateBaseOptions" + } + ] + }, + "AnonCredsSchemaId": { + "type": "string" + }, + "AnonCredsSchema": { + "properties": { + "issuerId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + }, + "attrNames": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "issuerId", + "name", + "version", + "attrNames" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsGetSchemaSuccessResponse": { + "properties": { + "schemaId": { + "$ref": "#/components/schemas/AnonCredsSchemaId" + }, + "schema": { + "$ref": "#/components/schemas/AnonCredsSchema" + }, + "resolutionMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "schemaMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + } + }, + "required": [ + "schemaId", + "schema", + "resolutionMetadata", + "schemaMetadata" + ], + "type": "object", + "additionalProperties": false + }, + "Required_AnonCredsResolutionMetadata_": { + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "additionalProperties": {}, + "required": [ + "error", + "message" + ], + "type": "object", + "description": "Make all properties in T required" + }, + "AnonCredsGetSchemaFailedResponse": { + "properties": { + "schemaId": { + "$ref": "#/components/schemas/AnonCredsSchemaId" + }, + "schema": { + "$ref": "#/components/schemas/AnonCredsSchema" + }, + "resolutionMetadata": { + "$ref": "#/components/schemas/Required_AnonCredsResolutionMetadata_" + }, + "schemaMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + } + }, + "required": [ + "schemaId", + "resolutionMetadata", + "schemaMetadata" + ], + "type": "object", + "additionalProperties": false + }, + "RegisterSchemaReturnStateFinished": { + "properties": { + "state": { + "type": "string", + "enum": [ + "finished" + ], + "nullable": false + }, + "schema": { + "$ref": "#/components/schemas/AnonCredsSchema" + }, + "schemaId": { + "type": "string" + } + }, + "required": [ + "state", + "schema", + "schemaId" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsRegisterSchemaSuccessResponse": { + "properties": { + "jobId": { + "type": "string" + }, + "schemaState": { + "$ref": "#/components/schemas/RegisterSchemaReturnStateFinished" + }, + "schemaMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "registrationMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + } + }, + "required": [ + "schemaState", + "schemaMetadata", + "registrationMetadata" + ], + "type": "object", + "additionalProperties": false + }, + "RegisterSchemaReturnStateFailed": { + "properties": { + "state": { + "type": "string", + "enum": [ + "failed" + ], + "nullable": false + }, + "reason": { + "type": "string" + }, + "schema": { + "$ref": "#/components/schemas/AnonCredsSchema" + }, + "schemaId": { + "type": "string" + } + }, + "required": [ + "state", + "reason" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsRegisterSchemaFailedResponse": { + "properties": { + "jobId": { + "type": "string" + }, + "schemaState": { + "$ref": "#/components/schemas/RegisterSchemaReturnStateFailed" + }, + "schemaMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "registrationMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + } + }, + "required": [ + "schemaState", + "schemaMetadata", + "registrationMetadata" + ], + "type": "object", + "additionalProperties": false + }, + "RegisterSchemaReturnStateAction": { + "properties": { + "state": { + "type": "string", + "enum": [ + "action" + ], + "nullable": false + }, + "action": { + "type": "string" + }, + "schema": { + "$ref": "#/components/schemas/AnonCredsSchema" + }, + "schemaId": { + "type": "string" + } + }, + "required": [ + "state", + "action", + "schema", + "schemaId" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsRegisterSchemaActionResponse": { + "properties": { + "jobId": { + "type": "string" + }, + "schemaState": { + "$ref": "#/components/schemas/RegisterSchemaReturnStateAction" + }, + "schemaMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "registrationMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + } + }, + "required": [ + "schemaState", + "schemaMetadata", + "registrationMetadata" + ], + "type": "object", + "additionalProperties": false + }, + "RegisterSchemaReturnStateWait": { + "properties": { + "state": { + "type": "string", + "enum": [ + "wait" + ], + "nullable": false + }, + "schema": { + "$ref": "#/components/schemas/AnonCredsSchema" + }, + "schemaId": { + "type": "string" + } + }, + "required": [ + "state" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsRegisterSchemaWaitResponse": { + "properties": { + "jobId": { + "type": "string" + }, + "schemaState": { + "$ref": "#/components/schemas/RegisterSchemaReturnStateWait" + }, + "schemaMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "registrationMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + } + }, + "required": [ + "schemaState", + "schemaMetadata", + "registrationMetadata" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsRegisterSchemaBody": { + "properties": { + "schema": { + "$ref": "#/components/schemas/AnonCredsSchema" + }, + "options": { + "$ref": "#/components/schemas/AnyJsonObject" + } + }, + "required": [ + "schema" + ], + "type": "object", + "additionalProperties": false, + "example": { + "schema": { + "issuerId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv", + "name": "schema-name", + "version": "1.0", + "attrNames": [ + "age" + ] + } + } + }, + "AnonCredsCredentialDefinitionId": { + "type": "string" + }, + "AnonCredsCredentialDefinition": { + "properties": { + "issuerId": { + "type": "string" + }, + "schemaId": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "CL" + ], + "nullable": false + }, + "tag": { + "type": "string" + }, + "value": { + "properties": { + "revocation": {}, + "primary": { + "$ref": "#/components/schemas/Record_string.unknown_" + } + }, + "required": [ + "primary" + ], + "type": "object" + } + }, + "required": [ + "issuerId", + "schemaId", + "type", + "tag", + "value" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsGetCredentialDefinitionSuccessResponse": { + "properties": { + "credentialDefinitionId": { + "$ref": "#/components/schemas/AnonCredsCredentialDefinitionId" + }, + "credentialDefinition": { + "$ref": "#/components/schemas/AnonCredsCredentialDefinition" + }, + "resolutionMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "credentialDefinitionMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + } + }, + "required": [ + "credentialDefinitionId", + "credentialDefinition", + "resolutionMetadata", + "credentialDefinitionMetadata" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsGetCredentialDefinitionFailedResponse": { + "properties": { + "credentialDefinitionId": { + "$ref": "#/components/schemas/AnonCredsCredentialDefinitionId" + }, + "credentialDefinition": { + "$ref": "#/components/schemas/AnonCredsCredentialDefinition" + }, + "resolutionMetadata": { + "$ref": "#/components/schemas/Required_AnonCredsResolutionMetadata_" + }, + "credentialDefinitionMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + } + }, + "required": [ + "credentialDefinitionId", + "resolutionMetadata", + "credentialDefinitionMetadata" + ], + "type": "object", + "additionalProperties": false + }, + "RegisterCredentialDefinitionReturnStateFinished": { + "properties": { + "state": { + "type": "string", + "enum": [ + "finished" + ], + "nullable": false + }, + "credentialDefinition": { + "$ref": "#/components/schemas/AnonCredsCredentialDefinition" + }, + "credentialDefinitionId": { + "type": "string" + } + }, + "required": [ + "state", + "credentialDefinition", + "credentialDefinitionId" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsRegisterCredentialDefinitionSuccessResponse": { + "properties": { + "jobId": { + "type": "string" + }, + "credentialDefinitionState": { + "$ref": "#/components/schemas/RegisterCredentialDefinitionReturnStateFinished" + }, + "credentialDefinitionMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "registrationMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + } + }, + "required": [ + "credentialDefinitionState", + "credentialDefinitionMetadata", + "registrationMetadata" + ], + "type": "object", + "additionalProperties": false + }, + "RegisterCredentialDefinitionReturnStateFailed": { + "properties": { + "state": { + "type": "string", + "enum": [ + "failed" + ], + "nullable": false + }, + "reason": { + "type": "string" + }, + "credentialDefinition": { + "$ref": "#/components/schemas/AnonCredsCredentialDefinition" + }, + "credentialDefinitionId": { + "type": "string" + } + }, + "required": [ + "state", + "reason" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsRegisterCredentialDefinitionFailedResponse": { + "properties": { + "jobId": { + "type": "string" + }, + "credentialDefinitionState": { + "$ref": "#/components/schemas/RegisterCredentialDefinitionReturnStateFailed" + }, + "credentialDefinitionMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "registrationMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + } + }, + "required": [ + "credentialDefinitionState", + "credentialDefinitionMetadata", + "registrationMetadata" + ], + "type": "object", + "additionalProperties": false + }, + "RegisterCredentialDefinitionReturnStateAction": { + "properties": { + "state": { + "type": "string", + "enum": [ + "action" + ], + "nullable": false + }, + "action": { + "type": "string" + }, + "credentialDefinitionId": { + "type": "string" + }, + "credentialDefinition": { + "$ref": "#/components/schemas/AnonCredsCredentialDefinition" + } + }, + "required": [ + "state", + "action", + "credentialDefinitionId", + "credentialDefinition" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsRegisterCredentialDefinitionActionResponse": { + "properties": { + "jobId": { + "type": "string" + }, + "credentialDefinitionState": { + "$ref": "#/components/schemas/RegisterCredentialDefinitionReturnStateAction" + }, + "credentialDefinitionMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "registrationMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + } + }, + "required": [ + "credentialDefinitionState", + "credentialDefinitionMetadata", + "registrationMetadata" + ], + "type": "object", + "additionalProperties": false + }, + "RegisterCredentialDefinitionReturnStateWait": { + "properties": { + "state": { + "type": "string", + "enum": [ + "wait" + ], + "nullable": false + }, + "credentialDefinition": { + "$ref": "#/components/schemas/AnonCredsCredentialDefinition" + }, + "credentialDefinitionId": { + "type": "string" + } + }, + "required": [ + "state" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsRegisterCredentialDefinitionWaitResponse": { + "properties": { + "jobId": { + "type": "string" + }, + "credentialDefinitionState": { + "$ref": "#/components/schemas/RegisterCredentialDefinitionReturnStateWait" + }, + "credentialDefinitionMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + }, + "registrationMetadata": { + "$ref": "#/components/schemas/AnyJsonObject" + } + }, + "required": [ + "credentialDefinitionState", + "credentialDefinitionMetadata", + "registrationMetadata" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsRegisterCredentialDefinitionInput": { + "properties": { + "issuerId": { + "type": "string" + }, + "schemaId": { + "type": "string" + }, + "tag": { + "type": "string" + } + }, + "required": [ + "issuerId", + "schemaId", + "tag" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsRegisterCredentialDefinitionOptions": { + "properties": { + "supportRevocation": { + "type": "boolean" + } + }, + "required": [ + "supportRevocation" + ], + "type": "object", + "additionalProperties": false + }, + "AnonCredsRegisterCredentialDefinitionBody": { + "properties": { + "credentialDefinition": { + "$ref": "#/components/schemas/AnonCredsRegisterCredentialDefinitionInput" + }, + "options": { + "$ref": "#/components/schemas/AnonCredsRegisterCredentialDefinitionOptions" + } + }, + "required": [ + "credentialDefinition", + "options" + ], + "type": "object", + "additionalProperties": false, + "example": { + "credentialDefinition": { + "issuerId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv", + "schemaId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/schema-name/1.0", + "tag": "definition" + }, + "options": { + "supportRevocation": true + } + } + }, + "DidCommMimeType": { + "enum": [ + "application/ssi-agent-wire", + "application/didcomm-envelope-enc" + ], + "type": "string" + }, + "Pick_ReturnType_AgentConfig-at-toJSON_.Exclude_keyofReturnType_AgentConfig-at-toJSON_.walletConfig-or-logger-or-agentDependencies__": { + "properties": { + "label": { + "type": "string" + }, + "connectionImageUrl": { + "type": "string" + }, + "endpoints": { + "items": { + "type": "string" + }, + "type": "array" + }, + "didCommMimeType": { + "$ref": "#/components/schemas/DidCommMimeType" + }, + "useDidKeyInProtocols": { + "type": "boolean" + }, + "useDidSovPrefixWhereAllowed": { + "type": "boolean" + }, + "autoUpdateStorageOnStartup": { + "type": "boolean" + }, + "backupBeforeStorageUpdate": { + "type": "boolean" + } + }, + "required": [ + "label" + ], + "type": "object", + "description": "From T, pick a set of properties whose keys are in the union K" + }, + "ApiAgentConfig": { + "properties": { + "label": { + "type": "string" + }, + "connectionImageUrl": { + "type": "string" + }, + "endpoints": { + "items": { + "type": "string" + }, + "type": "array" + }, + "didCommMimeType": { + "$ref": "#/components/schemas/DidCommMimeType" + }, + "useDidKeyInProtocols": { + "type": "boolean" + }, + "useDidSovPrefixWhereAllowed": { + "type": "boolean" + }, + "autoUpdateStorageOnStartup": { + "type": "boolean" + }, + "backupBeforeStorageUpdate": { + "type": "boolean" + } + }, + "required": [ + "label" + ], + "type": "object", + "additionalProperties": false + }, + "AgentInfo": { + "properties": { + "config": { + "$ref": "#/components/schemas/ApiAgentConfig", + "description": "The config of the agent." + }, + "isInitialized": { + "type": "boolean", + "description": "Whether the agent has been initialized." + } + }, + "required": [ + "config", + "isInitialized" + ], + "type": "object", + "additionalProperties": false + } + }, + "securitySchemes": { + "tenants": { + "type": "apiKey", + "name": "x-tenant-id", + "in": "header" + } + } + }, + "info": { + "title": "@credo-ts/rest", + "version": "0.9.5", + "description": "Rest API for using Credo over HTTP", + "license": { + "name": "Apache-2.0" + }, + "contact": {} + }, + "paths": { + "/tenants": { + "post": { + "operationId": "CreateTenant", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TenantsRecord" + } + } + } + } + }, + "description": "create new tenant", + "tags": [ + "Tenants" + ], + "security": [ + { + "tenants": [ + "admin" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTenantOptions" + } + } + } + } + } + }, + "/didcomm/proofs": { + "get": { + "operationId": "FindProofsByQuery", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/DidCommProofsExchangeRecord" + }, + "type": "array" + }, + "examples": { + "Example 1": { + "value": [ + { + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "protocolVersion": "v2", + "role": "prover", + "state": "proposal-sent", + "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", + "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", + "createdAt": "2022-01-01T00:00:00.000Z", + "autoAcceptProof": "always", + "type": "ProofRecord" + } + ] + } + } + } + } + } + }, + "description": "Find proof exchanges by query", + "tags": [ + "DIDComm Proofs" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "query", + "name": "threadId", + "required": false, + "schema": { + "$ref": "#/components/schemas/ThreadId" + } + }, + { + "in": "query", + "name": "connectionId", + "required": false, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + }, + { + "in": "query", + "name": "state", + "required": false, + "schema": { + "$ref": "#/components/schemas/ProofState" + } + }, + { + "in": "query", + "name": "parentThreadId", + "required": false, + "schema": { + "$ref": "#/components/schemas/ThreadId" + } + }, + { + "in": "query", + "name": "role", + "required": false, + "schema": { + "$ref": "#/components/schemas/ProofRole" + } + } + ] + } + }, + "/didcomm/proofs/{proofExchangeId}": { + "get": { + "operationId": "GetProofExchangeById", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCommProofsExchangeRecord" + }, + "examples": { + "Example 1": { + "value": { + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "protocolVersion": "v2", + "role": "prover", + "state": "proposal-sent", + "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", + "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", + "createdAt": "2022-01-01T00:00:00.000Z", + "autoAcceptProof": "always", + "type": "ProofRecord" + } + } + } + } + } + } + }, + "description": "Retrieve proof exchange by proof exchange id", + "tags": [ + "DIDComm Proofs" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "proofExchangeId", + "required": true, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + } + ] + }, + "delete": { + "operationId": "DeleteProof", + "responses": { + "204": { + "description": "No content" + } + }, + "description": "Deletes a proof exchange record.", + "tags": [ + "DIDComm Proofs" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "proofExchangeId", + "required": true, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + } + ] + } + }, + "/didcomm/proofs/propose-proof": { + "post": { + "operationId": "ProposeProof", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCommProofsExchangeRecord" + }, + "examples": { + "Example 1": { + "value": { + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "protocolVersion": "v2", + "role": "prover", + "state": "proposal-sent", + "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", + "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", + "createdAt": "2022-01-01T00:00:00.000Z", + "autoAcceptProof": "always", + "type": "ProofRecord" + } + } + } + } + } + } + }, + "description": "Initiate a new presentation exchange as prover by sending a presentation proposal request\nto the connection with the specified connection id.", + "tags": [ + "DIDComm Proofs" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCommProofsProposeProofOptions" + } + } + } + } + } + }, + "/didcomm/proofs/{proofExchangeId}/accept-proposal": { + "post": { + "operationId": "AcceptProposal", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCommProofsExchangeRecord" + }, + "examples": { + "Example 1": { + "value": { + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "protocolVersion": "v2", + "role": "prover", + "state": "proposal-sent", + "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", + "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", + "createdAt": "2022-01-01T00:00:00.000Z", + "autoAcceptProof": "always", + "type": "ProofRecord" + } + } + } + } + } + } + }, + "description": "Accept a presentation proposal as verifier by sending an accept proposal message\nto the connection associated with the proof record.", + "tags": [ + "DIDComm Proofs" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "proofExchangeId", + "required": true, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCommProofsAcceptProposalOptions" + } + } + } + } + } + }, + "/didcomm/proofs/create-request": { + "post": { + "operationId": "CreateRequest", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCommProofsCreateRequestResponse" + }, + "examples": { + "Example 1": { + "value": { + "proofExchange": { + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "protocolVersion": "v2", + "role": "prover", + "state": "proposal-sent", + "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", + "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", + "createdAt": "2022-01-01T00:00:00.000Z", + "autoAcceptProof": "always", + "type": "ProofRecord" + }, + "message": { + "@id": "134b27f0-9366-4811-a36b-50bacfe57e61", + "@type": "https://didcomm.org/present-proof/1.0/request-presentation" + } + } + } + } + } + } + } + }, + "description": "Creates a presentation request not bound to any proposal or existing connection", + "tags": [ + "DIDComm Proofs" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCommProofsCreateRequestOptions" + } + } + } + } + } + }, + "/didcomm/proofs/request-proof": { + "post": { + "operationId": "RequestProof", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {}, + "examples": { + "Example 1": { + "value": { + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "protocolVersion": "v2", + "role": "prover", + "state": "proposal-sent", + "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", + "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", + "createdAt": "2022-01-01T00:00:00.000Z", + "autoAcceptProof": "always", + "type": "ProofRecord" + } + } + } + } + } + } + }, + "description": "Creates a presentation request bound to existing connection", + "tags": [ + "DIDComm Proofs" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCommProofsSendRequestOptions" + } + } + } + } + } + }, + "/didcomm/proofs/{proofExchangeId}/accept-request": { + "post": { + "operationId": "AcceptRequest", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {}, + "examples": { + "Example 1": { + "value": { + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "protocolVersion": "v2", + "role": "prover", + "state": "proposal-sent", + "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", + "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", + "createdAt": "2022-01-01T00:00:00.000Z", + "autoAcceptProof": "always", + "type": "ProofRecord" + } + } + } + } + } + } + }, + "description": "Accept a presentation request as prover by sending an accept request message\nto the connection associated with the proof record.", + "tags": [ + "DIDComm Proofs" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "proofExchangeId", + "required": true, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCommProofsAcceptRequestOptions" + } + } + } + } + } + }, + "/didcomm/proofs/{proofExchangeId}/accept-presentation": { + "post": { + "operationId": "AcceptPresentation", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {}, + "examples": { + "Example 1": { + "value": { + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "protocolVersion": "v2", + "role": "prover", + "state": "proposal-sent", + "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7", + "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", + "createdAt": "2022-01-01T00:00:00.000Z", + "autoAcceptProof": "always", + "type": "ProofRecord" + } + } + } + } + } + } + }, + "description": "Accept a presentation as prover by sending an accept presentation message\nto the connection associated with the proof record.", + "tags": [ + "DIDComm Proofs" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "proofExchangeId", + "required": true, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + } + ] + } + }, + "/didcomm/out-of-band": { + "get": { + "operationId": "FindOutOfBandRecordsByQuery", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/DidCommOutOfBandRecord" + }, + "type": "array" + }, + "examples": { + "Example 1": { + "value": [ + { + "outOfBandInvitation": { + "@type": "https://didcomm.org/out-of-band/1.1/invitation", + "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", + "label": "Aries Test Agent", + "accept": [ + "didcomm/aip1", + "didcomm/aip2;env=rfc19" + ], + "handshake_protocols": [ + "https://didcomm.org/didexchange/1.0", + "https://didcomm.org/connections/1.0" + ], + "services": [ + { + "id": "#inline-0", + "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", + "type": "did-communication", + "recipientKeys": [ + "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" + ], + "routingKeys": [] + } + ] + }, + "id": "42a95528-0e30-4f86-a462-0efb02178b53", + "createdAt": "2022-01-01T00:00:00.000Z", + "role": "sender", + "state": "prepare-response", + "reusable": false, + "type": "OutOfBandRecord" + } + ] + } + } + } + } + } + }, + "description": "Retrieve all out of band records by query", + "tags": [ + "DIDComm Out Of Band" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "query", + "name": "invitationId", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "role", + "required": false, + "schema": { + "$ref": "#/components/schemas/OutOfBandRole" + } + }, + { + "in": "query", + "name": "state", + "required": false, + "schema": { + "$ref": "#/components/schemas/OutOfBandState" + } + }, + { + "in": "query", + "name": "threadId", + "required": false, + "schema": { + "type": "string" + } + } + ] + } + }, + "/didcomm/out-of-band/{outOfBandId}": { + "get": { + "operationId": "GetOutOfBandRecordById", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCommOutOfBandRecord" + }, + "examples": { + "Example 1": { + "value": { + "outOfBandInvitation": { + "@type": "https://didcomm.org/out-of-band/1.1/invitation", + "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", + "label": "Aries Test Agent", + "accept": [ + "didcomm/aip1", + "didcomm/aip2;env=rfc19" + ], + "handshake_protocols": [ + "https://didcomm.org/didexchange/1.0", + "https://didcomm.org/connections/1.0" + ], + "services": [ + { + "id": "#inline-0", + "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", + "type": "did-communication", + "recipientKeys": [ + "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" + ], + "routingKeys": [] + } + ] + }, + "id": "42a95528-0e30-4f86-a462-0efb02178b53", + "createdAt": "2022-01-01T00:00:00.000Z", + "role": "sender", + "state": "prepare-response", + "reusable": false, + "type": "OutOfBandRecord" + } + } + } + } + } + } + }, + "description": "Retrieve an out of band record by id", + "tags": [ + "DIDComm Out Of Band" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "outOfBandId", + "required": true, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + } + ] + }, + "delete": { + "operationId": "DeleteOutOfBandRecord", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "description": "Deletes an out of band record from the repository.", + "tags": [ + "DIDComm Out Of Band" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "outOfBandId", + "required": true, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + } + ] + } + }, + "/didcomm/out-of-band/create-invitation": { + "post": { + "operationId": "CreateInvitation", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCommOutOfBandCreateInvitationResponse" + }, + "examples": { + "Example 1": { + "value": { + "invitationUrl": "https://example.com/?", + "invitation": { + "@type": "https://didcomm.org/out-of-band/1.1/invitation", + "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", + "label": "Aries Test Agent", + "accept": [ + "didcomm/aip1", + "didcomm/aip2;env=rfc19" + ], + "handshake_protocols": [ + "https://didcomm.org/didexchange/1.0", + "https://didcomm.org/connections/1.0" + ], + "services": [ + { + "id": "#inline-0", + "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", + "type": "did-communication", + "recipientKeys": [ + "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" + ], + "routingKeys": [] + } + ] + }, + "outOfBandRecord": { + "outOfBandInvitation": { + "@type": "https://didcomm.org/out-of-band/1.1/invitation", + "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", + "label": "Aries Test Agent", + "accept": [ + "didcomm/aip1", + "didcomm/aip2;env=rfc19" + ], + "handshake_protocols": [ + "https://didcomm.org/didexchange/1.0", + "https://didcomm.org/connections/1.0" + ], + "services": [ + { + "id": "#inline-0", + "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", + "type": "did-communication", + "recipientKeys": [ + "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" + ], + "routingKeys": [] + } + ] + }, + "id": "42a95528-0e30-4f86-a462-0efb02178b53", + "createdAt": "2022-01-01T00:00:00.000Z", + "role": "sender", + "state": "prepare-response", + "reusable": false, + "type": "OutOfBandRecord" + } + } + } + } + } + } + } + }, + "description": "Creates an outbound out-of-band record containing out-of-band invitation message defined in\nAries RFC 0434: Out-of-Band Protocol 1.1.", + "tags": [ + "DIDComm Out Of Band" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCommOutOfBandCreateInvitationOptions" + } + } + } + } + } + }, + "/didcomm/out-of-band/create-legacy-invitation": { + "post": { + "operationId": "CreateLegacyInvitation", + "responses": { + "200": { + "description": "out-of-band record and invitation", + "content": { + "application/json": { + "schema": {}, + "examples": { + "Example 1": { + "value": { + "invitation": { + "@type": "https://didcomm.org/connections/1./invitation", + "@id": "d6b23733-be49-408b-98ab-ba9460384087" + }, + "outOfBandRecord": { + "outOfBandInvitation": { + "@type": "https://didcomm.org/out-of-band/1.1/invitation", + "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", + "label": "Aries Test Agent", + "accept": [ + "didcomm/aip1", + "didcomm/aip2;env=rfc19" + ], + "handshake_protocols": [ + "https://didcomm.org/didexchange/1.0", + "https://didcomm.org/connections/1.0" + ], + "services": [ + { + "id": "#inline-0", + "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", + "type": "did-communication", + "recipientKeys": [ + "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" + ], + "routingKeys": [] + } + ] + }, + "id": "42a95528-0e30-4f86-a462-0efb02178b53", + "createdAt": "2022-01-01T00:00:00.000Z", + "role": "sender", + "state": "prepare-response", + "reusable": false, + "type": "OutOfBandRecord" + } + } + } + } + } + } + } + }, + "description": "Creates an outbound out-of-band record in the same way how `createInvitation` method does it,\nbut it also converts out-of-band invitation message to an \"legacy\" invitation message defined\nin RFC 0160: Connection Protocol and returns it together with out-of-band record.", + "tags": [ + "DIDComm Out Of Band" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCommOutOfBandCreateLegacyConnectionInvitationOptions" + } + } + } + } + } + }, + "/didcomm/out-of-band/create-legacy-connectionless-invitation": { + "post": { + "operationId": "CreateLegacyConnectionlessInvitation", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {}, + "examples": { + "Example 1": { + "value": { + "message": { + "@id": "eac4ff4e-b4fb-4c1d-aef3-b29c89d1cc00", + "@type": "https://didcomm.org/issue-credential/1.0/offer-credential" + }, + "invitationUrl": "http://example.com/invitation_url" + } + } + } + } + } + } + }, + "description": "Creates a new connectionless legacy invitation.\n\nOnly works with messages created from:\n- /didcomm/credentials/create-offer\n- /didcomm/poofs/create-request", + "tags": [ + "DIDComm Out Of Band" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCommOutOfBandCreateLegacyConnectionlessInvitationOptions" + } + } + } + } + } + }, + "/didcomm/out-of-band/receive-invitation": { + "post": { + "operationId": "ReceiveInvitation", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {}, + "examples": { + "Example 1": { + "value": { + "outOfBandRecord": { + "outOfBandInvitation": { + "@type": "https://didcomm.org/out-of-band/1.1/invitation", + "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", + "label": "Aries Test Agent", + "accept": [ + "didcomm/aip1", + "didcomm/aip2;env=rfc19" + ], + "handshake_protocols": [ + "https://didcomm.org/didexchange/1.0", + "https://didcomm.org/connections/1.0" + ], + "services": [ + { + "id": "#inline-0", + "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", + "type": "did-communication", + "recipientKeys": [ + "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" + ], + "routingKeys": [] + } + ] + }, + "id": "42a95528-0e30-4f86-a462-0efb02178b53", + "createdAt": "2022-01-01T00:00:00.000Z", + "role": "sender", + "state": "prepare-response", + "reusable": false, + "type": "OutOfBandRecord" + }, + "connectionRecord": { + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "type": "ConnectionRecord", + "createdAt": "2022-01-01T00:00:00.000Z", + "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", + "state": "invitation-sent", + "role": "responder", + "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", + "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" + } + } + } + } + } + } + } + }, + "description": "Receive an out of band invitation. Supports urls as well as JSON messages. Also supports legacy\nconnection invitations", + "tags": [ + "DIDComm Out Of Band" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCommOutOfBandReceiveInvitationOptions" + } + } + } + } + } + }, + "/didcomm/out-of-band/{outOfBandId}/accept-invitation": { + "post": { + "operationId": "AcceptInvitation", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {}, + "examples": { + "Example 1": { + "value": { + "outOfBandRecord": { + "outOfBandInvitation": { + "@type": "https://didcomm.org/out-of-band/1.1/invitation", + "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", + "label": "Aries Test Agent", + "accept": [ + "didcomm/aip1", + "didcomm/aip2;env=rfc19" + ], + "handshake_protocols": [ + "https://didcomm.org/didexchange/1.0", + "https://didcomm.org/connections/1.0" + ], + "services": [ + { + "id": "#inline-0", + "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", + "type": "did-communication", + "recipientKeys": [ + "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" + ], + "routingKeys": [] + } + ] + }, + "id": "42a95528-0e30-4f86-a462-0efb02178b53", + "createdAt": "2022-01-01T00:00:00.000Z", + "role": "sender", + "state": "prepare-response", + "reusable": false, + "type": "OutOfBandRecord" + }, + "connectionRecord": { + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "type": "ConnectionRecord", + "createdAt": "2022-01-01T00:00:00.000Z", + "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", + "state": "invitation-sent", + "role": "responder", + "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", + "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" + } + } + } + } + } + } + } + }, + "description": "Accept a connection invitation as invitee (by sending a connection request message) for the connection with the specified connection id.\nThis is not needed when auto accepting of connections is enabled.", + "tags": [ + "DIDComm Out Of Band" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "outOfBandId", + "required": true, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCommOutOfBandAcceptInvitationOptions" + } + } + } + } + } + }, + "/didcomm/credentials": { + "get": { + "operationId": "FindCredentialsByQuery", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/DidCommCredentialsExchangeRecord" + }, + "type": "array" + }, + "examples": { + "Example 1": { + "value": [ + { + "credentials": [], + "type": "CredentialRecord", + "role": "holder", + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "createdAt": "2022-01-01T00:00:00.000Z", + "state": "offer-sent", + "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b", + "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", + "credentialAttributes": [], + "protocolVersion": "v1" + } + ] + } + } + } + } + } + }, + "description": "Retrieve all credential exchange records by query", + "tags": [ + "DIDComm Credentials" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "query", + "name": "threadId", + "required": false, + "schema": { + "$ref": "#/components/schemas/ThreadId" + } + }, + { + "in": "query", + "name": "parentThreadId", + "required": false, + "schema": { + "$ref": "#/components/schemas/ThreadId" + } + }, + { + "in": "query", + "name": "connectionId", + "required": false, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + }, + { + "in": "query", + "name": "state", + "required": false, + "schema": { + "$ref": "#/components/schemas/CredentialState" + } + }, + { + "in": "query", + "name": "role", + "required": false, + "schema": { + "$ref": "#/components/schemas/CredentialRole" + } + } + ] + } + }, + "/didcomm/credentials/{credentialExchangeId}": { + "get": { + "operationId": "GetCredentialById", + "responses": { + "200": { + "description": "CredentialExchangeRecord", + "content": { + "application/json": { + "schema": {}, + "examples": { + "Example 1": { + "value": { + "credentials": [], + "type": "CredentialRecord", + "role": "holder", + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "createdAt": "2022-01-01T00:00:00.000Z", + "state": "offer-sent", + "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b", + "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", + "credentialAttributes": [], + "protocolVersion": "v1" + } + } + } + } + } + } + }, + "description": "Retrieve credential exchange record by credential record id", + "tags": [ + "DIDComm Credentials" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "credentialExchangeId", + "required": true, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + } + ] + }, + "delete": { + "operationId": "DeleteCredential", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "description": "Deletes a credential exchange record in the credential repository.", + "tags": [ + "DIDComm Credentials" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "credentialExchangeId", + "required": true, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + } + ] + } + }, + "/didcomm/credentials/propose-credential": { + "post": { + "operationId": "ProposeCredential", + "responses": { + "200": { + "description": "CredentialExchangeRecord", + "content": { + "application/json": { + "schema": {}, + "examples": { + "Example 1": { + "value": { + "credentials": [], + "type": "CredentialRecord", + "role": "holder", + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "createdAt": "2022-01-01T00:00:00.000Z", + "state": "offer-sent", + "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b", + "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", + "credentialAttributes": [], + "protocolVersion": "v1" + } + } + } + } + } + } + }, + "description": "Initiate a new credential exchange as holder by sending a propose credential message\nto the connection with a specified connection id.", + "tags": [ + "DIDComm Credentials" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProposeCredentialOptions" + } + } + } + } + } + }, + "/didcomm/credentials/{credentialExchangeId}/accept-proposal": { + "post": { + "operationId": "AcceptProposal", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {}, + "examples": { + "Example 1": { + "value": { + "credentials": [], + "type": "CredentialRecord", + "role": "holder", + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "createdAt": "2022-01-01T00:00:00.000Z", + "state": "offer-sent", + "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b", + "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", + "credentialAttributes": [], + "protocolVersion": "v1" + } + } + } + } + } + } + }, + "description": "Accept a credential proposal as issuer by sending an accept proposal message\nto the connection associated with the credential exchange record.", + "tags": [ + "DIDComm Credentials" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "credentialExchangeId", + "required": true, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AcceptCredentialProposalOptions" + } + } + } + } + } + }, + "/didcomm/credentials/create-offer": { + "post": { + "operationId": "CreateOffer", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCommCredentialsCreateOfferResponse" + }, + "examples": { + "Example 1": { + "value": { + "credentialExchange": { + "credentials": [], + "type": "CredentialRecord", + "role": "holder", + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "createdAt": "2022-01-01T00:00:00.000Z", + "state": "offer-sent", + "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b", + "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", + "credentialAttributes": [], + "protocolVersion": "v1" + }, + "message": { + "@id": "134b27f0-9366-4811-a36b-50bacfe57e61", + "@type": "https://didcomm.org/issue-credential/1.0/offer-credential" + } + } + } + } + } + } + } + }, + "description": "Initiate a new credential exchange as issuer by creating a credential offer\nwithout specifying a connection id", + "tags": [ + "DIDComm Credentials" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateOfferOptions" + } + } + } + } + } + }, + "/didcomm/credentials/offer-credential": { + "post": { + "operationId": "OfferCredential", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {}, + "examples": { + "Example 1": { + "value": { + "credentials": [], + "type": "CredentialRecord", + "role": "holder", + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "createdAt": "2022-01-01T00:00:00.000Z", + "state": "offer-sent", + "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b", + "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", + "credentialAttributes": [], + "protocolVersion": "v1" + } + } + } + } + } + } + }, + "description": "Initiate a new credential exchange as issuer by sending a offer credential message\nto the connection with the specified connection id.", + "tags": [ + "DIDComm Credentials" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/OfferCredentialOptions" + } + } + } + } + } + }, + "/didcomm/credentials/{credentialExchangeId}/accept-offer": { + "post": { + "operationId": "AcceptOffer", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {}, + "examples": { + "Example 1": { + "value": { + "credentials": [], + "type": "CredentialRecord", + "role": "holder", + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "createdAt": "2022-01-01T00:00:00.000Z", + "state": "offer-sent", + "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b", + "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", + "credentialAttributes": [], + "protocolVersion": "v1" + } + } + } + } + } + } + }, + "description": "Accept a credential offer as holder by sending an accept offer message\nto the connection associated with the credential exchange record.", + "tags": [ + "DIDComm Credentials" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "credentialExchangeId", + "required": true, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AcceptCredentialOfferOptions" + } + } + } + } + } + }, + "/didcomm/credentials/{credentialExchangeId}/accept-request": { + "post": { + "operationId": "AcceptRequest", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {}, + "examples": { + "Example 1": { + "value": { + "credentials": [], + "type": "CredentialRecord", + "role": "holder", + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "createdAt": "2022-01-01T00:00:00.000Z", + "state": "offer-sent", + "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b", + "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", + "credentialAttributes": [], + "protocolVersion": "v1" + } + } + } + } + } + } + }, + "description": "Accept a credential request as issuer by sending an accept request message\nto the connection associated with the credential exchange record.", + "tags": [ + "DIDComm Credentials" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "credentialExchangeId", + "required": true, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AcceptCredentialRequestOptions" + } + } + } + } + } + }, + "/didcomm/credentials/{credentialExchangeId}/accept-credential": { + "post": { + "operationId": "AcceptCredential", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {}, + "examples": { + "Example 1": { + "value": { + "credentials": [], + "type": "CredentialRecord", + "role": "holder", + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "createdAt": "2022-01-01T00:00:00.000Z", + "state": "offer-sent", + "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b", + "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", + "credentialAttributes": [], + "protocolVersion": "v1" + } + } + } + } + } + } + }, + "description": "Accept a credential as holder by sending an accept credential message\nto the connection associated with the credential exchange record.", + "tags": [ + "DIDComm Credentials" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "credentialExchangeId", + "required": true, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + } + ] + } + }, + "/didcomm/connections": { + "get": { + "operationId": "FindConnectionsByQuery", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/DidCommConnectionsRecord" + }, + "type": "array" + }, + "examples": { + "Example 1": { + "value": [ + { + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "type": "ConnectionRecord", + "createdAt": "2022-01-01T00:00:00.000Z", + "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", + "state": "invitation-sent", + "role": "responder", + "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", + "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" + } + ] + } + } + } + } + } + }, + "description": "Find connection record by query", + "tags": [ + "DIDComm Connections" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "query", + "name": "outOfBandId", + "required": false, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + }, + { + "in": "query", + "name": "alias", + "required": false, + "schema": { + "type": "string" + } + }, + { + "in": "query", + "name": "state", + "required": false, + "schema": { + "$ref": "#/components/schemas/DidExchangeState" + } + }, + { + "in": "query", + "name": "did", + "required": false, + "schema": { + "$ref": "#/components/schemas/Did" + } + }, + { + "in": "query", + "name": "theirDid", + "required": false, + "schema": { + "$ref": "#/components/schemas/Did" + } + }, + { + "in": "query", + "name": "theirLabel", + "required": false, + "schema": { + "type": "string" + } + } + ] + } + }, + "/didcomm/connections/{connectionId}": { + "get": { + "operationId": "GetConnectionById", + "responses": { + "200": { + "description": "ConnectionRecord", + "content": { + "application/json": { + "schema": {}, + "examples": { + "Example 1": { + "value": { + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "type": "ConnectionRecord", + "createdAt": "2022-01-01T00:00:00.000Z", + "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", + "state": "invitation-sent", + "role": "responder", + "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", + "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" + } + } + } + } + } + } + }, + "description": "Retrieve connection record by connection id", + "tags": [ + "DIDComm Connections" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "description": "Connection identifier", + "in": "path", + "name": "connectionId", + "required": true, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + } + ] + }, + "delete": { + "operationId": "DeleteConnection", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {} + } + } + } + }, + "description": "Deletes a connection record from the connection repository.", + "tags": [ + "DIDComm Connections" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "description": "Connection identifier", + "in": "path", + "name": "connectionId", + "required": true, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + } + ] + } + }, + "/didcomm/connections/{connectionId}/accept-request": { + "post": { + "operationId": "AcceptRequest", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": {}, + "examples": { + "Example 1": { + "value": { + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "type": "ConnectionRecord", + "createdAt": "2022-01-01T00:00:00.000Z", + "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", + "state": "invitation-sent", + "role": "responder", + "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", + "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" + } + } + } + } + } + } + }, + "description": "Accept a connection request as inviter by sending a connection response message\nfor the connection with the specified connection id.\n\nThis is not needed when auto accepting of connection is enabled.", + "tags": [ + "DIDComm Connections" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "connectionId", + "required": true, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + } + ] + } + }, + "/didcomm/connections/{connectionId}/accept-response": { + "post": { + "operationId": "AcceptResponse", + "responses": { + "200": { + "description": "ConnectionRecord", + "content": { + "application/json": { + "schema": {}, + "examples": { + "Example 1": { + "value": { + "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", + "type": "ConnectionRecord", + "createdAt": "2022-01-01T00:00:00.000Z", + "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", + "state": "invitation-sent", + "role": "responder", + "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", + "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" + } + } + } + } + } + } + }, + "description": "Accept a connection response as invitee by sending a trust ping message\nfor the connection with the specified connection id.\n\nThis is not needed when auto accepting of connection is enabled.", + "tags": [ + "DIDComm Connections" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "description": "Connection identifier", + "in": "path", + "name": "connectionId", + "required": true, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + } + ] + } + }, + "/didcomm/basic-messages": { + "get": { + "operationId": "FindBasicMessagesByQuery", + "responses": { + "200": { + "description": "BasicMessageRecord[]", + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/DidCommBasicMessagesRecord" + }, + "type": "array" + }, + "examples": { + "Example 1": { + "value": [ + { + "id": "74bcf865-1fdc-45b4-b517-9def02dfd25f", + "createdAt": "2022-08-18T08:38:40.216Z", + "type": "BasicMessageRecord", + "content": "Hello!", + "sentTime": "2022-08-18T08:38:40.216Z", + "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", + "role": "sender" + } + ] + } + } + } + } + } + }, + "description": "Retrieve basic messages by connection id", + "tags": [ + "DIDComm Basic Messages" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "description": "Connection identifier", + "in": "query", + "name": "connectionId", + "required": false, + "schema": { + "$ref": "#/components/schemas/RecordId" + } + }, + { + "in": "query", + "name": "role", + "required": false, + "schema": { + "$ref": "#/components/schemas/BasicMessageRole" + } + }, + { + "in": "query", + "name": "threadId", + "required": false, + "schema": { + "$ref": "#/components/schemas/ThreadId" + } + }, + { + "in": "query", + "name": "parentThreadId", + "required": false, + "schema": { + "$ref": "#/components/schemas/ThreadId" + } + } + ] + } + }, + "/didcomm/basic-messages/send": { + "post": { + "operationId": "SendMessage", + "responses": { + "200": { + "description": "BasicMessageRecord", + "content": { + "application/json": { + "schema": {}, + "examples": { + "Example 1": { + "value": { + "id": "74bcf865-1fdc-45b4-b517-9def02dfd25f", + "createdAt": "2022-08-18T08:38:40.216Z", + "type": "BasicMessageRecord", + "content": "Hello!", + "sentTime": "2022-08-18T08:38:40.216Z", + "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", + "role": "sender" + } + } + } + } + } + } + }, + "description": "Send a basic message to a connection", + "tags": [ + "DIDComm Basic Messages" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCommBasicMessagesSendOptions" + } + } + } + } + } + }, + "/dids/{did}": { + "get": { + "operationId": "ResolveDid", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidResolveSuccessResponse" + }, + "examples": { + "Example 1": { + "value": { + "didDocument": { + "@context": [ + "https://w3id.org/did/v1", + "https://w3id.org/security/suites/ed25519-2018/v1", + "https://w3id.org/security/suites/x25519-2019/v1" + ], + "id": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL", + "verificationMethod": [ + { + "id": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL", + "type": "Ed25519VerificationKey2018", + "controller": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL", + "publicKeyBase58": "6fioC1zcDPyPEL19pXRS2E4iJ46zH7xP6uSgAaPdwDrx" + } + ], + "authentication": [ + "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL" + ], + "assertionMethod": [ + "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL" + ], + "capabilityInvocation": [ + "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL" + ], + "capabilityDelegation": [ + "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL" + ], + "keyAgreement": [ + { + "id": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6LSrdqo4M24WRDJj1h2hXxgtDTyzjjKCiyapYVgrhwZAySn", + "type": "X25519KeyAgreementKey2019", + "controller": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL", + "publicKeyBase58": "FxfdY3DCQxVZddKGAtSjZdFW9bCCW7oRwZn1NFJ2Tbg2" + } + ] + }, + "didDocumentMetadata": {}, + "didResolutionMetadata": { + "contentType": "application/did+ld+json" + } + } + } + } + } + } + }, + "404": { + "description": "Did not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidResolveFailedResponse" + }, + "examples": { + "Example 1": { + "value": { + "didDocument": null, + "didDocumentMetadata": {}, + "didResolutionMetadata": { + "error": "notFound", + "message": "DID not found" + } + } + } + } + } + } + }, + "500": { + "description": "Error resolving did", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidResolveFailedResponse" + }, + "examples": { + "Example 1": { + "value": { + "didDocument": null, + "didDocumentMetadata": {}, + "didResolutionMetadata": { + "error": "notFound", + "message": "DID not found" + } + } + } + } + } + } + } + }, + "description": "Resolves did and returns did resolution result", + "tags": [ + "Dids" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "did", + "required": true, + "schema": { + "type": "string" + } + } + ] + } + }, + "/dids/import": { + "post": { + "operationId": "ImportDid", + "responses": { + "201": { + "description": "Did imported successfully" + } + }, + "description": "Import a did (with optional did document).\n\nIf no did document is provided, the did will be resolved to fetch the did document.", + "tags": [ + "Dids" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidImportOptions" + } + } + } + } + } + }, + "/dids/create": { + "post": { + "operationId": "CreateDid", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCreateFinishedResponse" + }, + "examples": { + "Example 1": { + "value": { + "didState": { + "did": "did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc", + "state": "finished", + "didDocument": { + "@context": [ + "https://w3id.org/did/v1", + "https://w3id.org/security/suites/ed25519-2018/v1", + "https://w3id.org/security/suites/x25519-2019/v1" + ], + "id": "did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc", + "verificationMethod": [ + { + "id": "did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc", + "type": "Ed25519VerificationKey2018", + "controller": "did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc", + "publicKeyBase58": "ApexJxnhZHC6Ctq4fCoNHKYgu87HuRTZ7oSyfehG57zE" + } + ], + "authentication": [ + "did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc" + ], + "assertionMethod": [ + "did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc" + ], + "keyAgreement": [ + { + "id": "did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6LSm5B4fB9NA55xB7PSeMYTMS9sf8uboJvyZBaDLLSZ7Ryd", + "type": "X25519KeyAgreementKey2019", + "controller": "did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc", + "publicKeyBase58": "APzu8sLW4cND5j1g7i2W2qwPozNV6hkpgCrXqso2Q4Cs" + } + ], + "capabilityInvocation": [ + "did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc" + ], + "capabilityDelegation": [ + "did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc" + ] + } + }, + "didDocumentMetadata": {}, + "didRegistrationMetadata": {} + } + } + } + } + } + }, + "202": { + "description": "Wait for action to complete", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCreateWaitResponse" + }, + "examples": { + "Example 1": {} + } + } + } + }, + "500": { + "description": "Error creating did", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCreateFailedResponse" + }, + "examples": { + "Example 1": {} + } + } + } + } + }, + "description": "Create a new did.", + "tags": [ + "Dids" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DidCreateOptions" + } + } + } + } + } + }, + "/anoncreds/schemas/{schemaId}": { + "get": { + "operationId": "GetSchemaById", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnonCredsGetSchemaSuccessResponse" + }, + "examples": { + "Example 1": { + "value": { + "resolutionMetadata": {}, + "schemaMetadata": {}, + "schemaId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/schema-name/1.0", + "schema": { + "issuerId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv", + "name": "schema-name", + "version": "1.0", + "attrNames": [ + "age" + ] + } + } + } + } + } + } + }, + "400": { + "description": "Invalid schemaId or unknown AnonCreds method provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnonCredsGetSchemaFailedResponse" + }, + "examples": { + "Example 1": { + "value": { + "resolutionMetadata": { + "error": "notFound", + "message": "Schema not found" + }, + "schemaMetadata": {}, + "schemaId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/schema-name/1.0" + } + } + } + } + } + }, + "404": { + "description": "Schema not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnonCredsGetSchemaFailedResponse" + }, + "examples": { + "Example 1": { + "value": { + "resolutionMetadata": { + "error": "notFound", + "message": "Schema not found" + }, + "schemaMetadata": {}, + "schemaId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/schema-name/1.0" + } + } + } + } + } + }, + "500": { + "description": "Unknown error retrieving schema", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnonCredsGetSchemaFailedResponse" + }, + "examples": { + "Example 1": { + "value": { + "resolutionMetadata": { + "error": "notFound", + "message": "Schema not found" + }, + "schemaMetadata": {}, + "schemaId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/schema-name/1.0" + } + } + } + } + } + } + }, + "description": "Retrieve schema by schema id", + "tags": [ + "AnonCreds" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "schemaId", + "required": true, + "schema": { + "$ref": "#/components/schemas/AnonCredsSchemaId" + } + } + ] + } + }, + "/anoncreds/schemas": { + "post": { + "operationId": "RegisterSchema", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnonCredsRegisterSchemaSuccessResponse" + }, + "examples": { + "Example 1": { + "value": { + "registrationMetadata": {}, + "schemaMetadata": {}, + "schemaState": { + "state": "finished", + "schemaId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/schema-name/1.0", + "schema": { + "issuerId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv", + "name": "schema-name", + "version": "1.0", + "attrNames": [ + "string" + ] + } + } + } + } + } + } + } + }, + "202": { + "description": "Wait for action to complete", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnonCredsRegisterSchemaWaitResponse" + }, + "examples": { + "Example 1": {} + } + } + } + }, + "500": { + "description": "Unknown error registering schema", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnonCredsRegisterSchemaFailedResponse" + }, + "examples": { + "Example 1": { + "value": { + "registrationMetadata": {}, + "schemaMetadata": {}, + "schemaState": { + "state": "failed", + "reason": "Unknown error occurred while registering schema", + "schemaId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/schema-name/1.0" + } + } + } + } + } + } + } + }, + "description": "Creates a new AnonCreds schema and registers the schema in the AnonCreds registry", + "tags": [ + "AnonCreds" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnonCredsRegisterSchemaBody" + } + } + } + } + } + }, + "/anoncreds/credential-definitions/{credentialDefinitionId}": { + "get": { + "operationId": "GetCredentialDefinitionById", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnonCredsGetCredentialDefinitionSuccessResponse" + }, + "examples": { + "Example 1": { + "value": { + "resolutionMetadata": {}, + "credentialDefinitionMetadata": {}, + "credentialDefinitionId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/CLAIM_DEF/20/definition", + "credentialDefinition": { + "issuerId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv", + "schemaId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/schema-name/1.0", + "type": "CL", + "tag": "definition", + "value": { + "primary": { + "n": "string", + "s": "string", + "r": { + "master_secret": "string", + "string": "string" + }, + "rctxt": "string", + "z": "string" + }, + "revocation": { + "g": "1 string", + "g_dash": "string", + "h": "string", + "h0": "string", + "h1": "string", + "h2": "string", + "htilde": "string", + "h_cap": "string", + "u": "string", + "pk": "string", + "y": "string" + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Invalid credentialDefinitionId or unknown AnonCreds method provided", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnonCredsGetCredentialDefinitionFailedResponse" + }, + "examples": { + "Example 1": { + "value": { + "resolutionMetadata": { + "error": "notFound", + "message": "CredentialDefinition not found" + }, + "credentialDefinitionMetadata": {}, + "credentialDefinitionId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/CLAIM_DEF/20/definition" + } + } + } + } + } + }, + "404": { + "description": "CredentialDefinition not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnonCredsGetCredentialDefinitionFailedResponse" + }, + "examples": { + "Example 1": { + "value": { + "resolutionMetadata": { + "error": "notFound", + "message": "CredentialDefinition not found" + }, + "credentialDefinitionMetadata": {}, + "credentialDefinitionId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/CLAIM_DEF/20/definition" + } + } + } + } + } + }, + "500": { + "description": "Unknown error retrieving credentialDefinition", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnonCredsGetCredentialDefinitionFailedResponse" + }, + "examples": { + "Example 1": { + "value": { + "resolutionMetadata": { + "error": "notFound", + "message": "CredentialDefinition not found" + }, + "credentialDefinitionMetadata": {}, + "credentialDefinitionId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/CLAIM_DEF/20/definition" + } + } + } + } + } + } + }, + "description": "Retrieve credentialDefinition by credentialDefinition id", + "tags": [ + "AnonCreds" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [ + { + "in": "path", + "name": "credentialDefinitionId", + "required": true, + "schema": { + "$ref": "#/components/schemas/AnonCredsCredentialDefinitionId" + } + } + ] + } + }, + "/anoncreds/credential-definitions": { + "post": { + "operationId": "RegisterCredentialDefinition", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnonCredsRegisterCredentialDefinitionSuccessResponse" + }, + "examples": { + "Example 1": { + "value": { + "registrationMetadata": {}, + "credentialDefinitionMetadata": {}, + "credentialDefinitionState": { + "state": "finished", + "credentialDefinitionId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/credentialDefinition-name/1.0", + "credentialDefinition": { + "issuerId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv", + "schemaId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/schema-name/1.0", + "type": "CL", + "tag": "definition", + "value": { + "primary": { + "n": "string", + "s": "string", + "r": { + "master_secret": "string", + "string": "string" + }, + "rctxt": "string", + "z": "string" + }, + "revocation": { + "g": "1 string", + "g_dash": "string", + "h": "string", + "h0": "string", + "h1": "string", + "h2": "string", + "htilde": "string", + "h_cap": "string", + "u": "string", + "pk": "string", + "y": "string" + } + } + } + } + } + } + } + } + } + }, + "202": { + "description": "Wait for action to complete", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnonCredsRegisterCredentialDefinitionWaitResponse" + }, + "examples": { + "Example 1": {} + } + } + } + }, + "500": { + "description": "Unknown error registering credentialDefinition", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnonCredsRegisterCredentialDefinitionFailedResponse" + }, + "examples": { + "Example 1": { + "value": { + "registrationMetadata": {}, + "credentialDefinitionMetadata": {}, + "credentialDefinitionState": { + "state": "failed", + "reason": "Unknown error occurred while registering credentialDefinition", + "credentialDefinitionId": "did:indy:bcovrin:test:WgWxqztrNooG92RXvxSTWv/anoncreds/v0/SCHEMA/credentialDefinition-name/1.0" + } + } + } + } + } + } + } + }, + "description": "Creates a new AnonCreds credentialDefinition and registers the credentialDefinition in the AnonCreds registry", + "tags": [ + "AnonCreds" + ], + "security": [ + { + "tenants": [ + "tenant" + ] + } + ], + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnonCredsRegisterCredentialDefinitionBody" + } + } + } + } + } + }, + "/agent": { + "get": { + "operationId": "GetAgentInfo", + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AgentInfo" + }, + "examples": { + "Example 1": { + "value": { + "config": { + "label": "Example Agent", + "endpoints": [ + "http://localhost:3000" + ] + }, + "isInitialized": true + } + } + } + } + } + } + }, + "description": "Retrieve basic agent information", + "tags": [ + "Agent" + ], + "security": [ + { + "tenants": [ + "default" + ] + } + ], + "parameters": [] + } + } + }, + "servers": [ + { + "url": "/" + } + ] +} \ No newline at end of file diff --git a/packages/rest/src/index.ts b/packages/rest/src/index.ts index ecff65b1..abb5b07f 100644 --- a/packages/rest/src/index.ts +++ b/packages/rest/src/index.ts @@ -1,7 +1,7 @@ import 'reflect-metadata' import type { ServerConfig } from './utils/ServerConfig' -import type { Agent } from '@aries-framework/core' +import type { Agent } from '@credo-ts/core' import type { Socket } from 'net' import { Server } from 'ws' diff --git a/packages/rest/src/middlewareTemplate.ts.hbs b/packages/rest/src/middlewareTemplate.ts.hbs new file mode 100644 index 00000000..54cf0321 --- /dev/null +++ b/packages/rest/src/middlewareTemplate.ts.hbs @@ -0,0 +1,201 @@ +/* tslint:disable */ +/* eslint-disable */ +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +import { TsoaRoute, fetchMiddlewares, ExpressTemplateService } from '@tsoa/runtime'; +{{#each controllers}} +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +import { {{name}} } from '{{modulePath}}'; +{{/each}} +{{#if authenticationModule}} +import { expressAuthentication } from '{{authenticationModule}}'; +// @ts-ignore - no great way to install types from subpackage +{{/if}} +{{#if iocModule}} +import { iocContainer } from '{{iocModule}}'; +import type { IocContainer, IocContainerFactory } from '@tsoa/runtime'; +{{/if}} +import type { Request as ExRequest, Response as ExResponse, RequestHandler, Router } from 'express'; +{{#if useFileUploads}} +{{#if esm}} +import multer from 'multer'; +{{else}} +const multer = require('multer'); +{{/if}} +const upload = multer({{{json multerOpts}}}); +{{/if}} + +{{#if authenticationModule}} +const expressAuthenticationRecasted = expressAuthentication as (req: ExRequest, securityName: string, scopes?: string[], res?: ExResponse) => Promise; +{{/if}} + + +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + +const models: TsoaRoute.Models = { + {{#each models}} + "{{@key}}": { + {{#if enums}} + "dataType": "refEnum", + "enums": {{{json enums}}}, + {{/if}} + {{#if properties}} + "dataType": "refObject", + "properties": { + {{#each properties}} + "{{@key}}": {{{json this}}}, + {{/each}} + }, + "additionalProperties": {{{json additionalProperties}}}, + {{/if}} + {{#if type}} + "dataType": "refAlias", + "type": {{{json type}}}, + {{/if}} + }, + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + {{/each}} +}; +const templateService = new ExpressTemplateService(models, {{{ json minimalSwaggerConfig}}}); + +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + +export function RegisterRoutes(app: Router) { + // ########################################################################################################### + // NOTE: If you do not see routes for all of your controllers in this file, then you might not have informed tsoa of where to look + // Please look into the "controllerPathGlobs" config option described in the readme: https://github.com/lukeautry/tsoa + // ########################################################################################################### + {{#each controllers}} + {{#each actions}} + app.{{method}}('{{fullPath}}', + {{#if security.length}} + authenticateMiddleware({{json security}}), + {{/if}} + {{#if uploadFile}} + upload.fields({{json uploadFileName}}), + {{/if}} + {{#if uploadFiles}} + upload.array('{{uploadFilesName}}'), + {{/if}} + ...(fetchMiddlewares({{../name}})), + ...(fetchMiddlewares({{../name}}.prototype.{{name}})), + + {{#if ../../iocModule}}async {{/if}}function {{../name}}_{{name}}(request: ExRequest, response: ExResponse, next: any) { + const args: Record = { + {{#each parameters}} + {{@key}}: {{{json this}}}, + {{/each}} + }; + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + let validatedArgs: any[] = []; + try { + validatedArgs = templateService.getValidatedArgs({ args, request, response }); + + {{#if ../../iocModule}} + const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; + + const controller: any = await container.get<{{../name}}>({{../name}}); + if (typeof controller['setStatus'] === 'function') { + controller.setStatus(undefined); + } + {{else}} + const controller = new {{../name}}(); + {{/if}} + + await templateService.apiHandler({ + methodName: '{{name}}', + controller, + response, + next, + validatedArgs, + successStatus: {{successStatus}}, + }); + next() + } catch (err) { + return next(err); + } + }); + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + {{/each}} + {{/each}} + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + {{#if useSecurity}} + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + function authenticateMiddleware(security: TsoaRoute.Security[] = []) { + return async function runAuthenticationMiddleware(request: any, response: any, next: any) { + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + // keep track of failed auth attempts so we can hand back the most + // recent one. This behavior was previously existing so preserving it + // here + const failedAttempts: any[] = []; + const pushAndRethrow = (error: any) => { + failedAttempts.push(error); + throw error; + }; + + const secMethodOrPromises: Promise[] = []; + for (const secMethod of security) { + if (Object.keys(secMethod).length > 1) { + const secMethodAndPromises: Promise[] = []; + + for (const name in secMethod) { + secMethodAndPromises.push( + expressAuthenticationRecasted(request, name, secMethod[name], response) + .catch(pushAndRethrow) + ); + } + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + secMethodOrPromises.push(Promise.all(secMethodAndPromises) + .then(users => { return users[0]; })); + } else { + for (const name in secMethod) { + secMethodOrPromises.push( + expressAuthenticationRecasted(request, name, secMethod[name], response) + .catch(pushAndRethrow) + ); + } + } + } + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + + try { + request['user'] = await Promise.any(secMethodOrPromises); + + // Response was sent in middleware, abort + if (response.writableEnded) { + return; + } + + next(); + } + catch(err) { + // Show most recent error as response + const error = failedAttempts.pop(); + error.status = error.status || 401; + + // Response was sent in middleware, abort + if (response.writableEnded) { + return; + } + next(error); + } + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa + } + } + {{/if}} + + // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa +} + +// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa \ No newline at end of file diff --git a/packages/rest/src/routes/routes.ts b/packages/rest/src/routes/routes.ts deleted file mode 100644 index 19b7920b..00000000 --- a/packages/rest/src/routes/routes.ts +++ /dev/null @@ -1,1879 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -import { Controller, ValidationService, FieldErrors, ValidateError, TsoaRoute, HttpStatusCodeLiteral, TsoaResponse, fetchMiddlewares } from '@tsoa/runtime'; -// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -import { AgentController } from './../controllers/agent/AgentController'; -// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -import { BasicMessageController } from './../controllers/basic-messages/BasicMessageController'; -// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -import { ConnectionController } from './../controllers/connections/ConnectionController'; -// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -import { CredentialController } from './../controllers/credentials/CredentialController'; -// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -import { CredentialDefinitionController } from './../controllers/credentials/CredentialDefinitionController'; -// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -import { SchemaController } from './../controllers/credentials/SchemaController'; -// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -import { DidController } from './../controllers/did/DidController'; -// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -import { OutOfBandController } from './../controllers/outofband/OutOfBandController'; -// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -import { ProofController } from './../controllers/proofs/ProofController'; -import { iocContainer } from './../utils/tsyringeTsoaIocContainer'; -import { IocContainer, IocContainerFactory } from '@tsoa/runtime'; -import type { RequestHandler } from 'express'; -import * as express from 'express'; - -// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - -const models: TsoaRoute.Models = { - "AgentInfo": { - "dataType": "refObject", - "properties": { - "label": {"dataType":"string","required":true}, - "endpoints": {"dataType":"array","array":{"dataType":"string"},"required":true}, - "isInitialized": {"dataType":"boolean","required":true}, - "publicDid": {"dataType":"nestedObjectLiteral","nestedProperties":{"verkey":{"dataType":"string","required":true},"did":{"dataType":"string","required":true}}}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Record_string.unknown_": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "BasicMessageRecord": { - "dataType": "refAlias", - "type": {"ref":"Record_string.unknown_","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "RecordId": { - "dataType": "refAlias", - "type": {"dataType":"string","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Record_content.string_": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"content":{"dataType":"string"}},"validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DidExchangeState": { - "dataType": "refEnum", - "enums": ["start","invitation-sent","invitation-received","request-sent","request-received","response-sent","response-received","abandoned","completed"], - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Record_string.any_": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{},"validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredentialState": { - "dataType": "refEnum", - "enums": ["proposal-sent","proposal-received","offer-sent","offer-received","declined","request-sent","request-received","credential-issued","credential-received","done"], - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "ProtocolVersionType_CredentialServices_": { - "dataType": "refAlias", - "type": {"dataType":"string","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AutoAcceptCredential": { - "dataType": "refEnum", - "enums": ["always","contentApproved","never"], - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "ProposeCredentialOptions": { - "dataType": "refObject", - "properties": { - "protocolVersion": {"ref":"ProtocolVersionType_CredentialServices_","required":true}, - "credentialFormats": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"dataType":"nestedObjectLiteral","nestedProperties":{"attributes":{"dataType":"array","array":{"dataType":"nestedObjectLiteral","nestedProperties":{"value":{"dataType":"string","required":true},"name":{"dataType":"string","required":true}}},"required":true},"issuerDid":{"dataType":"string","required":true},"credentialDefinitionId":{"dataType":"string","required":true},"schemaVersion":{"dataType":"string","required":true},"schemaName":{"dataType":"string","required":true},"schemaId":{"dataType":"string","required":true},"schemaIssuerDid":{"dataType":"string","required":true}},"required":true}},"required":true}, - "autoAcceptCredential": {"ref":"AutoAcceptCredential"}, - "comment": {"dataType":"string"}, - "connectionId": {"dataType":"string","required":true}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AcceptCredentialProposalOptions": { - "dataType": "refObject", - "properties": { - "credentialFormats": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"dataType":"nestedObjectLiteral","nestedProperties":{"attributes":{"dataType":"array","array":{"dataType":"nestedObjectLiteral","nestedProperties":{"value":{"dataType":"string","required":true},"name":{"dataType":"string","required":true}}},"required":true},"issuerDid":{"dataType":"string","required":true},"credentialDefinitionId":{"dataType":"string","required":true},"schemaVersion":{"dataType":"string","required":true},"schemaName":{"dataType":"string","required":true},"schemaId":{"dataType":"string","required":true},"schemaIssuerDid":{"dataType":"string","required":true}},"required":true}}}, - "autoAcceptCredential": {"ref":"AutoAcceptCredential"}, - "comment": {"dataType":"string"}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CreateOfferOptions": { - "dataType": "refObject", - "properties": { - "protocolVersion": {"ref":"ProtocolVersionType_CredentialServices_","required":true}, - "credentialFormats": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"dataType":"nestedObjectLiteral","nestedProperties":{"attributes":{"dataType":"array","array":{"dataType":"nestedObjectLiteral","nestedProperties":{"value":{"dataType":"string","required":true},"name":{"dataType":"string","required":true}}},"required":true},"credentialDefinitionId":{"dataType":"string","required":true}},"required":true}},"required":true}, - "autoAcceptCredential": {"ref":"AutoAcceptCredential"}, - "comment": {"dataType":"string"}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "OfferCredentialOptions": { - "dataType": "refObject", - "properties": { - "protocolVersion": {"ref":"ProtocolVersionType_CredentialServices_","required":true}, - "credentialFormats": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"dataType":"nestedObjectLiteral","nestedProperties":{"attributes":{"dataType":"array","array":{"dataType":"nestedObjectLiteral","nestedProperties":{"value":{"dataType":"string","required":true},"name":{"dataType":"string","required":true}}},"required":true},"credentialDefinitionId":{"dataType":"string","required":true}},"required":true}},"required":true}, - "autoAcceptCredential": {"ref":"AutoAcceptCredential"}, - "comment": {"dataType":"string"}, - "connectionId": {"dataType":"string","required":true}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "IndyAcceptOfferFormat": { - "dataType": "refObject", - "properties": { - "holderDid": {"dataType":"string"}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredentialFormatPayload_CredentialFormats.acceptOffer_": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"ref":"IndyAcceptOfferFormat"}},"validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AcceptCredentialOfferOptions": { - "dataType": "refObject", - "properties": { - "credentialFormats": {"ref":"CredentialFormatPayload_CredentialFormats.acceptOffer_"}, - "autoAcceptCredential": {"ref":"AutoAcceptCredential"}, - "comment": {"dataType":"string"}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredentialFormatPayload_CredentialFormats.acceptRequest_": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"indy":{"ref":"Record_string.any_"}},"validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AcceptCredentialRequestOptions": { - "dataType": "refObject", - "properties": { - "credentialFormats": {"ref":"CredentialFormatPayload_CredentialFormats.acceptRequest_"}, - "autoAcceptCredential": {"ref":"AutoAcceptCredential"}, - "comment": {"dataType":"string"}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "CredentialDefinitionId": { - "dataType": "refAlias", - "type": {"dataType":"string","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "SchemaId": { - "dataType": "refAlias", - "type": {"dataType":"string","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Version": { - "dataType": "refAlias", - "type": {"dataType":"string","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DidResolutionMetadata": { - "dataType": "refObject", - "properties": { - "contentType": {"dataType":"string"}, - "error": {"dataType":"union","subSchemas":[{"dataType":"enum","enums":["invalidDid"]},{"dataType":"enum","enums":["notFound"]},{"dataType":"enum","enums":["representationNotSupported"]},{"dataType":"enum","enums":["unsupportedDidMethod"]},{"dataType":"string"}]}, - "message": {"dataType":"string"}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DidDocument": { - "dataType": "refAlias", - "type": {"ref":"Record_string.any_","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DIDDocumentMetadata": { - "dataType": "refObject", - "properties": { - "created": {"dataType":"string"}, - "updated": {"dataType":"string"}, - "deactivated": {"dataType":"boolean"}, - "versionId": {"dataType":"string"}, - "nextUpdate": {"dataType":"string"}, - "nextVersionId": {"dataType":"string"}, - "equivalentId": {"dataType":"string"}, - "canonicalId": {"dataType":"string"}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DidDocumentMetadata": { - "dataType": "refAlias", - "type": {"ref":"DIDDocumentMetadata","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "DidResolutionResult": { - "dataType": "refObject", - "properties": { - "didResolutionMetadata": {"ref":"DidResolutionMetadata","required":true}, - "didDocument": {"dataType":"union","subSchemas":[{"ref":"DidDocument"},{"dataType":"enum","enums":[null]}],"required":true}, - "didDocumentMetadata": {"ref":"DidDocumentMetadata","required":true}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Did": { - "dataType": "refAlias", - "type": {"dataType":"string","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "HandshakeProtocol": { - "dataType": "refEnum", - "enums": ["https://didcomm.org/connections/1.0","https://didcomm.org/didexchange/1.0"], - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Pick_CreateOutOfBandInvitationConfig.Exclude_keyofCreateOutOfBandInvitationConfig.routing-or-appendedAttachments-or-messages__": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"alias":{"dataType":"string"},"label":{"dataType":"string"},"imageUrl":{"dataType":"string"},"goalCode":{"dataType":"string"},"goal":{"dataType":"string"},"handshake":{"dataType":"boolean"},"handshakeProtocols":{"dataType":"array","array":{"dataType":"refEnum","ref":"HandshakeProtocol"}},"multiUseInvitation":{"dataType":"boolean"},"autoAcceptConnection":{"dataType":"boolean"}},"validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Omit_CreateOutOfBandInvitationConfig.routing-or-appendedAttachments-or-messages_": { - "dataType": "refAlias", - "type": {"ref":"Pick_CreateOutOfBandInvitationConfig.Exclude_keyofCreateOutOfBandInvitationConfig.routing-or-appendedAttachments-or-messages__","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Pick_CreateLegacyInvitationConfig.Exclude_keyofCreateLegacyInvitationConfig.routing__": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"alias":{"dataType":"string"},"label":{"dataType":"string"},"imageUrl":{"dataType":"string"},"multiUseInvitation":{"dataType":"boolean"},"autoAcceptConnection":{"dataType":"boolean"}},"validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Omit_CreateLegacyInvitationConfig.routing_": { - "dataType": "refAlias", - "type": {"ref":"Pick_CreateLegacyInvitationConfig.Exclude_keyofCreateLegacyInvitationConfig.routing__","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AgentMessageType": { - "dataType": "refObject", - "properties": { - "@id": {"dataType":"string","required":true}, - "@type": {"dataType":"string","required":true}, - }, - "additionalProperties": {"dataType":"any"}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "OutOfBandDidCommService": { - "dataType": "refObject", - "properties": { - "id": {"dataType":"string","required":true}, - "serviceEndpoint": {"dataType":"string","required":true}, - "type": {"dataType":"string","required":true}, - "recipientKeys": {"dataType":"array","array":{"dataType":"string"},"required":true}, - "routingKeys": {"dataType":"array","array":{"dataType":"string"}}, - "accept": {"dataType":"array","array":{"dataType":"string"}}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Pick_OutOfBandInvitationSchema.Exclude_keyofOutOfBandInvitationSchema.appendedAttachments__": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"label":{"dataType":"string","required":true},"imageUrl":{"dataType":"string"},"goalCode":{"dataType":"string"},"goal":{"dataType":"string"},"@id":{"dataType":"string"},"@type":{"dataType":"string","required":true},"accept":{"dataType":"array","array":{"dataType":"string"}},"handshake_protocols":{"dataType":"array","array":{"dataType":"refEnum","ref":"HandshakeProtocol"}},"services":{"dataType":"array","array":{"dataType":"union","subSchemas":[{"ref":"OutOfBandDidCommService"},{"dataType":"string"}]},"required":true}},"validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Omit_OutOfBandInvitationSchema.appendedAttachments_": { - "dataType": "refAlias", - "type": {"ref":"Pick_OutOfBandInvitationSchema.Exclude_keyofOutOfBandInvitationSchema.appendedAttachments__","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Pick_ReceiveOutOfBandInvitationConfig.Exclude_keyofReceiveOutOfBandInvitationConfig.routing__": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"alias":{"dataType":"string"},"label":{"dataType":"string"},"imageUrl":{"dataType":"string"},"autoAcceptConnection":{"dataType":"boolean"},"autoAcceptInvitation":{"dataType":"boolean"},"reuseConnection":{"dataType":"boolean"}},"validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Omit_ReceiveOutOfBandInvitationConfig.routing_": { - "dataType": "refAlias", - "type": {"ref":"Pick_ReceiveOutOfBandInvitationConfig.Exclude_keyofReceiveOutOfBandInvitationConfig.routing__","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "ReceiveInvitationProps": { - "dataType": "refObject", - "properties": { - "alias": {"dataType":"string"}, - "label": {"dataType":"string"}, - "imageUrl": {"dataType":"string"}, - "autoAcceptConnection": {"dataType":"boolean"}, - "autoAcceptInvitation": {"dataType":"boolean"}, - "reuseConnection": {"dataType":"boolean"}, - "invitation": {"ref":"Omit_OutOfBandInvitationSchema.appendedAttachments_","required":true}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "ReceiveInvitationByUrlProps": { - "dataType": "refObject", - "properties": { - "alias": {"dataType":"string"}, - "label": {"dataType":"string"}, - "imageUrl": {"dataType":"string"}, - "autoAcceptConnection": {"dataType":"boolean"}, - "autoAcceptInvitation": {"dataType":"boolean"}, - "reuseConnection": {"dataType":"boolean"}, - "invitationUrl": {"dataType":"string","required":true}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AcceptInvitationConfig": { - "dataType": "refObject", - "properties": { - "autoAcceptConnection": {"dataType":"boolean"}, - "reuseConnection": {"dataType":"boolean"}, - "label": {"dataType":"string"}, - "alias": {"dataType":"string"}, - "imageUrl": {"dataType":"string"}, - "mediatorId": {"dataType":"string"}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "PresentationPreviewAttributeOptions": { - "dataType": "refObject", - "properties": { - "name": {"dataType":"string","required":true}, - "credentialDefinitionId": {"dataType":"string"}, - "mimeType": {"dataType":"string"}, - "value": {"dataType":"string"}, - "referent": {"dataType":"string"}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "PredicateType": { - "dataType": "refEnum", - "enums": ["<","<=",">",">="], - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "PresentationPreviewPredicateOptions": { - "dataType": "refObject", - "properties": { - "name": {"dataType":"string","required":true}, - "credentialDefinitionId": {"dataType":"string","required":true}, - "predicate": {"ref":"PredicateType","required":true}, - "threshold": {"dataType":"double","required":true}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AutoAcceptProof": { - "dataType": "refEnum", - "enums": ["always","contentApproved","never"], - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "RequestProofProposalOptions": { - "dataType": "refObject", - "properties": { - "connectionId": {"dataType":"string","required":true}, - "attributes": {"dataType":"array","array":{"dataType":"refObject","ref":"PresentationPreviewAttributeOptions"},"required":true}, - "predicates": {"dataType":"array","array":{"dataType":"refObject","ref":"PresentationPreviewPredicateOptions"},"required":true}, - "comment": {"dataType":"string"}, - "autoAcceptProof": {"ref":"AutoAcceptProof"}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "ProofRecord": { - "dataType": "refAlias", - "type": {"ref":"Record_string.unknown_","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "IndyRevocationInterval": { - "dataType": "refObject", - "properties": { - "from": {"dataType":"double"}, - "to": {"dataType":"double"}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AttributeValue": { - "dataType": "refObject", - "properties": { - "name": {"dataType":"string","required":true}, - "value": {"dataType":"string","required":true}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "AttributeFilter": { - "dataType": "refObject", - "properties": { - "schemaId": {"dataType":"string"}, - "schemaIssuerDid": {"dataType":"string"}, - "schemaName": {"dataType":"string"}, - "schemaVersion": {"dataType":"string"}, - "issuerDid": {"dataType":"string"}, - "credentialDefinitionId": {"dataType":"string"}, - "attributeValue": {"ref":"AttributeValue"}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "ProofAttributeInfo": { - "dataType": "refObject", - "properties": { - "name": {"dataType":"string"}, - "names": {"dataType":"array","array":{"dataType":"string"}}, - "nonRevoked": {"ref":"IndyRevocationInterval"}, - "restrictions": {"dataType":"array","array":{"dataType":"refObject","ref":"AttributeFilter"}}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "ProofPredicateInfo": { - "dataType": "refObject", - "properties": { - "name": {"dataType":"string","required":true}, - "predicateType": {"ref":"PredicateType","required":true}, - "predicateValue": {"dataType":"double","required":true}, - "nonRevoked": {"ref":"IndyRevocationInterval"}, - "restrictions": {"dataType":"array","array":{"dataType":"refObject","ref":"AttributeFilter"}}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Pick_RequestProofOptions.Exclude_keyofRequestProofOptions.connectionId__": { - "dataType": "refAlias", - "type": {"dataType":"nestedObjectLiteral","nestedProperties":{"comment":{"dataType":"string"},"autoAcceptProof":{"ref":"AutoAcceptProof"},"proofRequestOptions":{"dataType":"nestedObjectLiteral","nestedProperties":{"requestedPredicates":{"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"ref":"ProofPredicateInfo"}},"requestedAttributes":{"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"ref":"ProofAttributeInfo"}},"version":{"dataType":"string","required":true},"name":{"dataType":"string","required":true}},"required":true},"parentThreadId":{"dataType":"string"}},"validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "Omit_RequestProofOptions.connectionId_": { - "dataType": "refAlias", - "type": {"ref":"Pick_RequestProofOptions.Exclude_keyofRequestProofOptions.connectionId__","validators":{}}, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - "RequestProofOptions": { - "dataType": "refObject", - "properties": { - "comment": {"dataType":"string"}, - "autoAcceptProof": {"ref":"AutoAcceptProof"}, - "parentThreadId": {"dataType":"string"}, - "connectionId": {"dataType":"string","required":true}, - "proofRequestOptions": {"dataType":"nestedObjectLiteral","nestedProperties":{"requestedPredicates":{"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"ref":"ProofPredicateInfo"}},"requestedAttributes":{"dataType":"nestedObjectLiteral","nestedProperties":{},"additionalProperties":{"ref":"ProofAttributeInfo"}},"version":{"dataType":"string","required":true},"name":{"dataType":"string","required":true}},"required":true}, - }, - "additionalProperties": false, - }, - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -}; -const validationService = new ValidationService(models); - -// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - -export function RegisterRoutes(app: express.Router) { - // ########################################################################################################### - // NOTE: If you do not see routes for all of your controllers in this file, then you might not have informed tsoa of where to look - // Please look into the "controllerPathGlobs" config option described in the readme: https://github.com/lukeautry/tsoa - // ########################################################################################################### - app.get('/agent', - ...(fetchMiddlewares(AgentController)), - ...(fetchMiddlewares(AgentController.prototype.getAgentInfo)), - - async function AgentController_getAgentInfo(request: any, response: any, next: any) { - const args = { - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(AgentController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.getAgentInfo.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.get('/basic-messages/:connectionId', - ...(fetchMiddlewares(BasicMessageController)), - ...(fetchMiddlewares(BasicMessageController.prototype.getBasicMessages)), - - async function BasicMessageController_getBasicMessages(request: any, response: any, next: any) { - const args = { - connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(BasicMessageController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.getBasicMessages.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/basic-messages/:connectionId', - ...(fetchMiddlewares(BasicMessageController)), - ...(fetchMiddlewares(BasicMessageController.prototype.sendMessage)), - - async function BasicMessageController_sendMessage(request: any, response: any, next: any) { - const args = { - connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, - request: {"in":"body","name":"request","required":true,"ref":"Record_content.string_"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(BasicMessageController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.sendMessage.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.get('/connections', - ...(fetchMiddlewares(ConnectionController)), - ...(fetchMiddlewares(ConnectionController.prototype.getAllConnections)), - - async function ConnectionController_getAllConnections(request: any, response: any, next: any) { - const args = { - outOfBandId: {"in":"query","name":"outOfBandId","dataType":"string"}, - alias: {"in":"query","name":"alias","dataType":"string"}, - state: {"in":"query","name":"state","ref":"DidExchangeState"}, - myDid: {"in":"query","name":"myDid","dataType":"string"}, - theirDid: {"in":"query","name":"theirDid","dataType":"string"}, - theirLabel: {"in":"query","name":"theirLabel","dataType":"string"}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(ConnectionController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.getAllConnections.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.get('/connections/:connectionId', - ...(fetchMiddlewares(ConnectionController)), - ...(fetchMiddlewares(ConnectionController.prototype.getConnectionById)), - - async function ConnectionController_getConnectionById(request: any, response: any, next: any) { - const args = { - connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(ConnectionController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.getConnectionById.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.delete('/connections/:connectionId', - ...(fetchMiddlewares(ConnectionController)), - ...(fetchMiddlewares(ConnectionController.prototype.deleteConnection)), - - async function ConnectionController_deleteConnection(request: any, response: any, next: any) { - const args = { - connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(ConnectionController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.deleteConnection.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/connections/:connectionId/accept-request', - ...(fetchMiddlewares(ConnectionController)), - ...(fetchMiddlewares(ConnectionController.prototype.acceptRequest)), - - async function ConnectionController_acceptRequest(request: any, response: any, next: any) { - const args = { - connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(ConnectionController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.acceptRequest.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/connections/:connectionId/accept-response', - ...(fetchMiddlewares(ConnectionController)), - ...(fetchMiddlewares(ConnectionController.prototype.acceptResponse)), - - async function ConnectionController_acceptResponse(request: any, response: any, next: any) { - const args = { - connectionId: {"in":"path","name":"connectionId","required":true,"ref":"RecordId"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(ConnectionController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.acceptResponse.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.get('/credentials', - ...(fetchMiddlewares(CredentialController)), - ...(fetchMiddlewares(CredentialController.prototype.getAllCredentials)), - - async function CredentialController_getAllCredentials(request: any, response: any, next: any) { - const args = { - threadId: {"in":"query","name":"threadId","dataType":"string"}, - connectionId: {"in":"query","name":"connectionId","dataType":"string"}, - state: {"in":"query","name":"state","ref":"CredentialState"}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(CredentialController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.getAllCredentials.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.get('/credentials/:credentialRecordId', - ...(fetchMiddlewares(CredentialController)), - ...(fetchMiddlewares(CredentialController.prototype.getCredentialById)), - - async function CredentialController_getCredentialById(request: any, response: any, next: any) { - const args = { - credentialRecordId: {"in":"path","name":"credentialRecordId","required":true,"ref":"RecordId"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(CredentialController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.getCredentialById.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.delete('/credentials/:credentialRecordId', - ...(fetchMiddlewares(CredentialController)), - ...(fetchMiddlewares(CredentialController.prototype.deleteCredential)), - - async function CredentialController_deleteCredential(request: any, response: any, next: any) { - const args = { - credentialRecordId: {"in":"path","name":"credentialRecordId","required":true,"ref":"RecordId"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(CredentialController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.deleteCredential.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/credentials/propose-credential', - ...(fetchMiddlewares(CredentialController)), - ...(fetchMiddlewares(CredentialController.prototype.proposeCredential)), - - async function CredentialController_proposeCredential(request: any, response: any, next: any) { - const args = { - options: {"in":"body","name":"options","required":true,"ref":"ProposeCredentialOptions"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(CredentialController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.proposeCredential.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/credentials/:credentialRecordId/accept-proposal', - ...(fetchMiddlewares(CredentialController)), - ...(fetchMiddlewares(CredentialController.prototype.acceptProposal)), - - async function CredentialController_acceptProposal(request: any, response: any, next: any) { - const args = { - credentialRecordId: {"in":"path","name":"credentialRecordId","required":true,"ref":"RecordId"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - options: {"in":"body","name":"options","ref":"AcceptCredentialProposalOptions"}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(CredentialController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.acceptProposal.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/credentials/create-offer', - ...(fetchMiddlewares(CredentialController)), - ...(fetchMiddlewares(CredentialController.prototype.createOffer)), - - async function CredentialController_createOffer(request: any, response: any, next: any) { - const args = { - options: {"in":"body","name":"options","required":true,"ref":"CreateOfferOptions"}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(CredentialController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.createOffer.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/credentials/offer-credential', - ...(fetchMiddlewares(CredentialController)), - ...(fetchMiddlewares(CredentialController.prototype.offerCredential)), - - async function CredentialController_offerCredential(request: any, response: any, next: any) { - const args = { - options: {"in":"body","name":"options","required":true,"ref":"OfferCredentialOptions"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(CredentialController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.offerCredential.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/credentials/:credentialRecordId/accept-offer', - ...(fetchMiddlewares(CredentialController)), - ...(fetchMiddlewares(CredentialController.prototype.acceptOffer)), - - async function CredentialController_acceptOffer(request: any, response: any, next: any) { - const args = { - credentialRecordId: {"in":"path","name":"credentialRecordId","required":true,"ref":"RecordId"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - options: {"in":"body","name":"options","ref":"AcceptCredentialOfferOptions"}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(CredentialController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.acceptOffer.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/credentials/:credentialRecordId/accept-request', - ...(fetchMiddlewares(CredentialController)), - ...(fetchMiddlewares(CredentialController.prototype.acceptRequest)), - - async function CredentialController_acceptRequest(request: any, response: any, next: any) { - const args = { - credentialRecordId: {"in":"path","name":"credentialRecordId","required":true,"ref":"RecordId"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - options: {"in":"body","name":"options","ref":"AcceptCredentialRequestOptions"}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(CredentialController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.acceptRequest.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/credentials/:credentialRecordId/accept-credential', - ...(fetchMiddlewares(CredentialController)), - ...(fetchMiddlewares(CredentialController.prototype.acceptCredential)), - - async function CredentialController_acceptCredential(request: any, response: any, next: any) { - const args = { - credentialRecordId: {"in":"path","name":"credentialRecordId","required":true,"ref":"RecordId"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(CredentialController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.acceptCredential.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.get('/credential-definitions/:credentialDefinitionId', - ...(fetchMiddlewares(CredentialDefinitionController)), - ...(fetchMiddlewares(CredentialDefinitionController.prototype.getCredentialDefinitionById)), - - async function CredentialDefinitionController_getCredentialDefinitionById(request: any, response: any, next: any) { - const args = { - credentialDefinitionId: {"in":"path","name":"credentialDefinitionId","required":true,"ref":"CredentialDefinitionId"}, - badRequestError: {"in":"res","name":"400","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(CredentialDefinitionController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.getCredentialDefinitionById.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/credential-definitions', - ...(fetchMiddlewares(CredentialDefinitionController)), - ...(fetchMiddlewares(CredentialDefinitionController.prototype.createCredentialDefinition)), - - async function CredentialDefinitionController_createCredentialDefinition(request: any, response: any, next: any) { - const args = { - credentialDefinitionRequest: {"in":"body","name":"credentialDefinitionRequest","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"tag":{"dataType":"string","required":true},"supportRevocation":{"dataType":"boolean","required":true},"schemaId":{"ref":"SchemaId","required":true}}}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(CredentialDefinitionController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.createCredentialDefinition.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.get('/schemas/:schemaId', - ...(fetchMiddlewares(SchemaController)), - ...(fetchMiddlewares(SchemaController.prototype.getSchemaById)), - - async function SchemaController_getSchemaById(request: any, response: any, next: any) { - const args = { - schemaId: {"in":"path","name":"schemaId","required":true,"ref":"SchemaId"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - forbiddenError: {"in":"res","name":"403","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - badRequestError: {"in":"res","name":"400","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(SchemaController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.getSchemaById.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/schemas', - ...(fetchMiddlewares(SchemaController)), - ...(fetchMiddlewares(SchemaController.prototype.createSchema)), - - async function SchemaController_createSchema(request: any, response: any, next: any) { - const args = { - schema: {"in":"body","name":"schema","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"attributes":{"dataType":"array","array":{"dataType":"string"},"required":true},"version":{"ref":"Version","required":true},"name":{"dataType":"string","required":true}}}, - forbiddenError: {"in":"res","name":"400","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(SchemaController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.createSchema.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.get('/dids/:did', - ...(fetchMiddlewares(DidController)), - ...(fetchMiddlewares(DidController.prototype.getDidRecordByDid)), - - async function DidController_getDidRecordByDid(request: any, response: any, next: any) { - const args = { - did: {"in":"path","name":"did","required":true,"ref":"Did"}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(DidController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.getDidRecordByDid.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.get('/oob', - ...(fetchMiddlewares(OutOfBandController)), - ...(fetchMiddlewares(OutOfBandController.prototype.getAllOutOfBandRecords)), - - async function OutOfBandController_getAllOutOfBandRecords(request: any, response: any, next: any) { - const args = { - invitationId: {"in":"query","name":"invitationId","ref":"RecordId"}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(OutOfBandController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.getAllOutOfBandRecords.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.get('/oob/:outOfBandId', - ...(fetchMiddlewares(OutOfBandController)), - ...(fetchMiddlewares(OutOfBandController.prototype.getOutOfBandRecordById)), - - async function OutOfBandController_getOutOfBandRecordById(request: any, response: any, next: any) { - const args = { - outOfBandId: {"in":"path","name":"outOfBandId","required":true,"ref":"RecordId"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(OutOfBandController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.getOutOfBandRecordById.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/oob/create-invitation', - ...(fetchMiddlewares(OutOfBandController)), - ...(fetchMiddlewares(OutOfBandController.prototype.createInvitation)), - - async function OutOfBandController_createInvitation(request: any, response: any, next: any) { - const args = { - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - config: {"in":"body","name":"config","ref":"Omit_CreateOutOfBandInvitationConfig.routing-or-appendedAttachments-or-messages_"}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(OutOfBandController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.createInvitation.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/oob/create-legacy-invitation', - ...(fetchMiddlewares(OutOfBandController)), - ...(fetchMiddlewares(OutOfBandController.prototype.createLegacyInvitation)), - - async function OutOfBandController_createLegacyInvitation(request: any, response: any, next: any) { - const args = { - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - config: {"in":"body","name":"config","ref":"Omit_CreateLegacyInvitationConfig.routing_"}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(OutOfBandController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.createLegacyInvitation.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/oob/create-legacy-connectionless-invitation', - ...(fetchMiddlewares(OutOfBandController)), - ...(fetchMiddlewares(OutOfBandController.prototype.createLegacyConnectionlessInvitation)), - - async function OutOfBandController_createLegacyConnectionlessInvitation(request: any, response: any, next: any) { - const args = { - config: {"in":"body","name":"config","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"domain":{"dataType":"string","required":true},"message":{"ref":"AgentMessageType","required":true},"recordId":{"dataType":"string","required":true}}}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(OutOfBandController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.createLegacyConnectionlessInvitation.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/oob/receive-invitation', - ...(fetchMiddlewares(OutOfBandController)), - ...(fetchMiddlewares(OutOfBandController.prototype.receiveInvitation)), - - async function OutOfBandController_receiveInvitation(request: any, response: any, next: any) { - const args = { - invitationRequest: {"in":"body","name":"invitationRequest","required":true,"ref":"ReceiveInvitationProps"}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(OutOfBandController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.receiveInvitation.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/oob/receive-invitation-url', - ...(fetchMiddlewares(OutOfBandController)), - ...(fetchMiddlewares(OutOfBandController.prototype.receiveInvitationFromUrl)), - - async function OutOfBandController_receiveInvitationFromUrl(request: any, response: any, next: any) { - const args = { - invitationRequest: {"in":"body","name":"invitationRequest","required":true,"ref":"ReceiveInvitationByUrlProps"}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(OutOfBandController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.receiveInvitationFromUrl.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/oob/:outOfBandId/accept-invitation', - ...(fetchMiddlewares(OutOfBandController)), - ...(fetchMiddlewares(OutOfBandController.prototype.acceptInvitation)), - - async function OutOfBandController_acceptInvitation(request: any, response: any, next: any) { - const args = { - outOfBandId: {"in":"path","name":"outOfBandId","required":true,"ref":"RecordId"}, - acceptInvitationConfig: {"in":"body","name":"acceptInvitationConfig","required":true,"ref":"AcceptInvitationConfig"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(OutOfBandController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.acceptInvitation.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.delete('/oob/:outOfBandId', - ...(fetchMiddlewares(OutOfBandController)), - ...(fetchMiddlewares(OutOfBandController.prototype.deleteOutOfBandRecord)), - - async function OutOfBandController_deleteOutOfBandRecord(request: any, response: any, next: any) { - const args = { - outOfBandId: {"in":"path","name":"outOfBandId","required":true,"ref":"RecordId"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(OutOfBandController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.deleteOutOfBandRecord.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.get('/proofs', - ...(fetchMiddlewares(ProofController)), - ...(fetchMiddlewares(ProofController.prototype.getAllProofs)), - - async function ProofController_getAllProofs(request: any, response: any, next: any) { - const args = { - threadId: {"in":"query","name":"threadId","dataType":"string"}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(ProofController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.getAllProofs.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.get('/proofs/:proofRecordId', - ...(fetchMiddlewares(ProofController)), - ...(fetchMiddlewares(ProofController.prototype.getProofById)), - - async function ProofController_getProofById(request: any, response: any, next: any) { - const args = { - proofRecordId: {"in":"path","name":"proofRecordId","required":true,"ref":"RecordId"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(ProofController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.getProofById.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.delete('/proofs/:proofRecordId', - ...(fetchMiddlewares(ProofController)), - ...(fetchMiddlewares(ProofController.prototype.deleteProof)), - - async function ProofController_deleteProof(request: any, response: any, next: any) { - const args = { - proofRecordId: {"in":"path","name":"proofRecordId","required":true,"ref":"RecordId"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(ProofController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.deleteProof.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/proofs/propose-proof', - ...(fetchMiddlewares(ProofController)), - ...(fetchMiddlewares(ProofController.prototype.proposeProof)), - - async function ProofController_proposeProof(request: any, response: any, next: any) { - const args = { - proposal: {"in":"body","name":"proposal","required":true,"ref":"RequestProofProposalOptions"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(ProofController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.proposeProof.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/proofs/:proofRecordId/accept-proposal', - ...(fetchMiddlewares(ProofController)), - ...(fetchMiddlewares(ProofController.prototype.acceptProposal)), - - async function ProofController_acceptProposal(request: any, response: any, next: any) { - const args = { - proofRecordId: {"in":"path","name":"proofRecordId","required":true,"dataType":"string"}, - proposal: {"in":"body","name":"proposal","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"comment":{"dataType":"string"},"request":{"dataType":"nestedObjectLiteral","nestedProperties":{"nonce":{"dataType":"string"},"version":{"dataType":"string"},"name":{"dataType":"string"}},"required":true}}}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(ProofController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.acceptProposal.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/proofs/request-outofband-proof', - ...(fetchMiddlewares(ProofController)), - ...(fetchMiddlewares(ProofController.prototype.requestProofOutOfBand)), - - async function ProofController_requestProofOutOfBand(request: any, response: any, next: any) { - const args = { - request: {"in":"body","name":"request","required":true,"ref":"Omit_RequestProofOptions.connectionId_"}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(ProofController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.requestProofOutOfBand.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/proofs/request-proof', - ...(fetchMiddlewares(ProofController)), - ...(fetchMiddlewares(ProofController.prototype.requestProof)), - - async function ProofController_requestProof(request: any, response: any, next: any) { - const args = { - request: {"in":"body","name":"request","required":true,"ref":"RequestProofOptions"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(ProofController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.requestProof.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/proofs/:proofRecordId/accept-request', - ...(fetchMiddlewares(ProofController)), - ...(fetchMiddlewares(ProofController.prototype.acceptRequest)), - - async function ProofController_acceptRequest(request: any, response: any, next: any) { - const args = { - proofRecordId: {"in":"path","name":"proofRecordId","required":true,"dataType":"string"}, - request: {"in":"body","name":"request","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"comment":{"dataType":"string"},"filterByNonRevocationRequirements":{"dataType":"boolean"},"filterByPresentationPreview":{"dataType":"boolean"}}}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(ProofController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.acceptRequest.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - app.post('/proofs/:proofRecordId/accept-presentation', - ...(fetchMiddlewares(ProofController)), - ...(fetchMiddlewares(ProofController.prototype.acceptPresentation)), - - async function ProofController_acceptPresentation(request: any, response: any, next: any) { - const args = { - proofRecordId: {"in":"path","name":"proofRecordId","required":true,"dataType":"string"}, - notFoundError: {"in":"res","name":"404","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"reason":{"dataType":"string","required":true}}}, - internalServerError: {"in":"res","name":"500","required":true,"dataType":"nestedObjectLiteral","nestedProperties":{"message":{"dataType":"string","required":true}}}, - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - let validatedArgs: any[] = []; - try { - validatedArgs = getValidatedArgs(args, request, response); - - const container: IocContainer = typeof iocContainer === 'function' ? (iocContainer as IocContainerFactory)(request) : iocContainer; - - const controller: any = await container.get(ProofController); - if (typeof controller['setStatus'] === 'function') { - controller.setStatus(undefined); - } - - - const promise = controller.acceptPresentation.apply(controller, validatedArgs as any); - promiseHandler(controller, promise, response, undefined, next); - } catch (err) { - return next(err); - } - }); - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - function isController(object: any): object is Controller { - return 'getHeaders' in object && 'getStatus' in object && 'setStatus' in object; - } - - function promiseHandler(controllerObj: any, promise: any, response: any, successStatus: any, next: any) { - return Promise.resolve(promise) - .then((data: any) => { - let statusCode = successStatus; - let headers; - if (isController(controllerObj)) { - headers = controllerObj.getHeaders(); - statusCode = controllerObj.getStatus() || statusCode; - } - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - returnHandler(response, statusCode, data, headers) - }) - .catch((error: any) => next(error)); - } - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - function returnHandler(response: any, statusCode?: number, data?: any, headers: any = {}) { - if (response.headersSent) { - return; - } - Object.keys(headers).forEach((name: string) => { - response.set(name, headers[name]); - }); - if (data && typeof data.pipe === 'function' && data.readable && typeof data._read === 'function') { - data.pipe(response); - } else if (data !== null && data !== undefined) { - response.status(statusCode || 200).json(data); - } else { - response.status(statusCode || 204).end(); - } - } - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - function responder(response: any): TsoaResponse { - return function(status, data, headers) { - returnHandler(response, status, data, headers); - }; - }; - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa - - function getValidatedArgs(args: any, request: any, response: any): any[] { - const fieldErrors: FieldErrors = {}; - const values = Object.keys(args).map((key) => { - const name = args[key].name; - switch (args[key].in) { - case 'request': - return request; - case 'query': - return validationService.ValidateParam(args[key], request.query[name], name, fieldErrors, undefined, {"noImplicitAdditionalProperties":"throw-on-extras"}); - case 'path': - return validationService.ValidateParam(args[key], request.params[name], name, fieldErrors, undefined, {"noImplicitAdditionalProperties":"throw-on-extras"}); - case 'header': - return validationService.ValidateParam(args[key], request.header(name), name, fieldErrors, undefined, {"noImplicitAdditionalProperties":"throw-on-extras"}); - case 'body': - return validationService.ValidateParam(args[key], request.body, name, fieldErrors, undefined, {"noImplicitAdditionalProperties":"throw-on-extras"}); - case 'body-prop': - return validationService.ValidateParam(args[key], request.body[name], name, fieldErrors, 'body.', {"noImplicitAdditionalProperties":"throw-on-extras"}); - case 'formData': - if (args[key].dataType === 'file') { - return validationService.ValidateParam(args[key], request.file, name, fieldErrors, undefined, {"noImplicitAdditionalProperties":"throw-on-extras"}); - } else if (args[key].dataType === 'array' && args[key].array.dataType === 'file') { - return validationService.ValidateParam(args[key], request.files, name, fieldErrors, undefined, {"noImplicitAdditionalProperties":"throw-on-extras"}); - } else { - return validationService.ValidateParam(args[key], request.body[name], name, fieldErrors, undefined, {"noImplicitAdditionalProperties":"throw-on-extras"}); - } - case 'res': - return responder(response); - } - }); - - if (Object.keys(fieldErrors).length > 0) { - throw new ValidateError(fieldErrors, ''); - } - return values; - } - - // WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa -} - -// WARNING: This file was auto-generated with tsoa. Please do not modify it. Re-run tsoa to re-generate this file: https://github.com/lukeautry/tsoa diff --git a/packages/rest/src/routes/swagger.json b/packages/rest/src/routes/swagger.json deleted file mode 100644 index 91df4a65..00000000 --- a/packages/rest/src/routes/swagger.json +++ /dev/null @@ -1,4787 +0,0 @@ -{ - "components": { - "examples": {}, - "headers": {}, - "parameters": {}, - "requestBodies": {}, - "responses": {}, - "schemas": { - "AgentInfo": { - "properties": { - "label": { - "type": "string" - }, - "endpoints": { - "items": { - "type": "string" - }, - "type": "array" - }, - "isInitialized": { - "type": "boolean" - }, - "publicDid": { - "properties": { - "verkey": { - "type": "string" - }, - "did": { - "type": "string" - } - }, - "required": [ - "verkey", - "did" - ], - "type": "object" - } - }, - "required": [ - "label", - "endpoints", - "isInitialized" - ], - "type": "object", - "additionalProperties": false - }, - "Record_string.unknown_": { - "properties": {}, - "type": "object", - "description": "Construct a type with a set of properties K of type T" - }, - "BasicMessageRecord": { - "$ref": "#/components/schemas/Record_string.unknown_" - }, - "RecordId": { - "type": "string", - "example": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e" - }, - "Record_content.string_": { - "properties": { - "content": { - "type": "string" - } - }, - "type": "object", - "description": "Construct a type with a set of properties K of type T" - }, - "DidExchangeState": { - "description": "Connection states as defined in RFC 0023.", - "enum": [ - "start", - "invitation-sent", - "invitation-received", - "request-sent", - "request-received", - "response-sent", - "response-received", - "abandoned", - "completed" - ], - "type": "string" - }, - "Record_string.any_": { - "properties": {}, - "type": "object", - "description": "Construct a type with a set of properties K of type T" - }, - "CredentialState": { - "description": "Issue Credential states as defined in RFC 0036 and RFC 0453", - "enum": [ - "proposal-sent", - "proposal-received", - "offer-sent", - "offer-received", - "declined", - "request-sent", - "request-received", - "credential-issued", - "credential-received", - "done" - ], - "type": "string" - }, - "ProtocolVersionType_CredentialServices_": { - "type": "string", - "description": "Get the supported protocol versions based on the provided credential services." - }, - "AutoAcceptCredential": { - "description": "Typing of the state for auto acceptance", - "enum": [ - "always", - "contentApproved", - "never" - ], - "type": "string" - }, - "ProposeCredentialOptions": { - "properties": { - "protocolVersion": { - "$ref": "#/components/schemas/ProtocolVersionType_CredentialServices_" - }, - "credentialFormats": { - "properties": { - "indy": { - "properties": { - "attributes": { - "items": { - "properties": { - "value": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "value", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "issuerDid": { - "type": "string" - }, - "credentialDefinitionId": { - "type": "string" - }, - "schemaVersion": { - "type": "string" - }, - "schemaName": { - "type": "string" - }, - "schemaId": { - "type": "string" - }, - "schemaIssuerDid": { - "type": "string" - } - }, - "required": [ - "attributes", - "issuerDid", - "credentialDefinitionId", - "schemaVersion", - "schemaName", - "schemaId", - "schemaIssuerDid" - ], - "type": "object" - } - }, - "required": [ - "indy" - ], - "type": "object" - }, - "autoAcceptCredential": { - "$ref": "#/components/schemas/AutoAcceptCredential" - }, - "comment": { - "type": "string" - }, - "connectionId": { - "type": "string" - } - }, - "required": [ - "protocolVersion", - "credentialFormats", - "connectionId" - ], - "type": "object", - "additionalProperties": false - }, - "AcceptCredentialProposalOptions": { - "properties": { - "credentialFormats": { - "properties": { - "indy": { - "properties": { - "attributes": { - "items": { - "properties": { - "value": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "value", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "issuerDid": { - "type": "string" - }, - "credentialDefinitionId": { - "type": "string" - }, - "schemaVersion": { - "type": "string" - }, - "schemaName": { - "type": "string" - }, - "schemaId": { - "type": "string" - }, - "schemaIssuerDid": { - "type": "string" - } - }, - "required": [ - "attributes", - "issuerDid", - "credentialDefinitionId", - "schemaVersion", - "schemaName", - "schemaId", - "schemaIssuerDid" - ], - "type": "object" - } - }, - "required": [ - "indy" - ], - "type": "object" - }, - "autoAcceptCredential": { - "$ref": "#/components/schemas/AutoAcceptCredential" - }, - "comment": { - "type": "string" - } - }, - "type": "object", - "additionalProperties": false - }, - "CreateOfferOptions": { - "properties": { - "protocolVersion": { - "$ref": "#/components/schemas/ProtocolVersionType_CredentialServices_" - }, - "credentialFormats": { - "properties": { - "indy": { - "properties": { - "attributes": { - "items": { - "properties": { - "value": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "value", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "credentialDefinitionId": { - "type": "string" - } - }, - "required": [ - "attributes", - "credentialDefinitionId" - ], - "type": "object" - } - }, - "required": [ - "indy" - ], - "type": "object" - }, - "autoAcceptCredential": { - "$ref": "#/components/schemas/AutoAcceptCredential" - }, - "comment": { - "type": "string" - } - }, - "required": [ - "protocolVersion", - "credentialFormats" - ], - "type": "object", - "additionalProperties": false - }, - "OfferCredentialOptions": { - "properties": { - "protocolVersion": { - "$ref": "#/components/schemas/ProtocolVersionType_CredentialServices_" - }, - "credentialFormats": { - "properties": { - "indy": { - "properties": { - "attributes": { - "items": { - "properties": { - "value": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "value", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "credentialDefinitionId": { - "type": "string" - } - }, - "required": [ - "attributes", - "credentialDefinitionId" - ], - "type": "object" - } - }, - "required": [ - "indy" - ], - "type": "object" - }, - "autoAcceptCredential": { - "$ref": "#/components/schemas/AutoAcceptCredential" - }, - "comment": { - "type": "string" - }, - "connectionId": { - "type": "string" - } - }, - "required": [ - "protocolVersion", - "credentialFormats", - "connectionId" - ], - "type": "object", - "additionalProperties": false - }, - "IndyAcceptOfferFormat": { - "properties": { - "holderDid": { - "type": "string" - } - }, - "type": "object", - "additionalProperties": false - }, - "CredentialFormatPayload_CredentialFormats.acceptOffer_": { - "properties": { - "indy": { - "$ref": "#/components/schemas/IndyAcceptOfferFormat" - } - }, - "type": "object", - "description": "Get the payload for a specific method from a list of CredentialFormat interfaces and a method" - }, - "AcceptCredentialOfferOptions": { - "properties": { - "credentialFormats": { - "$ref": "#/components/schemas/CredentialFormatPayload_CredentialFormats.acceptOffer_" - }, - "autoAcceptCredential": { - "$ref": "#/components/schemas/AutoAcceptCredential" - }, - "comment": { - "type": "string" - } - }, - "type": "object", - "additionalProperties": false - }, - "CredentialFormatPayload_CredentialFormats.acceptRequest_": { - "properties": { - "indy": { - "$ref": "#/components/schemas/Record_string.any_" - } - }, - "type": "object", - "description": "Get the payload for a specific method from a list of CredentialFormat interfaces and a method" - }, - "AcceptCredentialRequestOptions": { - "properties": { - "credentialFormats": { - "$ref": "#/components/schemas/CredentialFormatPayload_CredentialFormats.acceptRequest_" - }, - "autoAcceptCredential": { - "$ref": "#/components/schemas/AutoAcceptCredential" - }, - "comment": { - "type": "string" - } - }, - "type": "object", - "additionalProperties": false - }, - "CredentialDefinitionId": { - "type": "string", - "example": "WgWxqztrNooG92RXvxSTWv:3:CL:20:tag" - }, - "SchemaId": { - "type": "string", - "example": "WgWxqztrNooG92RXvxSTWv:2:schema_name:1.0" - }, - "Version": { - "type": "string", - "example": "1.0.0" - }, - "DidResolutionMetadata": { - "properties": { - "contentType": { - "type": "string" - }, - "error": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "string", - "enum": [ - "invalidDid", - "notFound", - "representationNotSupported", - "unsupportedDidMethod" - ] - } - ] - }, - "message": { - "type": "string" - } - }, - "type": "object", - "additionalProperties": false - }, - "DidDocument": { - "$ref": "#/components/schemas/Record_string.any_" - }, - "DIDDocumentMetadata": { - "properties": { - "created": { - "type": "string" - }, - "updated": { - "type": "string" - }, - "deactivated": { - "type": "boolean" - }, - "versionId": { - "type": "string" - }, - "nextUpdate": { - "type": "string" - }, - "nextVersionId": { - "type": "string" - }, - "equivalentId": { - "type": "string" - }, - "canonicalId": { - "type": "string" - } - }, - "type": "object", - "additionalProperties": false - }, - "DidDocumentMetadata": { - "$ref": "#/components/schemas/DIDDocumentMetadata" - }, - "DidResolutionResult": { - "properties": { - "didResolutionMetadata": { - "$ref": "#/components/schemas/DidResolutionMetadata" - }, - "didDocument": { - "allOf": [ - { - "$ref": "#/components/schemas/DidDocument" - } - ], - "nullable": true - }, - "didDocumentMetadata": { - "$ref": "#/components/schemas/DidDocumentMetadata" - } - }, - "required": [ - "didResolutionMetadata", - "didDocument", - "didDocumentMetadata" - ], - "type": "object", - "additionalProperties": false - }, - "Did": { - "type": "string", - "example": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL" - }, - "HandshakeProtocol": { - "enum": [ - "https://didcomm.org/connections/1.0", - "https://didcomm.org/didexchange/1.0" - ], - "type": "string" - }, - "Pick_CreateOutOfBandInvitationConfig.Exclude_keyofCreateOutOfBandInvitationConfig.routing-or-appendedAttachments-or-messages__": { - "properties": { - "alias": { - "type": "string" - }, - "label": { - "type": "string" - }, - "imageUrl": { - "type": "string" - }, - "goalCode": { - "type": "string" - }, - "goal": { - "type": "string" - }, - "handshake": { - "type": "boolean" - }, - "handshakeProtocols": { - "items": { - "$ref": "#/components/schemas/HandshakeProtocol" - }, - "type": "array" - }, - "multiUseInvitation": { - "type": "boolean" - }, - "autoAcceptConnection": { - "type": "boolean" - } - }, - "type": "object", - "description": "From T, pick a set of properties whose keys are in the union K" - }, - "Omit_CreateOutOfBandInvitationConfig.routing-or-appendedAttachments-or-messages_": { - "$ref": "#/components/schemas/Pick_CreateOutOfBandInvitationConfig.Exclude_keyofCreateOutOfBandInvitationConfig.routing-or-appendedAttachments-or-messages__", - "description": "Construct a type with the properties of T except for those in type K." - }, - "Pick_CreateLegacyInvitationConfig.Exclude_keyofCreateLegacyInvitationConfig.routing__": { - "properties": { - "alias": { - "type": "string" - }, - "label": { - "type": "string" - }, - "imageUrl": { - "type": "string" - }, - "multiUseInvitation": { - "type": "boolean" - }, - "autoAcceptConnection": { - "type": "boolean" - } - }, - "type": "object", - "description": "From T, pick a set of properties whose keys are in the union K" - }, - "Omit_CreateLegacyInvitationConfig.routing_": { - "$ref": "#/components/schemas/Pick_CreateLegacyInvitationConfig.Exclude_keyofCreateLegacyInvitationConfig.routing__", - "description": "Construct a type with the properties of T except for those in type K." - }, - "AgentMessageType": { - "properties": { - "@id": { - "type": "string" - }, - "@type": { - "type": "string" - } - }, - "required": [ - "@id", - "@type" - ], - "type": "object", - "additionalProperties": {} - }, - "OutOfBandDidCommService": { - "properties": { - "id": { - "type": "string" - }, - "serviceEndpoint": { - "type": "string" - }, - "type": { - "type": "string" - }, - "recipientKeys": { - "items": { - "type": "string" - }, - "type": "array" - }, - "routingKeys": { - "items": { - "type": "string" - }, - "type": "array" - }, - "accept": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "id", - "serviceEndpoint", - "type", - "recipientKeys" - ], - "type": "object", - "additionalProperties": false - }, - "Pick_OutOfBandInvitationSchema.Exclude_keyofOutOfBandInvitationSchema.appendedAttachments__": { - "properties": { - "label": { - "type": "string" - }, - "imageUrl": { - "type": "string" - }, - "goalCode": { - "type": "string" - }, - "goal": { - "type": "string" - }, - "@id": { - "type": "string" - }, - "@type": { - "type": "string" - }, - "accept": { - "items": { - "type": "string" - }, - "type": "array" - }, - "handshake_protocols": { - "items": { - "$ref": "#/components/schemas/HandshakeProtocol" - }, - "type": "array" - }, - "services": { - "items": { - "anyOf": [ - { - "$ref": "#/components/schemas/OutOfBandDidCommService" - }, - { - "type": "string" - } - ] - }, - "type": "array" - } - }, - "required": [ - "label", - "@type", - "services" - ], - "type": "object", - "description": "From T, pick a set of properties whose keys are in the union K" - }, - "Omit_OutOfBandInvitationSchema.appendedAttachments_": { - "$ref": "#/components/schemas/Pick_OutOfBandInvitationSchema.Exclude_keyofOutOfBandInvitationSchema.appendedAttachments__", - "description": "Construct a type with the properties of T except for those in type K." - }, - "Pick_ReceiveOutOfBandInvitationConfig.Exclude_keyofReceiveOutOfBandInvitationConfig.routing__": { - "properties": { - "alias": { - "type": "string" - }, - "label": { - "type": "string" - }, - "imageUrl": { - "type": "string" - }, - "autoAcceptConnection": { - "type": "boolean" - }, - "autoAcceptInvitation": { - "type": "boolean" - }, - "reuseConnection": { - "type": "boolean" - } - }, - "type": "object", - "description": "From T, pick a set of properties whose keys are in the union K" - }, - "Omit_ReceiveOutOfBandInvitationConfig.routing_": { - "$ref": "#/components/schemas/Pick_ReceiveOutOfBandInvitationConfig.Exclude_keyofReceiveOutOfBandInvitationConfig.routing__", - "description": "Construct a type with the properties of T except for those in type K." - }, - "ReceiveInvitationProps": { - "properties": { - "alias": { - "type": "string" - }, - "label": { - "type": "string" - }, - "imageUrl": { - "type": "string" - }, - "autoAcceptConnection": { - "type": "boolean" - }, - "autoAcceptInvitation": { - "type": "boolean" - }, - "reuseConnection": { - "type": "boolean" - }, - "invitation": { - "$ref": "#/components/schemas/Omit_OutOfBandInvitationSchema.appendedAttachments_" - } - }, - "required": [ - "invitation" - ], - "type": "object", - "additionalProperties": false - }, - "ReceiveInvitationByUrlProps": { - "properties": { - "alias": { - "type": "string" - }, - "label": { - "type": "string" - }, - "imageUrl": { - "type": "string" - }, - "autoAcceptConnection": { - "type": "boolean" - }, - "autoAcceptInvitation": { - "type": "boolean" - }, - "reuseConnection": { - "type": "boolean" - }, - "invitationUrl": { - "type": "string" - } - }, - "required": [ - "invitationUrl" - ], - "type": "object", - "additionalProperties": false - }, - "AcceptInvitationConfig": { - "properties": { - "autoAcceptConnection": { - "type": "boolean" - }, - "reuseConnection": { - "type": "boolean" - }, - "label": { - "type": "string" - }, - "alias": { - "type": "string" - }, - "imageUrl": { - "type": "string" - }, - "mediatorId": { - "type": "string" - } - }, - "type": "object", - "additionalProperties": false - }, - "PresentationPreviewAttributeOptions": { - "properties": { - "name": { - "type": "string" - }, - "credentialDefinitionId": { - "type": "string" - }, - "mimeType": { - "type": "string" - }, - "value": { - "type": "string" - }, - "referent": { - "type": "string" - } - }, - "required": [ - "name" - ], - "type": "object", - "additionalProperties": false - }, - "PredicateType": { - "enum": [ - "<", - "<=", - ">", - ">=" - ], - "type": "string" - }, - "PresentationPreviewPredicateOptions": { - "properties": { - "name": { - "type": "string" - }, - "credentialDefinitionId": { - "type": "string" - }, - "predicate": { - "$ref": "#/components/schemas/PredicateType" - }, - "threshold": { - "type": "number", - "format": "double" - } - }, - "required": [ - "name", - "credentialDefinitionId", - "predicate", - "threshold" - ], - "type": "object", - "additionalProperties": false - }, - "AutoAcceptProof": { - "description": "Typing of the state for auto acceptance", - "enum": [ - "always", - "contentApproved", - "never" - ], - "type": "string" - }, - "RequestProofProposalOptions": { - "properties": { - "connectionId": { - "type": "string" - }, - "attributes": { - "items": { - "$ref": "#/components/schemas/PresentationPreviewAttributeOptions" - }, - "type": "array" - }, - "predicates": { - "items": { - "$ref": "#/components/schemas/PresentationPreviewPredicateOptions" - }, - "type": "array" - }, - "comment": { - "type": "string" - }, - "autoAcceptProof": { - "$ref": "#/components/schemas/AutoAcceptProof" - } - }, - "required": [ - "connectionId", - "attributes", - "predicates" - ], - "type": "object", - "additionalProperties": false - }, - "ProofRecord": { - "$ref": "#/components/schemas/Record_string.unknown_" - }, - "IndyRevocationInterval": { - "properties": { - "from": { - "type": "number", - "format": "double" - }, - "to": { - "type": "number", - "format": "double" - } - }, - "type": "object", - "additionalProperties": false - }, - "AttributeValue": { - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - } - }, - "required": [ - "name", - "value" - ], - "type": "object", - "additionalProperties": false - }, - "AttributeFilter": { - "properties": { - "schemaId": { - "type": "string" - }, - "schemaIssuerDid": { - "type": "string" - }, - "schemaName": { - "type": "string" - }, - "schemaVersion": { - "type": "string" - }, - "issuerDid": { - "type": "string" - }, - "credentialDefinitionId": { - "type": "string" - }, - "attributeValue": { - "$ref": "#/components/schemas/AttributeValue" - } - }, - "type": "object", - "additionalProperties": false - }, - "ProofAttributeInfo": { - "properties": { - "name": { - "type": "string" - }, - "names": { - "items": { - "type": "string" - }, - "type": "array" - }, - "nonRevoked": { - "$ref": "#/components/schemas/IndyRevocationInterval" - }, - "restrictions": { - "items": { - "$ref": "#/components/schemas/AttributeFilter" - }, - "type": "array" - } - }, - "type": "object", - "additionalProperties": false - }, - "ProofPredicateInfo": { - "properties": { - "name": { - "type": "string" - }, - "predicateType": { - "$ref": "#/components/schemas/PredicateType" - }, - "predicateValue": { - "type": "number", - "format": "double" - }, - "nonRevoked": { - "$ref": "#/components/schemas/IndyRevocationInterval" - }, - "restrictions": { - "items": { - "$ref": "#/components/schemas/AttributeFilter" - }, - "type": "array" - } - }, - "required": [ - "name", - "predicateType", - "predicateValue" - ], - "type": "object", - "additionalProperties": false - }, - "Pick_RequestProofOptions.Exclude_keyofRequestProofOptions.connectionId__": { - "properties": { - "comment": { - "type": "string" - }, - "autoAcceptProof": { - "$ref": "#/components/schemas/AutoAcceptProof" - }, - "proofRequestOptions": { - "properties": { - "requestedPredicates": { - "properties": {}, - "additionalProperties": { - "$ref": "#/components/schemas/ProofPredicateInfo" - }, - "type": "object" - }, - "requestedAttributes": { - "properties": {}, - "additionalProperties": { - "$ref": "#/components/schemas/ProofAttributeInfo" - }, - "type": "object" - }, - "version": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "version", - "name" - ], - "type": "object" - }, - "parentThreadId": { - "type": "string" - } - }, - "required": [ - "proofRequestOptions" - ], - "type": "object", - "description": "From T, pick a set of properties whose keys are in the union K" - }, - "Omit_RequestProofOptions.connectionId_": { - "$ref": "#/components/schemas/Pick_RequestProofOptions.Exclude_keyofRequestProofOptions.connectionId__", - "description": "Construct a type with the properties of T except for those in type K." - }, - "RequestProofOptions": { - "properties": { - "comment": { - "type": "string" - }, - "autoAcceptProof": { - "$ref": "#/components/schemas/AutoAcceptProof" - }, - "parentThreadId": { - "type": "string" - }, - "connectionId": { - "type": "string" - }, - "proofRequestOptions": { - "properties": { - "requestedPredicates": { - "properties": {}, - "additionalProperties": { - "$ref": "#/components/schemas/ProofPredicateInfo" - }, - "type": "object" - }, - "requestedAttributes": { - "properties": {}, - "additionalProperties": { - "$ref": "#/components/schemas/ProofAttributeInfo" - }, - "type": "object" - }, - "version": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "version", - "name" - ], - "type": "object" - } - }, - "required": [ - "connectionId", - "proofRequestOptions" - ], - "type": "object", - "additionalProperties": false - } - }, - "securitySchemes": {} - }, - "info": { - "title": "@credo-ts/rest", - "version": "0.9.3", - "description": "Rest endpoint wrapper for using your agent over HTTP", - "license": { - "name": "Apache-2.0" - }, - "contact": {} - }, - "openapi": "3.0.0", - "paths": { - "/agent": { - "get": { - "operationId": "GetAgentInfo", - "responses": { - "200": { - "description": "Ok", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AgentInfo" - } - } - } - } - }, - "description": "Retrieve basic agent information", - "tags": [ - "Agent" - ], - "security": [], - "parameters": [] - } - }, - "/basic-messages/{connectionId}": { - "get": { - "operationId": "GetBasicMessages", - "responses": { - "200": { - "description": "BasicMessageRecord[]", - "content": { - "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/BasicMessageRecord" - }, - "type": "array" - }, - "examples": { - "Example 1": { - "value": [ - { - "_tags": { - "role": "sender", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834" - }, - "metadata": {}, - "id": "74bcf865-1fdc-45b4-b517-9def02dfd25f", - "createdAt": "2022-08-18T08:38:40.216Z", - "content": "string", - "sentTime": "2022-08-18T08:38:40.216Z", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834" - } - ] - } - } - } - } - } - }, - "description": "Retrieve basic messages by connection id", - "tags": [ - "Basic Messages" - ], - "security": [], - "parameters": [ - { - "description": "Connection identifier", - "in": "path", - "name": "connectionId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ] - }, - "post": { - "operationId": "SendMessage", - "responses": { - "200": { - "description": "Ok", - "content": { - "application/json": { - "schema": {} - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Send a basic message to a connection", - "tags": [ - "Basic Messages" - ], - "security": [], - "parameters": [ - { - "description": "Connection identifier", - "in": "path", - "name": "connectionId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Record_content.string_" - } - } - } - } - } - }, - "/connections": { - "get": { - "operationId": "GetAllConnections", - "responses": { - "200": { - "description": "ConnectionRecord[]", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": [ - { - "_tags": { - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", - "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" - }, - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" - } - ] - } - } - } - } - } - }, - "description": "Retrieve all connections records", - "tags": [ - "Connections" - ], - "security": [], - "parameters": [ - { - "in": "query", - "name": "outOfBandId", - "required": false, - "schema": { - "type": "string" - } - }, - { - "description": "Alias", - "in": "query", - "name": "alias", - "required": false, - "schema": { - "type": "string" - } - }, - { - "description": "Connection state", - "in": "query", - "name": "state", - "required": false, - "schema": { - "$ref": "#/components/schemas/DidExchangeState" - } - }, - { - "description": "My DID", - "in": "query", - "name": "myDid", - "required": false, - "schema": { - "type": "string" - } - }, - { - "description": "Their DID", - "in": "query", - "name": "theirDid", - "required": false, - "schema": { - "type": "string" - } - }, - { - "description": "Their label", - "in": "query", - "name": "theirLabel", - "required": false, - "schema": { - "type": "string" - } - } - ] - } - }, - "/connections/{connectionId}": { - "get": { - "operationId": "GetConnectionById", - "responses": { - "200": { - "description": "ConnectionRecord", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "_tags": { - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", - "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" - }, - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" - } - } - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - } - }, - "description": "Retrieve connection record by connection id", - "tags": [ - "Connections" - ], - "security": [], - "parameters": [ - { - "description": "Connection identifier", - "in": "path", - "name": "connectionId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ] - }, - "delete": { - "operationId": "DeleteConnection", - "responses": { - "200": { - "description": "Ok", - "content": { - "application/json": { - "schema": {} - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Deletes a connection record from the connection repository.", - "tags": [ - "Connections" - ], - "security": [], - "parameters": [ - { - "description": "Connection identifier", - "in": "path", - "name": "connectionId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ] - } - }, - "/connections/{connectionId}/accept-request": { - "post": { - "operationId": "AcceptRequest", - "responses": { - "200": { - "description": "ConnectionRecord", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "_tags": { - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", - "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" - }, - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" - } - } - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Accept a connection request as inviter by sending a connection response message\nfor the connection with the specified connection id.\n\nThis is not needed when auto accepting of connection is enabled.", - "tags": [ - "Connections" - ], - "security": [], - "parameters": [ - { - "description": "Connection identifier", - "in": "path", - "name": "connectionId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ] - } - }, - "/connections/{connectionId}/accept-response": { - "post": { - "operationId": "AcceptResponse", - "responses": { - "200": { - "description": "ConnectionRecord", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "_tags": { - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", - "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" - }, - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" - } - } - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Accept a connection response as invitee by sending a trust ping message\nfor the connection with the specified connection id.\n\nThis is not needed when auto accepting of connection is enabled.", - "tags": [ - "Connections" - ], - "security": [], - "parameters": [ - { - "description": "Connection identifier", - "in": "path", - "name": "connectionId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ] - } - }, - "/credentials": { - "get": { - "operationId": "GetAllCredentials", - "responses": { - "200": { - "description": "CredentialExchangeRecord[]", - "content": { - "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/Record_string.any_" - }, - "type": "array" - }, - "examples": { - "Example 1": { - "value": [ - { - "_tags": { - "state": "offer-sent", - "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", - "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b" - }, - "metadata": { - "_internal/indyCredential": { - "credentialDefinitionId": "q7ATwTYbQDgiigVijUAej:3:CL:318187:latest", - "schemaId": "q7ATwTYbQDgiigVijUAej:2:Employee Badge:1.0" - } - }, - "credentials": [], - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b", - "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", - "credentialAttributes": [], - "protocolVersion": "v1" - } - ] - } - } - } - } - } - }, - "description": "Retrieve all credential exchange records", - "tags": [ - "Credentials" - ], - "security": [], - "parameters": [ - { - "in": "query", - "name": "threadId", - "required": false, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "connectionId", - "required": false, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "state", - "required": false, - "schema": { - "$ref": "#/components/schemas/CredentialState" - } - } - ] - } - }, - "/credentials/{credentialRecordId}": { - "get": { - "operationId": "GetCredentialById", - "responses": { - "200": { - "description": "CredentialExchangeRecord", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "_tags": { - "state": "offer-sent", - "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", - "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b" - }, - "metadata": { - "_internal/indyCredential": { - "credentialDefinitionId": "q7ATwTYbQDgiigVijUAej:3:CL:318187:latest", - "schemaId": "q7ATwTYbQDgiigVijUAej:2:Employee Badge:1.0" - } - }, - "credentials": [], - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b", - "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", - "credentialAttributes": [], - "protocolVersion": "v1" - } - } - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Retrieve credential exchange record by credential record id", - "tags": [ - "Credentials" - ], - "security": [], - "parameters": [ - { - "in": "path", - "name": "credentialRecordId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ] - }, - "delete": { - "operationId": "DeleteCredential", - "responses": { - "200": { - "description": "Ok", - "content": { - "application/json": { - "schema": {} - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Deletes a credential exchange record in the credential repository.", - "tags": [ - "Credentials" - ], - "security": [], - "parameters": [ - { - "in": "path", - "name": "credentialRecordId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ] - } - }, - "/credentials/propose-credential": { - "post": { - "operationId": "ProposeCredential", - "responses": { - "200": { - "description": "CredentialExchangeRecord", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "_tags": { - "state": "offer-sent", - "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", - "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b" - }, - "metadata": { - "_internal/indyCredential": { - "credentialDefinitionId": "q7ATwTYbQDgiigVijUAej:3:CL:318187:latest", - "schemaId": "q7ATwTYbQDgiigVijUAej:2:Employee Badge:1.0" - } - }, - "credentials": [], - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b", - "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", - "credentialAttributes": [], - "protocolVersion": "v1" - } - } - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Initiate a new credential exchange as holder by sending a propose credential message\nto the connection with a specified connection id.", - "tags": [ - "Credentials" - ], - "security": [], - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProposeCredentialOptions" - } - } - } - } - } - }, - "/credentials/{credentialRecordId}/accept-proposal": { - "post": { - "operationId": "AcceptProposal", - "responses": { - "200": { - "description": "CredentialExchangeRecord", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "_tags": { - "state": "offer-sent", - "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", - "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b" - }, - "metadata": { - "_internal/indyCredential": { - "credentialDefinitionId": "q7ATwTYbQDgiigVijUAej:3:CL:318187:latest", - "schemaId": "q7ATwTYbQDgiigVijUAej:2:Employee Badge:1.0" - } - }, - "credentials": [], - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b", - "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", - "credentialAttributes": [], - "protocolVersion": "v1" - } - } - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Accept a credential proposal as issuer by sending an accept proposal message\nto the connection associated with the credential exchange record.", - "tags": [ - "Credentials" - ], - "security": [], - "parameters": [ - { - "description": "credential identifier", - "in": "path", - "name": "credentialRecordId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ], - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AcceptCredentialProposalOptions" - } - } - } - } - } - }, - "/credentials/create-offer": { - "post": { - "operationId": "CreateOffer", - "responses": { - "200": { - "description": "AgentMessage, CredentialExchangeRecord", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "_tags": { - "state": "offer-sent", - "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", - "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b" - }, - "metadata": { - "_internal/indyCredential": { - "credentialDefinitionId": "q7ATwTYbQDgiigVijUAej:3:CL:318187:latest", - "schemaId": "q7ATwTYbQDgiigVijUAej:2:Employee Badge:1.0" - } - }, - "credentials": [], - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b", - "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", - "credentialAttributes": [], - "protocolVersion": "v1" - } - } - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Initiate a new credential exchange as issuer by creating a credential offer\nwithout specifying a connection id", - "tags": [ - "Credentials" - ], - "security": [], - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateOfferOptions" - } - } - } - } - } - }, - "/credentials/offer-credential": { - "post": { - "operationId": "OfferCredential", - "responses": { - "200": { - "description": "CredentialExchangeRecord", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "_tags": { - "state": "offer-sent", - "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", - "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b" - }, - "metadata": { - "_internal/indyCredential": { - "credentialDefinitionId": "q7ATwTYbQDgiigVijUAej:3:CL:318187:latest", - "schemaId": "q7ATwTYbQDgiigVijUAej:2:Employee Badge:1.0" - } - }, - "credentials": [], - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b", - "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", - "credentialAttributes": [], - "protocolVersion": "v1" - } - } - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Initiate a new credential exchange as issuer by sending a offer credential message\nto the connection with the specified connection id.", - "tags": [ - "Credentials" - ], - "security": [], - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OfferCredentialOptions" - } - } - } - } - } - }, - "/credentials/{credentialRecordId}/accept-offer": { - "post": { - "operationId": "AcceptOffer", - "responses": { - "200": { - "description": "CredentialExchangeRecord", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "_tags": { - "state": "offer-sent", - "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", - "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b" - }, - "metadata": { - "_internal/indyCredential": { - "credentialDefinitionId": "q7ATwTYbQDgiigVijUAej:3:CL:318187:latest", - "schemaId": "q7ATwTYbQDgiigVijUAej:2:Employee Badge:1.0" - } - }, - "credentials": [], - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b", - "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", - "credentialAttributes": [], - "protocolVersion": "v1" - } - } - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Accept a credential offer as holder by sending an accept offer message\nto the connection associated with the credential exchange record.", - "tags": [ - "Credentials" - ], - "security": [], - "parameters": [ - { - "description": "credential identifier", - "in": "path", - "name": "credentialRecordId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ], - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AcceptCredentialOfferOptions" - } - } - } - } - } - }, - "/credentials/{credentialRecordId}/accept-request": { - "post": { - "operationId": "AcceptRequest", - "responses": { - "200": { - "description": "CredentialExchangeRecord", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "_tags": { - "state": "offer-sent", - "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", - "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b" - }, - "metadata": { - "_internal/indyCredential": { - "credentialDefinitionId": "q7ATwTYbQDgiigVijUAej:3:CL:318187:latest", - "schemaId": "q7ATwTYbQDgiigVijUAej:2:Employee Badge:1.0" - } - }, - "credentials": [], - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b", - "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", - "credentialAttributes": [], - "protocolVersion": "v1" - } - } - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Accept a credential request as issuer by sending an accept request message\nto the connection associated with the credential exchange record.", - "tags": [ - "Credentials" - ], - "security": [], - "parameters": [ - { - "description": "credential identifier", - "in": "path", - "name": "credentialRecordId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ], - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AcceptCredentialRequestOptions" - } - } - } - } - } - }, - "/credentials/{credentialRecordId}/accept-credential": { - "post": { - "operationId": "AcceptCredential", - "responses": { - "200": { - "description": "CredentialExchangeRecord", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "_tags": { - "state": "offer-sent", - "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", - "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b" - }, - "metadata": { - "_internal/indyCredential": { - "credentialDefinitionId": "q7ATwTYbQDgiigVijUAej:3:CL:318187:latest", - "schemaId": "q7ATwTYbQDgiigVijUAej:2:Employee Badge:1.0" - } - }, - "credentials": [], - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "ac6d0fdd-0db8-4f52-8a3d-de7ff8ddc14b", - "threadId": "82701488-b43c-4d7b-9244-4bb204a7ae26", - "credentialAttributes": [], - "protocolVersion": "v1" - } - } - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Accept a credential as holder by sending an accept credential message\nto the connection associated with the credential exchange record.", - "tags": [ - "Credentials" - ], - "security": [], - "parameters": [ - { - "in": "path", - "name": "credentialRecordId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ] - } - }, - "/credential-definitions/{credentialDefinitionId}": { - "get": { - "operationId": "GetCredentialDefinitionById", - "responses": { - "200": { - "description": "CredDef", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "ver": "1.0", - "id": "WgWxqztrNooG92RXvxSTWv:3:CL:20:tag", - "schemaId": "351936", - "type": "CL", - "tag": "definition", - "value": { - "primary": { - "n": "string", - "s": "string", - "r": { - "master_secret": "string", - "string": "string" - }, - "rctxt": "string", - "z": "string" - }, - "revocation": { - "g": "1 string", - "g_dash": "string", - "h": "string", - "h0": "string", - "h1": "string", - "h2": "string", - "htilde": "string", - "h_cap": "string", - "u": "string", - "pk": "string", - "y": "string" - } - } - } - } - } - } - } - }, - "400": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Retrieve credential definition by credential definition id", - "tags": [ - "Credential Definitions" - ], - "security": [], - "parameters": [ - { - "in": "path", - "name": "credentialDefinitionId", - "required": true, - "schema": { - "$ref": "#/components/schemas/CredentialDefinitionId" - } - } - ] - } - }, - "/credential-definitions": { - "post": { - "operationId": "CreateCredentialDefinition", - "responses": { - "200": { - "description": "CredDef", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "ver": "1.0", - "id": "WgWxqztrNooG92RXvxSTWv:3:CL:20:tag", - "schemaId": "351936", - "type": "CL", - "tag": "definition", - "value": { - "primary": { - "n": "string", - "s": "string", - "r": { - "master_secret": "string", - "string": "string" - }, - "rctxt": "string", - "z": "string" - }, - "revocation": { - "g": "1 string", - "g_dash": "string", - "h": "string", - "h0": "string", - "h1": "string", - "h2": "string", - "htilde": "string", - "h_cap": "string", - "u": "string", - "pk": "string", - "y": "string" - } - } - } - } - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Creates a new credential definition.", - "tags": [ - "Credential Definitions" - ], - "security": [], - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "properties": { - "tag": { - "type": "string" - }, - "supportRevocation": { - "type": "boolean" - }, - "schemaId": { - "$ref": "#/components/schemas/SchemaId" - } - }, - "required": [ - "tag", - "supportRevocation", - "schemaId" - ], - "type": "object" - } - } - } - } - } - }, - "/schemas/{schemaId}": { - "get": { - "operationId": "GetSchemaById", - "responses": { - "200": { - "description": "Schema", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "ver": "1.0", - "id": "WgWxqztrNooG92RXvxSTWv:2:schema_name:1.0", - "name": "schema", - "version": "1.0", - "attrNames": [ - "string" - ], - "seqNo": 351936 - } - } - } - } - } - }, - "400": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "403": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Retrieve schema by schema id", - "tags": [ - "Schemas" - ], - "security": [], - "parameters": [ - { - "in": "path", - "name": "schemaId", - "required": true, - "schema": { - "$ref": "#/components/schemas/SchemaId" - } - } - ] - } - }, - "/schemas": { - "post": { - "operationId": "CreateSchema", - "responses": { - "200": { - "description": "schema", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "ver": "1.0", - "id": "WgWxqztrNooG92RXvxSTWv:2:schema_name:1.0", - "name": "schema", - "version": "1.0", - "attrNames": [ - "string" - ], - "seqNo": 351936 - } - } - } - } - } - }, - "400": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Creates a new schema and registers schema on ledger", - "tags": [ - "Schemas" - ], - "security": [], - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "properties": { - "attributes": { - "items": { - "type": "string" - }, - "type": "array" - }, - "version": { - "$ref": "#/components/schemas/Version" - }, - "name": { - "type": "string" - } - }, - "required": [ - "attributes", - "version", - "name" - ], - "type": "object" - } - } - } - } - } - }, - "/dids/{did}": { - "get": { - "operationId": "GetDidRecordByDid", - "responses": { - "200": { - "description": "DidResolutionResult", - "content": { - "application/json": { - "schema": { - "anyOf": [ - { - "properties": { - "resolveResult": { - "$ref": "#/components/schemas/DidResolutionResult" - } - }, - "required": [ - "resolveResult" - ], - "type": "object" - }, - { - "properties": { - "resolveResult": {}, - "didDocumentMetadata": { - "$ref": "#/components/schemas/DIDDocumentMetadata" - }, - "didResolutionMetadata": { - "$ref": "#/components/schemas/DidResolutionMetadata" - }, - "didDocument": { - "$ref": "#/components/schemas/Record_string.any_" - } - }, - "required": [ - "didDocumentMetadata", - "didResolutionMetadata", - "didDocument" - ], - "type": "object" - } - ] - }, - "examples": { - "Example 1": { - "value": { - "didDocument": { - "@context": [ - "https://w3id.org/did/v1", - "https://w3id.org/security/suites/ed25519-2018/v1", - "https://w3id.org/security/suites/x25519-2019/v1" - ], - "id": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL", - "verificationMethod": [ - { - "id": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL", - "type": "Ed25519VerificationKey2018", - "controller": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL", - "publicKeyBase58": "6fioC1zcDPyPEL19pXRS2E4iJ46zH7xP6uSgAaPdwDrx" - } - ], - "authentication": [ - "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL" - ], - "assertionMethod": [ - "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL" - ], - "capabilityInvocation": [ - "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL" - ], - "capabilityDelegation": [ - "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL" - ], - "keyAgreement": [ - { - "id": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6LSrdqo4M24WRDJj1h2hXxgtDTyzjjKCiyapYVgrhwZAySn", - "type": "X25519KeyAgreementKey2019", - "controller": "did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL", - "publicKeyBase58": "FxfdY3DCQxVZddKGAtSjZdFW9bCCW7oRwZn1NFJ2Tbg2" - } - ] - }, - "didDocumentMetadata": {}, - "didResolutionMetadata": { - "contentType": "application/did+ld+json" - } - } - } - } - } - } - } - }, - "description": "Resolves did and returns did resolution result", - "tags": [ - "Dids" - ], - "security": [], - "parameters": [ - { - "description": "Decentralized Identifier", - "in": "path", - "name": "did", - "required": true, - "schema": { - "$ref": "#/components/schemas/Did" - } - } - ] - } - }, - "/oob": { - "get": { - "operationId": "GetAllOutOfBandRecords", - "responses": { - "200": { - "description": "OutOfBandRecord[]", - "content": { - "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/Record_string.any_" - }, - "type": "array" - }, - "examples": { - "Example 1": { - "value": [ - { - "_tags": { - "invitationId": "1cbd22e4-1906-41e9-8807-83d84437f978", - "state": "await-response", - "role": "sender", - "recipientKeyFingerprints": [ - "z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj" - ] - }, - "outOfBandInvitation": { - "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", - "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", - "label": "Aries Test Agent", - "accept": [ - "didcomm/aip1", - "didcomm/aip2;env=rfc19" - ], - "handshake_protocols": [ - "https://didcomm.org/didexchange/1.0", - "https://didcomm.org/connections/1.0" - ], - "services": [ - { - "id": "#inline-0", - "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", - "type": "did-communication", - "recipientKeys": [ - "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" - ], - "routingKeys": [] - } - ] - }, - "metadata": {}, - "id": "42a95528-0e30-4f86-a462-0efb02178b53", - "createdAt": "2022-01-01T00:00:00.000Z", - "reusable": false - } - ] - } - } - } - } - } - }, - "description": "Retrieve all out of band records", - "tags": [ - "Out Of Band" - ], - "security": [], - "parameters": [ - { - "description": "invitation identifier", - "in": "query", - "name": "invitationId", - "required": false, - "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ] - } - }, - "/oob/{outOfBandId}": { - "get": { - "operationId": "GetOutOfBandRecordById", - "responses": { - "200": { - "description": "OutOfBandRecord", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "_tags": { - "invitationId": "1cbd22e4-1906-41e9-8807-83d84437f978", - "state": "await-response", - "role": "sender", - "recipientKeyFingerprints": [ - "z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj" - ] - }, - "outOfBandInvitation": { - "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", - "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", - "label": "Aries Test Agent", - "accept": [ - "didcomm/aip1", - "didcomm/aip2;env=rfc19" - ], - "handshake_protocols": [ - "https://didcomm.org/didexchange/1.0", - "https://didcomm.org/connections/1.0" - ], - "services": [ - { - "id": "#inline-0", - "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", - "type": "did-communication", - "recipientKeys": [ - "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" - ], - "routingKeys": [] - } - ] - }, - "metadata": {}, - "id": "42a95528-0e30-4f86-a462-0efb02178b53", - "createdAt": "2022-01-01T00:00:00.000Z", - "reusable": false - } - } - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - } - }, - "description": "Retrieve an out of band record by id", - "tags": [ - "Out Of Band" - ], - "security": [], - "parameters": [ - { - "in": "path", - "name": "outOfBandId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ] - }, - "delete": { - "operationId": "DeleteOutOfBandRecord", - "responses": { - "200": { - "description": "Ok", - "content": { - "application/json": { - "schema": {} - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Deletes an out of band record from the repository.", - "tags": [ - "Out Of Band" - ], - "security": [], - "parameters": [ - { - "description": "Record identifier", - "in": "path", - "name": "outOfBandId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ] - } - }, - "/oob/create-invitation": { - "post": { - "operationId": "CreateInvitation", - "responses": { - "200": { - "description": "Out of band record", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "invitationUrl": "string", - "invitation": { - "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", - "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", - "label": "Aries Test Agent", - "accept": [ - "didcomm/aip1", - "didcomm/aip2;env=rfc19" - ], - "handshake_protocols": [ - "https://didcomm.org/didexchange/1.0", - "https://didcomm.org/connections/1.0" - ], - "services": [ - { - "id": "#inline-0", - "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", - "type": "did-communication", - "recipientKeys": [ - "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" - ], - "routingKeys": [] - } - ] - }, - "outOfBandRecord": { - "_tags": { - "invitationId": "1cbd22e4-1906-41e9-8807-83d84437f978", - "state": "await-response", - "role": "sender", - "recipientKeyFingerprints": [ - "z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj" - ] - }, - "outOfBandInvitation": { - "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", - "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", - "label": "Aries Test Agent", - "accept": [ - "didcomm/aip1", - "didcomm/aip2;env=rfc19" - ], - "handshake_protocols": [ - "https://didcomm.org/didexchange/1.0", - "https://didcomm.org/connections/1.0" - ], - "services": [ - { - "id": "#inline-0", - "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", - "type": "did-communication", - "recipientKeys": [ - "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" - ], - "routingKeys": [] - } - ] - }, - "metadata": {}, - "id": "42a95528-0e30-4f86-a462-0efb02178b53", - "createdAt": "2022-01-01T00:00:00.000Z", - "reusable": false - } - } - } - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Creates an outbound out-of-band record containing out-of-band invitation message defined in\nAries RFC 0434: Out-of-Band Protocol 1.1.", - "tags": [ - "Out Of Band" - ], - "security": [], - "parameters": [], - "requestBody": { - "description": "configuration of how out-of-band invitation should be created", - "required": false, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Omit_CreateOutOfBandInvitationConfig.routing-or-appendedAttachments-or-messages_", - "description": "configuration of how out-of-band invitation should be created" - } - } - } - } - } - }, - "/oob/create-legacy-invitation": { - "post": { - "operationId": "CreateLegacyInvitation", - "responses": { - "200": { - "description": "out-of-band record and invitation", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "invitation": { - "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", - "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", - "label": "Aries Test Agent", - "accept": [ - "didcomm/aip1", - "didcomm/aip2;env=rfc19" - ], - "handshake_protocols": [ - "https://didcomm.org/didexchange/1.0", - "https://didcomm.org/connections/1.0" - ], - "services": [ - { - "id": "#inline-0", - "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", - "type": "did-communication", - "recipientKeys": [ - "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" - ], - "routingKeys": [] - } - ] - }, - "outOfBandRecord": { - "_tags": { - "invitationId": "1cbd22e4-1906-41e9-8807-83d84437f978", - "state": "await-response", - "role": "sender", - "recipientKeyFingerprints": [ - "z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj" - ] - }, - "outOfBandInvitation": { - "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", - "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", - "label": "Aries Test Agent", - "accept": [ - "didcomm/aip1", - "didcomm/aip2;env=rfc19" - ], - "handshake_protocols": [ - "https://didcomm.org/didexchange/1.0", - "https://didcomm.org/connections/1.0" - ], - "services": [ - { - "id": "#inline-0", - "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", - "type": "did-communication", - "recipientKeys": [ - "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" - ], - "routingKeys": [] - } - ] - }, - "metadata": {}, - "id": "42a95528-0e30-4f86-a462-0efb02178b53", - "createdAt": "2022-01-01T00:00:00.000Z", - "reusable": false - } - } - } - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Creates an outbound out-of-band record in the same way how `createInvitation` method does it,\nbut it also converts out-of-band invitation message to an \"legacy\" invitation message defined\nin RFC 0160: Connection Protocol and returns it together with out-of-band record.", - "tags": [ - "Out Of Band" - ], - "security": [], - "parameters": [], - "requestBody": { - "description": "configuration of how a invitation should be created", - "required": false, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Omit_CreateLegacyInvitationConfig.routing_", - "description": "configuration of how a invitation should be created" - } - } - } - } - } - }, - "/oob/create-legacy-connectionless-invitation": { - "post": { - "operationId": "CreateLegacyConnectionlessInvitation", - "responses": { - "200": { - "description": "a message and a invitationUrl", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "message": { - "@id": "eac4ff4e-b4fb-4c1d-aef3-b29c89d1cc00", - "@type": "https://didcomm.org/connections/1.0/invitation" - }, - "invitationUrl": "http://example.com/invitation_url" - } - } - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Creates a new connectionless legacy invitation.", - "tags": [ - "Out Of Band" - ], - "security": [], - "parameters": [], - "requestBody": { - "description": "configuration of how a connection invitation should be created", - "required": true, - "content": { - "application/json": { - "schema": { - "properties": { - "domain": { - "type": "string" - }, - "message": { - "$ref": "#/components/schemas/AgentMessageType" - }, - "recordId": { - "type": "string" - } - }, - "required": [ - "domain", - "message", - "recordId" - ], - "type": "object", - "description": "configuration of how a connection invitation should be created" - } - } - } - } - } - }, - "/oob/receive-invitation": { - "post": { - "operationId": "ReceiveInvitation", - "responses": { - "200": { - "description": "out-of-band record and connection record if one has been created.", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "outOfBandRecord": { - "_tags": { - "invitationId": "1cbd22e4-1906-41e9-8807-83d84437f978", - "state": "await-response", - "role": "sender", - "recipientKeyFingerprints": [ - "z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj" - ] - }, - "outOfBandInvitation": { - "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", - "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", - "label": "Aries Test Agent", - "accept": [ - "didcomm/aip1", - "didcomm/aip2;env=rfc19" - ], - "handshake_protocols": [ - "https://didcomm.org/didexchange/1.0", - "https://didcomm.org/connections/1.0" - ], - "services": [ - { - "id": "#inline-0", - "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", - "type": "did-communication", - "recipientKeys": [ - "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" - ], - "routingKeys": [] - } - ] - }, - "metadata": {}, - "id": "42a95528-0e30-4f86-a462-0efb02178b53", - "createdAt": "2022-01-01T00:00:00.000Z", - "reusable": false - }, - "connectionRecord": { - "_tags": { - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", - "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" - }, - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" - } - } - } - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Creates inbound out-of-band record and assigns out-of-band invitation message to it if the\nmessage is valid.", - "tags": [ - "Out Of Band" - ], - "security": [], - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ReceiveInvitationProps" - } - } - } - } - } - }, - "/oob/receive-invitation-url": { - "post": { - "operationId": "ReceiveInvitationFromUrl", - "responses": { - "200": { - "description": "out-of-band record and connection record if one has been created.", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "outOfBandRecord": { - "_tags": { - "invitationId": "1cbd22e4-1906-41e9-8807-83d84437f978", - "state": "await-response", - "role": "sender", - "recipientKeyFingerprints": [ - "z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj" - ] - }, - "outOfBandInvitation": { - "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", - "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", - "label": "Aries Test Agent", - "accept": [ - "didcomm/aip1", - "didcomm/aip2;env=rfc19" - ], - "handshake_protocols": [ - "https://didcomm.org/didexchange/1.0", - "https://didcomm.org/connections/1.0" - ], - "services": [ - { - "id": "#inline-0", - "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", - "type": "did-communication", - "recipientKeys": [ - "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" - ], - "routingKeys": [] - } - ] - }, - "metadata": {}, - "id": "42a95528-0e30-4f86-a462-0efb02178b53", - "createdAt": "2022-01-01T00:00:00.000Z", - "reusable": false - }, - "connectionRecord": { - "_tags": { - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", - "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" - }, - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" - } - } - } - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Creates inbound out-of-band record and assigns out-of-band invitation message to it if the\nmessage is valid.", - "tags": [ - "Out Of Band" - ], - "security": [], - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ReceiveInvitationByUrlProps" - } - } - } - } - } - }, - "/oob/{outOfBandId}/accept-invitation": { - "post": { - "operationId": "AcceptInvitation", - "responses": { - "200": { - "description": "Ok", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "outOfBandRecord": { - "_tags": { - "invitationId": "1cbd22e4-1906-41e9-8807-83d84437f978", - "state": "await-response", - "role": "sender", - "recipientKeyFingerprints": [ - "z6MktUCPZjfRJXD4GMcYuXiqX2qZ8vBw6UAYpDFiHEUfwuLj" - ] - }, - "outOfBandInvitation": { - "@type": "did:sov:BzCbsNYhMrjHiqZDTUASHg;spec/out-of-band/1.1/invitation", - "@id": "d6472943-e5d0-4d95-8b48-790ed5a41931", - "label": "Aries Test Agent", - "accept": [ - "didcomm/aip1", - "didcomm/aip2;env=rfc19" - ], - "handshake_protocols": [ - "https://didcomm.org/didexchange/1.0", - "https://didcomm.org/connections/1.0" - ], - "services": [ - { - "id": "#inline-0", - "serviceEndpoint": "https://6b77-89-20-162-146.ngrok.io", - "type": "did-communication", - "recipientKeys": [ - "did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM" - ], - "routingKeys": [] - } - ] - }, - "metadata": {}, - "id": "42a95528-0e30-4f86-a462-0efb02178b53", - "createdAt": "2022-01-01T00:00:00.000Z", - "reusable": false - }, - "connectionRecord": { - "_tags": { - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationKey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d", - "verkey": "9HG4rJFpLiWf56MWxHj9rgdpErFzim2zEpHuxy1dw7oz" - }, - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "did": "did:peer:1zQmfQh1T3rSqarP2FZ37uKjdQHPKFdVyo2mGiAPHZ8Ep7hv", - "invitationDid": "did:peer:2.SeyJzIjoiaHR0cHM6Ly9kYTIzLTg5LTIwLTE2Mi0xNDYubmdyb2suaW8iLCJ0IjoiZGlkLWNvbW11bmljYXRpb24iLCJwcmlvcml0eSI6MCwicmVjaXBpZW50S2V5cyI6WyJkaWQ6a2V5Ono2TWtualg3U1lXRmdHMThCYkNEZHJnemhuQnA0UlhyOGVITHZxQ3FvRXllckxiTiN6Nk1rbmpYN1NZV0ZnRzE4QmJDRGRyZ3pobkJwNFJYcjhlSEx2cUNxb0V5ZXJMYk4iXSwiciI6W119", - "outOfBandId": "edbc89fe-785f-4774-a288-46012486881d" - } - } - } - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Accept a connection invitation as invitee (by sending a connection request message) for the connection with the specified connection id.\nThis is not needed when auto accepting of connections is enabled.", - "tags": [ - "Out Of Band" - ], - "security": [], - "parameters": [ - { - "in": "path", - "name": "outOfBandId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AcceptInvitationConfig" - } - } - } - } - } - }, - "/proofs": { - "get": { - "operationId": "GetAllProofs", - "responses": { - "200": { - "description": "ProofRecord[]", - "content": { - "application/json": { - "schema": { - "items": { - "$ref": "#/components/schemas/Record_string.any_" - }, - "type": "array" - }, - "examples": { - "Example 1": { - "value": [ - { - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", - "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7" - } - ] - } - } - } - } - } - }, - "description": "Retrieve all proof records", - "tags": [ - "Proofs" - ], - "security": [], - "parameters": [ - { - "in": "query", - "name": "threadId", - "required": false, - "schema": { - "type": "string" - } - } - ] - } - }, - "/proofs/{proofRecordId}": { - "get": { - "operationId": "GetProofById", - "responses": { - "200": { - "description": "ProofRecord", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", - "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7" - } - } - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Retrieve proof record by proof record id", - "tags": [ - "Proofs" - ], - "security": [], - "parameters": [ - { - "in": "path", - "name": "proofRecordId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ] - }, - "delete": { - "operationId": "DeleteProof", - "responses": { - "200": { - "description": "Ok", - "content": { - "application/json": { - "schema": {} - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Deletes a proof record in the proof repository.", - "tags": [ - "Proofs" - ], - "security": [], - "parameters": [ - { - "in": "path", - "name": "proofRecordId", - "required": true, - "schema": { - "$ref": "#/components/schemas/RecordId" - } - } - ] - } - }, - "/proofs/propose-proof": { - "post": { - "operationId": "ProposeProof", - "responses": { - "200": { - "description": "ProofRecord", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", - "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7" - } - } - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Initiate a new presentation exchange as prover by sending a presentation proposal request\nto the connection with the specified connection id.", - "tags": [ - "Proofs" - ], - "security": [], - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RequestProofProposalOptions" - } - } - } - } - } - }, - "/proofs/{proofRecordId}/accept-proposal": { - "post": { - "operationId": "AcceptProposal", - "responses": { - "200": { - "description": "ProofRecord", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", - "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7" - } - } - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Accept a presentation proposal as verifier by sending an accept proposal message\nto the connection associated with the proof record.", - "tags": [ - "Proofs" - ], - "security": [], - "parameters": [ - { - "in": "path", - "name": "proofRecordId", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "properties": { - "comment": { - "type": "string" - }, - "request": { - "properties": { - "nonce": { - "type": "string" - }, - "version": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "type": "object" - } - }, - "required": [ - "request" - ], - "type": "object" - } - } - } - } - } - }, - "/proofs/request-outofband-proof": { - "post": { - "operationId": "RequestProofOutOfBand", - "responses": { - "200": { - "description": "ProofRequestMessageResponse", - "content": { - "application/json": { - "schema": { - "properties": { - "proofRecord": { - "$ref": "#/components/schemas/ProofRecord" - }, - "proofUrl": { - "type": "string" - } - }, - "required": [ - "proofRecord", - "proofUrl" - ], - "type": "object" - }, - "examples": { - "Example 1": { - "value": { - "proofUrl": "https://example.com/proof-url", - "proofRecord": { - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", - "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7" - } - } - } - } - } - } - } - }, - "description": "Creates a presentation request not bound to any proposal or existing connection", - "tags": [ - "Proofs" - ], - "security": [], - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Omit_RequestProofOptions.connectionId_" - } - } - } - } - } - }, - "/proofs/request-proof": { - "post": { - "operationId": "RequestProof", - "responses": { - "200": { - "description": "ProofRecord", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", - "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7" - } - } - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Creates a presentation request bound to existing connection", - "tags": [ - "Proofs" - ], - "security": [], - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RequestProofOptions" - } - } - } - } - } - }, - "/proofs/{proofRecordId}/accept-request": { - "post": { - "operationId": "AcceptRequest", - "responses": { - "200": { - "description": "ProofRecord", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", - "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7" - } - } - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Accept a presentation request as prover by sending an accept request message\nto the connection associated with the proof record.", - "tags": [ - "Proofs" - ], - "security": [], - "parameters": [ - { - "in": "path", - "name": "proofRecordId", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "properties": { - "comment": { - "type": "string" - }, - "filterByNonRevocationRequirements": { - "type": "boolean" - }, - "filterByPresentationPreview": { - "type": "boolean" - } - }, - "type": "object" - } - } - } - } - } - }, - "/proofs/{proofRecordId}/accept-presentation": { - "post": { - "operationId": "AcceptPresentation", - "responses": { - "200": { - "description": "ProofRecord", - "content": { - "application/json": { - "schema": {}, - "examples": { - "Example 1": { - "value": { - "metadata": {}, - "id": "821f9b26-ad04-4f56-89b6-e2ef9c72b36e", - "createdAt": "2022-01-01T00:00:00.000Z", - "connectionId": "2aecf74c-3073-4f98-9acb-92415d096834", - "threadId": "0019d466-5eea-4269-8c40-031b4896c5b7" - } - } - } - } - } - }, - "404": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "reason": { - "type": "string" - } - }, - "required": [ - "reason" - ], - "type": "object" - } - } - } - }, - "500": { - "description": "", - "content": { - "application/json": { - "schema": { - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - } - } - } - } - }, - "description": "Accept a presentation as prover by sending an accept presentation message\nto the connection associated with the proof record.", - "tags": [ - "Proofs" - ], - "security": [], - "parameters": [ - { - "in": "path", - "name": "proofRecordId", - "required": true, - "schema": { - "type": "string" - } - } - ] - } - } - }, - "servers": [ - { - "url": "/" - } - ] -} \ No newline at end of file diff --git a/packages/rest/src/server.ts b/packages/rest/src/server.ts index d0f22a4e..6303b795 100644 --- a/packages/rest/src/server.ts +++ b/packages/rest/src/server.ts @@ -1,9 +1,13 @@ import 'reflect-metadata' +import type { RequestWithAgent } from './authentication' +import type { ApiError } from './error' import type { ServerConfig } from './utils/ServerConfig' +import type { RestRootAgent, RestRootAgentWithTenants } from './utils/agent' import type { Response as ExResponse, Request as ExRequest, NextFunction } from 'express' import type { Exception } from 'tsoa' -import { Agent } from '@aries-framework/core' +import { Agent } from '@credo-ts/core' +import { TenantAgent } from '@credo-ts/tenants/build/TenantAgent' import bodyParser from 'body-parser' import cors from 'cors' import express from 'express' @@ -15,10 +19,10 @@ import { basicMessageEvents } from './events/BasicMessageEvents' import { connectionEvents } from './events/ConnectionEvents' import { credentialEvents } from './events/CredentialEvents' import { proofEvents } from './events/ProofEvents' -import { RegisterRoutes } from './routes/routes' +import { RegisterRoutes } from './generated/routes' -export const setupServer = async (agent: Agent, config: ServerConfig) => { - container.registerInstance(Agent, agent) +export const setupServer = async (agent: RestRootAgent | RestRootAgentWithTenants, config: ServerConfig) => { + container.registerInstance(Agent, agent as Agent) const app = config.app ?? express() if (config.cors) app.use(cors()) @@ -37,12 +41,29 @@ export const setupServer = async (agent: Agent, config: ServerConfig) => { }), ) app.use(bodyParser.json()) - app.use('/docs', serve, async (_req: ExRequest, res: ExResponse) => { - return res.send(generateHTML(await import('./routes/swagger.json'))) + app.use('/docs', serve, async (_req: ExRequest, res: ExResponse, next: NextFunction) => { + res.send(generateHTML(await import('./generated/swagger.json'))) + next() }) RegisterRoutes(app) + async function endTenantSessionIfActive(request: ExRequest) { + if ('user' in request) { + const agent = (request as RequestWithAgent)?.user?.agent + if (agent instanceof TenantAgent) { + agent.config.logger.debug('Ending tenant session') + await agent.endSession() + } + } + } + + app.use(async (req, res, next) => { + // End tenant session if active + await endTenantSessionIfActive(req) + next() + }) + app.use((req, res, next) => { if (req.url == '/') { res.redirect('/docs') @@ -51,13 +72,21 @@ export const setupServer = async (agent: Agent, config: ServerConfig) => { next() }) - app.use(function errorHandler(err: unknown, req: ExRequest, res: ExResponse, next: NextFunction): ExResponse | void { + app.use(async function errorHandler( + err: unknown, + req: ExRequest, + res: ExResponse, + next: NextFunction, + ): Promise { + // End tenant session if active + await endTenantSessionIfActive(req) + if (err instanceof ValidateError) { agent.config.logger.warn(`Caught Validation Error for ${req.path}:`, err.fields) return res.status(422).json({ message: 'Validation Failed', details: err?.fields, - }) + } satisfies ApiError) } if (err instanceof Error) { @@ -66,22 +95,23 @@ export const setupServer = async (agent: Agent, config: ServerConfig) => { return res.status(400).json({ message: `Bad Request`, details: err.message, - }) + } satisfies ApiError) + } + + if (exceptionError.status === 401) { + return res.status(401).json({ + message: `Unauthorized`, + details: err.message, + } satisfies ApiError) } agent.config.logger.error('Internal Server Error.', err) return res.status(500).json({ message: 'Internal Server Error. Check server logging.', - }) + } satisfies ApiError) } next() }) - app.use(function notFoundHandler(_req, res: ExResponse) { - res.status(404).send({ - message: 'Not Found', - }) - }) - return app } diff --git a/packages/rest/src/utils/agent.ts b/packages/rest/src/utils/agent.ts index 5b5b9efa..e59e3df1 100644 --- a/packages/rest/src/utils/agent.ts +++ b/packages/rest/src/utils/agent.ts @@ -1,79 +1,196 @@ +import type { AnonCredsRegistry } from '@credo-ts/anoncreds' +import type { IndyVdrPoolConfig } from '@credo-ts/indy-vdr' +import type { TenantAgent } from '@credo-ts/tenants/build/TenantAgent' + +import { + AnonCredsCredentialFormatService, + AnonCredsProofFormatService, + V1CredentialProtocol, + AnonCredsModule, + LegacyIndyCredentialFormatService, + LegacyIndyProofFormatService, + V1ProofProtocol, +} from '@credo-ts/anoncreds' +import { AskarModule, AskarMultiWalletDatabaseScheme } from '@credo-ts/askar' import { + V2CredentialProtocol, + V2ProofProtocol, + Agent, AutoAcceptCredential, AutoAcceptProof, - Agent, - ConnectionInvitationMessage, + ConnectionsModule, + CredentialsModule, HttpOutboundTransport, LogLevel, - utils, -} from '@aries-framework/core' -import { agentDependencies, HttpInboundTransport } from '@aries-framework/node' -import path from 'path' + MediatorModule, + ProofsModule, + DidsModule, + KeyDidRegistrar, + JwkDidRegistrar, + PeerDidRegistrar, + WebDidResolver, + KeyDidResolver, + JwkDidResolver, + PeerDidResolver, +} from '@credo-ts/core' +import { + IndyVdrAnonCredsRegistry, + IndyVdrModule, + IndyVdrIndyDidResolver, + IndyVdrSovDidResolver, + IndyVdrIndyDidRegistrar, +} from '@credo-ts/indy-vdr' +import { agentDependencies, HttpInboundTransport } from '@credo-ts/node' +import { TenantsModule } from '@credo-ts/tenants' +import { anoncreds } from '@hyperledger/anoncreds-nodejs' +import { ariesAskar } from '@hyperledger/aries-askar-nodejs' +import { indyVdr } from '@hyperledger/indy-vdr-nodejs' import { TsLogger } from './logger' import { BCOVRIN_TEST_GENESIS } from './util' -export const genesisPath = process.env.GENESIS_TXN_PATH - ? path.resolve(process.env.GENESIS_TXN_PATH) - : path.join(__dirname, '../../../../network/genesis/local-genesis.txn') +type ModulesWithoutTenants = Omit, 'tenants'> + +export type RestRootAgent = Agent +export type RestRootAgentWithTenants = Agent }> +export type RestTenantAgent = TenantAgent +export type RestAgent = RestRootAgent | RestTenantAgent | RestRootAgentWithTenants + +export const getAgentModules = (options: { + autoAcceptConnections: boolean + autoAcceptProofs: AutoAcceptProof + autoAcceptCredentials: AutoAcceptCredential + autoAcceptMediationRequests: boolean + indyLedgers?: [IndyVdrPoolConfig, ...IndyVdrPoolConfig[]] + extraAnonCredsRegistries?: AnonCredsRegistry[] + multiTenant: boolean +}) => { + const legacyIndyCredentialFormatService = new LegacyIndyCredentialFormatService() + const legacyIndyProofFormatService = new LegacyIndyProofFormatService() + + const baseModules = { + connections: new ConnectionsModule({ + autoAcceptConnections: options.autoAcceptConnections, + }), + proofs: new ProofsModule({ + autoAcceptProofs: options.autoAcceptProofs, + proofProtocols: [ + new V1ProofProtocol({ + indyProofFormat: legacyIndyProofFormatService, + }), + new V2ProofProtocol({ + proofFormats: [legacyIndyProofFormatService, new AnonCredsProofFormatService()], + }), + ], + }), + credentials: new CredentialsModule({ + autoAcceptCredentials: options.autoAcceptCredentials, + credentialProtocols: [ + new V1CredentialProtocol({ + indyCredentialFormat: legacyIndyCredentialFormatService, + }), + new V2CredentialProtocol({ + credentialFormats: [legacyIndyCredentialFormatService, new AnonCredsCredentialFormatService()], + }), + ], + }), + anoncreds: new AnonCredsModule({ + registries: [new IndyVdrAnonCredsRegistry(), ...(options.extraAnonCredsRegistries ?? [])], + anoncreds, + }), + askar: new AskarModule({ + ariesAskar, + multiWalletDatabaseScheme: AskarMultiWalletDatabaseScheme.ProfilePerWallet, + }), + mediator: new MediatorModule({ + autoAcceptMediationRequests: options.autoAcceptMediationRequests, + }), + dids: new DidsModule({ + registrars: [new KeyDidRegistrar(), new JwkDidRegistrar(), new PeerDidRegistrar(), new IndyVdrIndyDidRegistrar()], + resolvers: [ + new WebDidResolver(), + new KeyDidResolver(), + new JwkDidResolver(), + new PeerDidResolver(), + new IndyVdrIndyDidResolver(), + new IndyVdrSovDidResolver(), + ], + }), + } as const + + const modules: typeof baseModules & { tenants?: TenantsModule; indyVdr?: IndyVdrModule } = + baseModules + + if (options.multiTenant) { + modules.tenants = new TenantsModule({ + sessionLimit: Infinity, + }) + } + + if (options.indyLedgers) { + modules.indyVdr = new IndyVdrModule({ + indyVdr, + networks: options.indyLedgers, + }) + } + + return modules +} export const setupAgent = async ({ name, - publicDidSeed, endpoints, - port, + extraAnonCredsRegistries, + httpInboundTransportPort, + multiTenant = false, }: { name: string - publicDidSeed: string endpoints: string[] - port: number -}) => { - const logger = new TsLogger(LogLevel.debug) + extraAnonCredsRegistries?: AnonCredsRegistry[] + httpInboundTransportPort?: number + multiTenant?: boolean +}): Promise => { + // FIXME: logger should not be enabled by default + const logger = new TsLogger(LogLevel.off) - const agent = new Agent( - { - publicDidSeed, + const modules = getAgentModules({ + autoAcceptConnections: true, + autoAcceptProofs: AutoAcceptProof.ContentApproved, + autoAcceptCredentials: AutoAcceptCredential.ContentApproved, + autoAcceptMediationRequests: true, + indyLedgers: [ + { + isProduction: false, + indyNamespace: 'bcovrin:test', + genesisTransactions: BCOVRIN_TEST_GENESIS, + connectOnStartup: true, + }, + ], + extraAnonCredsRegistries, + multiTenant, + }) + + const agent = new Agent({ + config: { label: name, - endpoints: endpoints, - autoAcceptConnections: true, - autoAcceptProofs: AutoAcceptProof.ContentApproved, - autoAcceptCredentials: AutoAcceptCredential.ContentApproved, + endpoints, walletConfig: { id: name, key: name }, - useLegacyDidSovPrefix: true, + useDidSovPrefixWhereAllowed: true, logger: logger, - indyLedgers: [ - { - id: `TestLedger-${utils.uuid()}`, - genesisTransactions: BCOVRIN_TEST_GENESIS, - isProduction: false, - }, - ], + autoUpdateStorageOnStartup: true, }, - agentDependencies, - ) - - const httpInbound = new HttpInboundTransport({ - port: port, + dependencies: agentDependencies, + modules, }) - agent.registerInboundTransport(httpInbound) - agent.registerOutboundTransport(new HttpOutboundTransport()) + if (httpInboundTransportPort) { + const httpInbound = new HttpInboundTransport({ + port: httpInboundTransportPort, + }) - httpInbound.app.get('/invitation', async (req, res) => { - if (typeof req.query.d_m === 'string') { - const invitation = await ConnectionInvitationMessage.fromUrl(req.url.replace('d_m=', 'c_i=')) - res.send(invitation.toJSON()) - } - if (typeof req.query.c_i === 'string') { - const invitation = await ConnectionInvitationMessage.fromUrl(req.url) - res.send(invitation.toJSON()) - } else { - const { outOfBandInvitation } = await agent.oob.createInvitation() - - res.send(outOfBandInvitation.toUrl({ domain: endpoints + '/invitation' })) - } - }) + agent.registerInboundTransport(httpInbound) + } await agent.initialize() diff --git a/packages/rest/src/utils/helpers.ts b/packages/rest/src/utils/helpers.ts index a66b4a69..9cb2f08a 100644 --- a/packages/rest/src/utils/helpers.ts +++ b/packages/rest/src/utils/helpers.ts @@ -1,5 +1,18 @@ -import { JsonTransformer } from '@aries-framework/core' -import { JsonEncoder } from '@aries-framework/core/build/utils/JsonEncoder' +import { JsonTransformer } from '@credo-ts/core' +import { JsonEncoder } from '@credo-ts/core/build/utils/JsonEncoder' + +export function maybeMapValues( + transform: (input: V) => U, + obj?: { + [key: string]: V + }, +) { + if (!obj) { + return obj + } + + return Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, transform(value)])) +} export function objectToJson(result: T) { const serialized = JsonTransformer.serialize(result) diff --git a/packages/rest/src/utils/logger.ts b/packages/rest/src/utils/logger.ts index 8ec2d9cb..4ae1b57a 100644 --- a/packages/rest/src/utils/logger.ts +++ b/packages/rest/src/utils/logger.ts @@ -2,7 +2,7 @@ import type { ILogObject } from 'tslog' -import { LogLevel, BaseLogger } from '@aries-framework/core' +import { LogLevel, BaseLogger } from '@credo-ts/core' import { appendFileSync } from 'fs' import { Logger } from 'tslog' diff --git a/packages/rest/src/utils/response.ts b/packages/rest/src/utils/response.ts new file mode 100644 index 00000000..9eadbf58 --- /dev/null +++ b/packages/rest/src/utils/response.ts @@ -0,0 +1,16 @@ +import type { ApiError } from '../error' + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function alternativeResponse(input: T): any { + return input +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function apiErrorResponse(error: string | Error | unknown, details?: unknown): any { + const message = typeof error === 'string' ? error : error instanceof Error ? error.message : 'Unknown error' + + return { + message, + details, + } satisfies ApiError +} diff --git a/packages/rest/src/utils/serialize.ts b/packages/rest/src/utils/serialize.ts new file mode 100644 index 00000000..bdd3eaea --- /dev/null +++ b/packages/rest/src/utils/serialize.ts @@ -0,0 +1,9 @@ +import type { BaseRecord } from '@credo-ts/core' + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export function toApiModel>(record: BaseRecord): ToType { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { _tags, ...recordJson } = record.toJSON() + + return recordJson as unknown as ToType +} diff --git a/packages/rest/src/utils/webhook.ts b/packages/rest/src/utils/webhook.ts index 0ccb8714..5ea758b2 100644 --- a/packages/rest/src/utils/webhook.ts +++ b/packages/rest/src/utils/webhook.ts @@ -4,15 +4,30 @@ import express, { json } from 'express' export const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)) +export const waitForHook = async ( + arr: WebhookData[], + predicate: (webhook: WebhookData) => boolean, + timeoutMs = 5000, + pollMs = 100, +): Promise => { + for (let t = 0; t < timeoutMs; t += pollMs) { + const match = arr.find(predicate) + if (match) { + return match + } + await sleep(pollMs) + } + return null +} + export interface WebhookData { receivedAt: string headers: IncomingHttpHeaders body: { - id: string - state: string - [key: string]: unknown + type: string + // eslint-disable-next-line @typescript-eslint/no-explicit-any + payload: Record } - topic: string } export const webhookListener = async (port: number, webhooksReceived: WebhookData[]) => { @@ -20,8 +35,8 @@ export const webhookListener = async (port: number, webhooksReceived: WebhookDat app.use(json()) - app.post('/:topic', (req, res) => { - const hookData: WebhookData = { receivedAt: Date(), headers: req.headers, body: req.body, topic: req.params.topic } + app.post('/', (req, res) => { + const hookData: WebhookData = { receivedAt: Date(), headers: req.headers, body: req.body } webhooksReceived.push(hookData) res.sendStatus(200) }) diff --git a/packages/rest/tests/InternalOutboundTransport.ts b/packages/rest/tests/InternalOutboundTransport.ts new file mode 100644 index 00000000..2d497df1 --- /dev/null +++ b/packages/rest/tests/InternalOutboundTransport.ts @@ -0,0 +1,29 @@ +import type { OutboundPackage, OutboundTransport, Agent, Logger } from '@credo-ts/core' + +import { MessageReceiver, InjectionSymbols } from '@credo-ts/core' + +export class InternalOutboundTransport implements OutboundTransport { + private logger!: Logger + private agent!: Agent + + public supportedSchemes = ['internal'] + + public async start(agent: Agent): Promise { + this.agent = agent + + this.logger = agent.dependencyManager.resolve(InjectionSymbols.Logger) + } + + public async stop(): Promise { + // No logic needed + } + + public async sendMessage(outboundPackage: OutboundPackage) { + const messageReceiver = this.agent.dependencyManager.resolve(MessageReceiver) + + this.logger.debug(`Sending outbound message to self`) + + // We can just receive the message as it's internal. + messageReceiver.receiveMessage(outboundPackage.payload) + } +} diff --git a/packages/rest/tests/agent.test.ts b/packages/rest/tests/agent.test.ts deleted file mode 100644 index 41667b3c..00000000 --- a/packages/rest/tests/agent.test.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { Agent } from '@aries-framework/core' -import type { Express } from 'express' - -import request from 'supertest' - -import { setupServer } from '../src/server' - -import { getTestAgent } from './utils/helpers' - -describe('AgentController', () => { - let app: Express - let agent: Agent - - beforeAll(async () => { - agent = await getTestAgent('Agent REST Agent Test', 3001) - app = await setupServer(agent, { port: 3000 }) - }) - - describe('Get agent info', () => { - test('should return agent information', async () => { - const response = await request(app).get('/agent') - - expect(response.body.label).toBeDefined() - expect(response.body.endpoints).toBeDefined() - expect(response.body.isInitialized).toBeTruthy() - expect(response.body.publicDid).toBeDefined() - }) - - test('should response with a 200 status code', async () => { - const response = await request(app).get('/agent') - - expect(response.statusCode).toBe(200) - }) - }) - - afterAll(async () => { - await agent.shutdown() - await agent.wallet.delete() - }) -}) diff --git a/packages/rest/tests/basicMessage.test.ts b/packages/rest/tests/basicMessage.test.ts deleted file mode 100644 index 6ba6a709..00000000 --- a/packages/rest/tests/basicMessage.test.ts +++ /dev/null @@ -1,95 +0,0 @@ -/* eslint-disable @typescript-eslint/no-non-null-assertion */ -import type { Agent, BasicMessageRecord, ConnectionRecord } from '@aries-framework/core' -import type { Server } from 'net' - -import { BasicMessageEventTypes } from '@aries-framework/core' -import request from 'supertest' -import WebSocket from 'ws' - -import { startServer } from '../src' - -import { getTestAgent, objectToJson } from './utils/helpers' - -describe('BasicMessageController', () => { - let server: Server - let aliceAgent: Agent - let bobAgent: Agent - let bobConnectionToAlice: ConnectionRecord - - beforeAll(async () => { - aliceAgent = await getTestAgent('Basic Message REST Agent Test Alice', 3002) - bobAgent = await getTestAgent('Basic Message REST Agent Test Bob', 5034) - server = await startServer(bobAgent, { port: 5033 }) - - const { outOfBandInvitation } = await aliceAgent.oob.createInvitation() - const { outOfBandRecord: bobOOBRecord } = await bobAgent.oob.receiveInvitation(outOfBandInvitation) - - const [bobConnectionAtBobAlice] = await bobAgent.connections.findAllByOutOfBandId(bobOOBRecord.id) - bobConnectionToAlice = await bobAgent.connections.returnWhenIsConnected(bobConnectionAtBobAlice!.id) - }) - - afterEach(() => { - jest.clearAllMocks() - }) - - describe('Send basic message to connection', () => { - test('should give 204 no content when message is sent', async () => { - const response = await request(server) - .post(`/basic-messages/${bobConnectionToAlice?.id}`) - .send({ content: 'Hello!' }) - - expect(response.statusCode).toBe(204) - }) - - test('should give 404 not found when connection is not found', async () => { - const response = await request(server) - .post(`/basic-messages/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa`) - .send({ content: 'Hello!' }) - - expect(response.statusCode).toBe(404) - }) - }) - - describe('Basic Message WebSocket event', () => { - test('should return basic message event sent from test agent to clients', async () => { - const client = new WebSocket('ws://localhost:5033') - - const waitForMessagePromise = new Promise((resolve) => { - client.on('message', (data) => { - const event = JSON.parse(data as string) - - if (event.type === BasicMessageEventTypes.BasicMessageStateChanged) { - expect(event.payload.basicMessageRecord.connectionId).toBe(bobConnectionToAlice.id) - client.terminate() - resolve(undefined) - } - }) - }) - - await request(server).post(`/basic-messages/${bobConnectionToAlice?.id}`).send({ content: 'Hello!' }) - - await waitForMessagePromise - }) - }) - - describe('Get basic messages', () => { - test('should return list of basic messages filtered by connection id', async () => { - const spy = jest.spyOn(bobAgent.basicMessages, 'findAllByQuery') - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(server).get(`/basic-messages/${bobConnectionToAlice.id}`) - const result = await getResult() - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual(result.map(objectToJson)) - }) - }) - - afterAll(async () => { - await aliceAgent.shutdown() - await aliceAgent.wallet.delete() - await bobAgent.shutdown() - await bobAgent.wallet.delete() - server.close() - }) -}) diff --git a/packages/rest/tests/connection.test.ts b/packages/rest/tests/connection.test.ts deleted file mode 100644 index 45b279dc..00000000 --- a/packages/rest/tests/connection.test.ts +++ /dev/null @@ -1,224 +0,0 @@ -import type { Agent, ConnectionRecord } from '@aries-framework/core' -import type { Server } from 'net' - -import { ConnectionEventTypes, ConnectionRepository } from '@aries-framework/core' -import request from 'supertest' -import WebSocket from 'ws' - -import { startServer } from '../src' - -import { getTestConnection, getTestAgent, objectToJson } from './utils/helpers' - -describe('ConnectionController', () => { - let app: Server - let aliceAgent: Agent - let bobAgent: Agent - let connection: ConnectionRecord - - beforeAll(async () => { - aliceAgent = await getTestAgent('Connection REST Agent Test Alice', 3012) - bobAgent = await getTestAgent('Connection REST Agent Test Bob', 3013) - app = await startServer(bobAgent, { port: 3009 }) - connection = getTestConnection() - }) - - afterEach(() => { - jest.clearAllMocks() - }) - - describe('Get all connections', () => { - test('should return all connections', async () => { - const connectionRepository = bobAgent.dependencyManager.resolve(ConnectionRepository) - jest.spyOn(connectionRepository, 'findByQuery').mockResolvedValueOnce([connection]) - - const response = await request(app).get('/connections') - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual([connection].map(objectToJson)) - }) - }) - - describe('Get all connections by state', () => { - test('should return all credentials by specified state', async () => { - const connectionRepository = bobAgent.dependencyManager.resolve(ConnectionRepository) - const findByQuerySpy = jest.spyOn(connectionRepository, 'findByQuery').mockResolvedValueOnce([connection]) - - const response = await request(app).get('/connections').query({ state: connection.state }) - - expect(findByQuerySpy).toBeCalledWith({ - state: connection.state, - }) - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual([connection].map(objectToJson)) - }) - }) - - describe('Get all connections by outOfBandId', () => { - test('should return all credentials by specified outOfBandId', async () => { - const connectionRepository = bobAgent.dependencyManager.resolve(ConnectionRepository) - const findByQuerySpy = jest.spyOn(connectionRepository, 'findByQuery').mockResolvedValueOnce([connection]) - - const response = await request(app).get('/connections').query({ outOfBandId: connection.outOfBandId }) - - expect(findByQuerySpy).toBeCalledWith({ - outOfBandId: connection.outOfBandId, - }) - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual([connection].map(objectToJson)) - }) - }) - - describe('Get all connections by alias', () => { - test('should return all credentials by specified alias', async () => { - const connectionRepository = bobAgent.dependencyManager.resolve(ConnectionRepository) - const findByQuerySpy = jest.spyOn(connectionRepository, 'findByQuery').mockResolvedValueOnce([connection]) - - const response = await request(app).get('/connections').query({ alias: connection.alias }) - - expect(findByQuerySpy).toBeCalledWith({ - alias: connection.alias, - }) - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual([connection].map(objectToJson)) - }) - }) - - describe('Get all connections by myDid', () => { - test('should return all credentials by specified peer did', async () => { - const connectionRepository = bobAgent.dependencyManager.resolve(ConnectionRepository) - const findByQuerySpy = jest.spyOn(connectionRepository, 'findByQuery').mockResolvedValueOnce([connection]) - - const response = await request(app).get('/connections').query({ myDid: connection.did }) - - expect(findByQuerySpy).toBeCalledWith({ - myDid: connection.did, - }) - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual([connection].map(objectToJson)) - }) - }) - - describe('Get all connections by theirDid', () => { - test('should return all credentials by specified peer did', async () => { - const connectionRepository = bobAgent.dependencyManager.resolve(ConnectionRepository) - const findByQuerySpy = jest.spyOn(connectionRepository, 'findByQuery').mockResolvedValueOnce([connection]) - - const response = await request(app).get('/connections').query({ theirDid: connection.theirDid }) - - expect(findByQuerySpy).toBeCalledWith({ - theirDid: connection.theirDid, - }) - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual([connection].map(objectToJson)) - }) - }) - - describe('Get all connections by theirLabel', () => { - test('should return all credentials by specified peer label', async () => { - const connectionRepository = bobAgent.dependencyManager.resolve(ConnectionRepository) - const findByQuerySpy = jest.spyOn(connectionRepository, 'findByQuery').mockResolvedValueOnce([connection]) - - const response = await request(app).get('/connections').query({ theirLabel: connection.theirLabel }) - - expect(findByQuerySpy).toBeCalledWith({ - theirLabel: connection.theirLabel, - }) - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual([connection].map(objectToJson)) - }) - }) - - describe('Get connection by id', () => { - test('should return connection record', async () => { - const spy = jest.spyOn(bobAgent.connections, 'findById').mockResolvedValueOnce(connection) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).get(`/connections/${connection.id}`) - - expect(response.statusCode).toBe(200) - expect(spy).toHaveBeenCalledWith(connection.id) - expect(response.body).toEqual(objectToJson(await getResult())) - }) - - test('should give 404 not found when connection is not found', async () => { - const response = await request(app).get(`/connections/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa`) - - expect(response.statusCode).toBe(404) - }) - }) - - describe('Accept request', () => { - test('should return accepted connection record', async () => { - const spy = jest.spyOn(bobAgent.connections, 'acceptRequest').mockResolvedValueOnce(connection) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).post(`/connections/${connection.id}/accept-request`) - - expect(response.statusCode) - expect(spy).toHaveBeenCalledWith(connection.id) - expect(response.body).toEqual(objectToJson(await getResult())) - }) - - test('should throw error when connection id is not found', async () => { - const response = await request(app).post(`/connections/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/accept-request`) - - expect(response.statusCode).toBe(404) - }) - }) - - describe('Accept response', () => { - test('should return accepted connection record', async () => { - const spy = jest.spyOn(bobAgent.connections, 'acceptResponse').mockResolvedValueOnce(connection) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).post(`/connections/${connection.id}/accept-response`) - - expect(response.statusCode) - expect(spy).toHaveBeenCalledWith(connection.id) - expect(response.body).toEqual(objectToJson(await getResult())) - }) - - test('should throw error when connectionId is not found', async () => { - const response = await request(app).post(`/connections/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/accept-response`) - - expect(response.statusCode).toBe(404) - }) - }) - - describe('Connection WebSocket Event', () => { - test('should return connection event sent from test agent to websocket client', async () => { - expect.assertions(1) - - const client = new WebSocket('ws://localhost:3009') - - const aliceOutOfBandRecord = await aliceAgent.oob.createInvitation() - - const waitForMessagePromise = new Promise((resolve) => { - client.on('message', (data) => { - const event = JSON.parse(data as string) - - expect(event.type).toBe(ConnectionEventTypes.ConnectionStateChanged) - client.terminate() - resolve(undefined) - }) - }) - - await bobAgent.oob.receiveInvitation(aliceOutOfBandRecord.outOfBandInvitation) - await waitForMessagePromise - }) - }) - - afterAll(async () => { - await aliceAgent.shutdown() - await aliceAgent.wallet.delete() - await bobAgent.shutdown() - await bobAgent.wallet.delete() - app.close() - }) -}) diff --git a/packages/rest/tests/credential.test.ts b/packages/rest/tests/credential.test.ts deleted file mode 100644 index 295c8d8d..00000000 --- a/packages/rest/tests/credential.test.ts +++ /dev/null @@ -1,567 +0,0 @@ -import type { Agent, CredentialStateChangedEvent, OutOfBandRecord } from '@aries-framework/core' -import type { Server } from 'net' - -import { - AutoAcceptCredential, - CredentialExchangeRecord, - CredentialPreviewAttribute, - CredentialState, - CredentialEventTypes, - AgentMessage, - JsonTransformer, - CredentialRepository, -} from '@aries-framework/core' -import request from 'supertest' -import WebSocket from 'ws' - -import { startServer } from '../src' - -import { objectToJson, getTestCredential, getTestAgent, getTestOffer, getTestOutOfBandRecord } from './utils/helpers' - -describe('CredentialController', () => { - let app: Server - let aliceAgent: Agent - let bobAgent: Agent - let testCredential: CredentialExchangeRecord - let testOffer: { - message: AgentMessage - credentialRecord: CredentialExchangeRecord - } - let outOfBandRecord: OutOfBandRecord - - beforeAll(async () => { - aliceAgent = await getTestAgent('Credential REST Agent Test Alice', 3022) - bobAgent = await getTestAgent('Credential REST Agent Test Bob', 3023) - app = await startServer(bobAgent, { port: 3024 }) - - testCredential = getTestCredential() as CredentialExchangeRecord - testOffer = getTestOffer() - outOfBandRecord = getTestOutOfBandRecord() - }) - - afterEach(() => { - jest.clearAllMocks() - }) - - describe('Get all credentials', () => { - test('should return all credentials', async () => { - const credentialRepository = bobAgent.dependencyManager.resolve(CredentialRepository) - jest.spyOn(credentialRepository, 'findByQuery').mockResolvedValueOnce([testCredential]) - - const response = await request(app).get('/credentials') - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual([testCredential].map(objectToJson)) - }) - }) - - describe('Get all credentials by state', () => { - test('should return all credentials by specified state', async () => { - const credentialRepository = bobAgent.dependencyManager.resolve(CredentialRepository) - const findByQuerySpy = jest.spyOn(credentialRepository, 'findByQuery').mockResolvedValueOnce([testCredential]) - - const response = await request(app).get('/credentials').query({ state: testCredential.state }) - - expect(findByQuerySpy).toBeCalledWith({ - state: testCredential.state, - }) - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual([testCredential].map(objectToJson)) - }) - }) - - describe('Get all credentials by threadId', () => { - test('should return all credentials by specified threadId', async () => { - const credentialRepository = bobAgent.dependencyManager.resolve(CredentialRepository) - const findByQuerySpy = jest.spyOn(credentialRepository, 'findByQuery').mockResolvedValueOnce([testCredential]) - - const response = await request(app).get('/credentials').query({ threadId: testCredential.threadId }) - - expect(findByQuerySpy).toBeCalledWith({ - threadId: testCredential.threadId, - }) - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual([testCredential].map(objectToJson)) - }) - }) - - describe('Get all credentials by connectionId', () => { - test('should return all credentials by connectionId', async () => { - const credentialRepository = bobAgent.dependencyManager.resolve(CredentialRepository) - const findByQuerySpy = jest.spyOn(credentialRepository, 'findByQuery').mockResolvedValueOnce([testCredential]) - - const response = await request(app).get('/credentials').query({ connectionId: testCredential.connectionId }) - - expect(findByQuerySpy).toBeCalledWith({ - connectionId: testCredential.connectionId, - }) - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual([testCredential].map(objectToJson)) - }) - }) - - describe('Get credential by id', () => { - test('should return single credential', async () => { - const spy = jest.spyOn(bobAgent.credentials, 'getById').mockResolvedValueOnce(testCredential) - - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).get(`/credentials/${testCredential.id}`) - const result = await getResult() - - expect(response.statusCode).toBe(200) - expect(spy).toHaveBeenCalledWith(testCredential.id) - expect(response.body).toEqual(objectToJson(result)) - }) - - test('should give 404 not found when credential is not found', async () => { - const response = await request(app).get(`/credentials/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa`) - - expect(response.statusCode).toBe(404) - }) - }) - - describe('Delete credential by id', () => { - test('should give 404 not found when credential is not found', async () => { - const response = await request(app).delete('/credentials/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa') - - expect(response.statusCode).toBe(404) - }) - }) - - describe('Propose a credential', () => { - test('should return credential record', async () => { - const spy = jest.spyOn(bobAgent.credentials, 'proposeCredential').mockResolvedValueOnce(testCredential) - const getResult = (): Promise => spy.mock.results[0].value - - const proposalRequest = { - connectionId: '000000aa-aa00-00a0-aa00-000a0aa00000', - protocolVersion: 'v1', - credentialFormats: { - indy: { - credentialDefinitionId: 'WghBqNdoFjaYh6F5N9eBF:3:CL:3210:test', - issuerDid: 'WghBqNdoFjaYh6F5N9eBF', - schemaId: 'WgWxqztrNooG92RXvxSTWv:2:test:1.0', - schemaIssuerDid: 'WghBqNdoFjaYh6F5N9eBF', - schemaName: 'test', - schemaVersion: '1.0', - attributes: [ - { - name: 'name', - value: 'test', - }, - ], - }, - }, - } - - const response = await request(app).post(`/credentials/propose-credential`).send(proposalRequest) - const result = await getResult() - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual(objectToJson(result)) - }) - - test('should give 404 not found when credential is not found', async () => { - const response = await request(app).post('/credentials/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/accept-offer') - - expect(response.statusCode).toBe(404) - }) - }) - - describe('Accept a credential proposal', () => { - test('should return credential record', async () => { - const spy = jest.spyOn(bobAgent.credentials, 'acceptProposal').mockResolvedValueOnce(testCredential) - const getResult = (): Promise => spy.mock.results[0].value - - const proposalRequest = { - credentialFormats: { - indy: { - credentialDefinitionId: 'WghBqNdoFjaYh6F5N9eBF:3:CL:3210:test', - issuerDid: 'WghBqNdoFjaYh6F5N9eBF', - schemaId: 'WgWxqztrNooG92RXvxSTWv:2:test:1.0', - schemaIssuerDid: 'WghBqNdoFjaYh6F5N9eBF', - schemaName: 'test', - schemaVersion: '1.0', - attributes: [ - { - name: 'name', - value: 'test', - }, - ], - }, - }, - autoAcceptCredential: 'always', - comment: 'test', - } - - const response = await request(app) - .post(`/credentials/${testCredential.id}/accept-proposal`) - .send(proposalRequest) - - const result = await getResult() - - expect(response.statusCode).toBe(200) - expect(spy).toHaveBeenCalledWith({ ...proposalRequest, credentialRecordId: testCredential.id }) - expect(response.body).toEqual(objectToJson(result)) - }) - - test('should work without optional parameters', async () => { - const spy = jest.spyOn(bobAgent.credentials, 'acceptProposal').mockResolvedValueOnce(testCredential) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).post(`/credentials/${testCredential.id}/accept-proposal`) - - const result = await getResult() - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual(objectToJson(result)) - }) - - test('should give 404 not found when credential is not found', async () => { - const response = await request(app).post(`/credentials/000000aa-aa00-00a0-aa00-000a0aa00000/accept-proposal`) - - expect(response.statusCode).toBe(404) - }) - }) - - describe('Credential WebSocket event', () => { - test('should return credential event sent from test agent to websocket client', async () => { - expect.assertions(1) - - const now = new Date() - - // Start client and wait for it to be opened - const client = new WebSocket('ws://localhost:3024') - await new Promise((resolve) => client.once('open', resolve)) - - // Start promise to listen for message - const waitForEvent = new Promise((resolve) => - client.on('message', (data) => { - client.terminate() - resolve(JSON.parse(data as string)) - }), - ) - - // Emit event - bobAgent.events.emit({ - type: CredentialEventTypes.CredentialStateChanged, - payload: { - credentialRecord: new CredentialExchangeRecord({ - protocolVersion: 'v1', - state: CredentialState.OfferSent, - threadId: 'thread-id', - autoAcceptCredential: AutoAcceptCredential.ContentApproved, - connectionId: 'connection-id', - createdAt: now, - credentialAttributes: [ - new CredentialPreviewAttribute({ - name: 'name', - value: 'test', - }), - ], - credentials: [ - { - credentialRecordId: 'credential-id', - credentialRecordType: 'indy', - }, - ], - errorMessage: 'error', - id: 'credential-exchange-id', - revocationNotification: { - revocationDate: now, - comment: 'test', - }, - }), - previousState: CredentialState.CredentialIssued, - }, - }) - - // Wait for event on WebSocket - const event = await waitForEvent - - expect(event).toEqual({ - type: CredentialEventTypes.CredentialStateChanged, - payload: { - credentialRecord: { - protocolVersion: 'v1', - state: CredentialState.OfferSent, - threadId: 'thread-id', - autoAcceptCredential: AutoAcceptCredential.ContentApproved, - connectionId: 'connection-id', - createdAt: now.toISOString(), - metadata: {}, - _tags: {}, - credentialAttributes: [ - { - name: 'name', - value: 'test', - }, - ], - credentials: [ - { - credentialRecordId: 'credential-id', - credentialRecordType: 'indy', - }, - ], - errorMessage: 'error', - id: 'credential-exchange-id', - revocationNotification: { - revocationDate: now.toISOString(), - comment: 'test', - }, - }, - previousState: CredentialState.CredentialIssued, - }, - }) - }) - }) - - describe('Create a credential offer', () => { - test('should return single credential record with attached offer message', async () => { - const spy = jest.spyOn(bobAgent.credentials, 'createOffer').mockResolvedValueOnce(testOffer) - const getResult = (): Promise<{ message: AgentMessage; credentialRecord: CredentialExchangeRecord }> => - spy.mock.results[0].value - - const createOfferRequest = { - protocolVersion: 'v1', - credentialFormats: { - indy: { - credentialDefinitionId: 'WghBqNdoFjaYh6F5N9eBF:3:CL:3210:test', - attributes: [ - { - name: 'name', - value: 'test', - }, - ], - }, - }, - } - - const response = await request(app).post(`/credentials/create-offer`).send(createOfferRequest) - const result = await getResult() - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual(objectToJson(result)) - }) - }) - - describe('Create a credential offer and a corresponding invitation using create-invitation', () => { - test('should return single credential record with attached offer message', async () => { - const spy = jest.spyOn(bobAgent.credentials, 'createOffer').mockResolvedValueOnce(testOffer) - const getResult = (): Promise<{ message: AgentMessage; credentialRecord: CredentialExchangeRecord }> => - spy.mock.results[0].value - - const createOfferRequest = { - protocolVersion: 'v1', - credentialFormats: { - indy: { - credentialDefinitionId: 'WghBqNdoFjaYh6F5N9eBF:3:CL:3210:test', - attributes: [ - { - name: 'name', - value: 'test', - }, - ], - }, - }, - } - - const response = await request(app).post(`/credentials/create-offer`).send(createOfferRequest) - const result = await getResult() - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual(objectToJson(result)) - }) - - test('should return single out of bound record', async () => { - const spy = jest.spyOn(bobAgent.oob, 'createInvitation').mockResolvedValueOnce(outOfBandRecord) - - const params = { - label: 'string', - alias: 'string', - imageUrl: 'string', - goalCode: 'string', - goal: 'string', - handshake: true, - handshakeProtocols: ['https://didcomm.org/connections/1.0'], - multiUseInvitation: true, - autoAcceptConnection: true, - } - - const response = await request(app).post('/oob/create-invitation').send(params) - expect(response.statusCode).toBe(200) - expect(spy).toHaveBeenCalledWith(params) - }) - }) - - describe('Create a credential offer and a corresponding invitation using create-legacy-connectionless-invitation', () => { - test('should return single credential record with attached offer message', async () => { - const spy = jest.spyOn(bobAgent.credentials, 'createOffer').mockResolvedValueOnce(testOffer) - const getResult = (): Promise<{ message: AgentMessage; credentialRecord: CredentialExchangeRecord }> => - spy.mock.results[0].value - - const createOfferRequest = { - protocolVersion: 'v1', - credentialFormats: { - indy: { - credentialDefinitionId: 'WghBqNdoFjaYh6F5N9eBF:3:CL:3210:test', - attributes: [ - { - name: 'name', - value: 'test', - }, - ], - }, - }, - } - - const response = await request(app).post(`/credentials/create-offer`).send(createOfferRequest) - - const result = await getResult() - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual(objectToJson(result)) - }) - - test('should return single out of bound invitation', async () => { - const msg = JsonTransformer.fromJSON( - { - '@id': 'eac4ff4e-b4fb-4c1d-aef3-b29c89d1cc00', - '@type': 'https://didcomm.org/connections/1.0/invitation', - }, - AgentMessage, - ) - - const inputParams = { - domain: 'string', - message: { - '@id': 'eac4ff4e-b4fb-4c1d-aef3-b29c89d1cc00', - '@type': 'https://didcomm.org/connections/1.0/invitation', - }, - recordId: 'string', - } - - const spy = jest.spyOn(bobAgent.oob, 'createLegacyConnectionlessInvitation').mockResolvedValueOnce({ - message: msg, - invitationUrl: 'https://example.com/invitation', - }) - - const response = await request(app).post('/oob/create-legacy-connectionless-invitation').send(inputParams) - - expect(response.statusCode).toBe(200) - expect(spy).toHaveBeenCalledWith({ - ...inputParams, - message: msg, - }) - }) - }) - - describe('Offer a credential', () => { - const offerRequest = { - connectionId: '000000aa-aa00-00a0-aa00-000a0aa00000', - protocolVersion: 'v1', - credentialFormats: { - indy: { - credentialDefinitionId: 'WghBqNdoFjaYh6F5N9eBF:3:CL:3210:test', - attributes: [ - { - name: 'name', - value: 'test', - }, - ], - }, - }, - } - - test('should return credential record', async () => { - const spy = jest.spyOn(bobAgent.credentials, 'offerCredential').mockResolvedValueOnce(testCredential) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).post(`/credentials/offer-credential`).send(offerRequest) - const result = await getResult() - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual(objectToJson(result)) - }) - - test('should give 404 not found when credential is not found', async () => { - const response = await request(app) - .post('/credentials/accept-offer') - .send({ credentialRecordId: 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa' }) - - expect(response.statusCode).toBe(404) - }) - }) - - describe('Accept a credential offer', () => { - test('should return credential record', async () => { - const spy = jest.spyOn(bobAgent.credentials, 'acceptOffer').mockResolvedValueOnce(testCredential) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).post(`/credentials/${testCredential.id}/accept-offer`) - const result = await getResult() - - expect(response.statusCode).toBe(200) - expect(spy).toHaveBeenCalledWith({ credentialRecordId: testCredential.id }) - expect(response.body).toEqual(objectToJson(result)) - }) - - test('should give 404 not found when credential is not found', async () => { - const response = await request(app).post('/credentials/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/accept-offer') - - expect(response.statusCode).toBe(404) - }) - }) - - describe('Accept a credential request', () => { - test('should return credential record', async () => { - const spy = jest.spyOn(bobAgent.credentials, 'acceptRequest').mockResolvedValueOnce(testCredential) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).post(`/credentials/${testCredential.id}/accept-request`) - const result = await getResult() - - expect(response.statusCode).toBe(200) - expect(spy).toHaveBeenCalledWith({ credentialRecordId: testCredential.id }) - expect(response.body).toEqual(objectToJson(result)) - }) - - test('should give 404 not found when credential is not found', async () => { - const response = await request(app).post('/credentials/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/accept-request') - - expect(response.statusCode).toBe(404) - }) - }) - - describe('Accept a credential', () => { - test('should return credential record', async () => { - const spy = jest.spyOn(bobAgent.credentials, 'acceptCredential').mockResolvedValueOnce(testCredential) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).post(`/credentials/${testCredential.id}/accept-credential`) - const result = await getResult() - - expect(response.statusCode).toBe(200) - expect(spy).toHaveBeenCalledWith({ credentialRecordId: testCredential.id }) - expect(response.body).toEqual(objectToJson(result)) - }) - - test('should give 404 not found when credential is not found', async () => { - const response = await request(app).post('/credentials/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/accept-credential') - - expect(response.statusCode).toBe(404) - }) - }) - - afterAll(async () => { - await aliceAgent.shutdown() - await aliceAgent.wallet.delete() - await bobAgent.shutdown() - await bobAgent.wallet.delete() - app.close() - }) -}) diff --git a/packages/rest/tests/credentialDefinition.test.ts b/packages/rest/tests/credentialDefinition.test.ts deleted file mode 100644 index fac94c7e..00000000 --- a/packages/rest/tests/credentialDefinition.test.ts +++ /dev/null @@ -1,97 +0,0 @@ -import type { Agent } from '@aries-framework/core' -import type { Express } from 'express' -import type { CredDef } from 'indy-sdk' - -import request from 'supertest' - -import { setupServer } from '../src/server' - -import { getTestAgent, getTestCredDef } from './utils/helpers' - -describe('CredentialDefinitionController', () => { - let app: Express - let agent: Agent - let testCredDef: CredDef - - beforeAll(async () => { - agent = await getTestAgent('CredentialDefinition REST Agent Test', 3011) - app = await setupServer(agent, { port: 3000 }) - testCredDef = getTestCredDef() - }) - - afterEach(() => { - jest.clearAllMocks() - }) - - describe('get credential definition by id', () => { - test('should return credential definition ', async () => { - const spy = jest.spyOn(agent.ledger, 'getCredentialDefinition').mockResolvedValueOnce(testCredDef) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).get(`/credential-definitions/WgWxqztrNooG92RXvxSTWv:3:CL:20:tag`) - const result = await getResult() - - expect(response.statusCode).toBe(200) - expect(response.body.id).toEqual(result.id) - expect(response.body.schemaId).toEqual(result.schemaId) - expect(response.body.tag).toEqual(result.tag) - expect(response.body.type).toEqual(result.type) - expect(response.body.ver).toEqual(result.ver) - }) - - test('should return 400 BadRequest when id has invalid structure', async () => { - const response = await request(app).get(`/credential-definitions/x`) - expect(response.statusCode).toBe(400) - }) - - test('should return 404 NotFound when credential definition not found', async () => { - const response = await request(app).get(`/credential-definitions/WgWxqztrNooG92RXvxSTWv:3:CL:20:tag`) - expect(response.statusCode).toBe(404) - }) - }) - - describe('create credential definition', () => { - test('should return created credential definition ', async () => { - const spy = jest.spyOn(agent.ledger, 'registerCredentialDefinition').mockResolvedValueOnce(testCredDef) - - jest.spyOn(agent.ledger, 'getSchema').mockResolvedValueOnce({ - id: 'WgWxqztrNooG92RXvxSTWv:2:schema_name:1.0', - name: 'test', - version: '1.0', - ver: '1.0', - seqNo: 9999, - attrNames: ['prop1', 'prop2'], - }) - - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).post(`/credential-definitions`).send({ - tag: 'latest', - supportRevocation: false, - schemaId: 'WgWxqztrNooG92RXvxSTWv:2:schema_name:1.0', - }) - - const result = await getResult() - - expect(response.statusCode).toBe(200) - expect(response.body.id).toEqual(result.id) - expect(response.body.schemaId).toEqual(result.schemaId) - expect(response.body.tag).toEqual(result.tag) - expect(response.body.type).toEqual(result.type) - expect(response.body.ver).toEqual(result.ver) - }) - - test('should throw error when props missing ', async () => { - const response = await request(app).post(`/credential-definitions`).send({ - tag: 'latest', - supportRevocation: false, - }) - expect(response.statusCode).toBe(422) - }) - }) - - afterAll(async () => { - await agent.shutdown() - await agent.wallet.delete() - }) -}) diff --git a/packages/rest/tests/did.test.ts b/packages/rest/tests/did.test.ts deleted file mode 100644 index d51582e2..00000000 --- a/packages/rest/tests/did.test.ts +++ /dev/null @@ -1,78 +0,0 @@ -import type { Agent } from '@aries-framework/core' -import type { Server } from 'net' - -import request from 'supertest' - -import { startServer } from '../src' - -import { getTestAgent } from './utils/helpers' - -describe('DidController', () => { - let app: Server - let aliceAgent: Agent - - beforeAll(async () => { - aliceAgent = await getTestAgent('Did REST Agent Test Alice', 3999) - app = await startServer(aliceAgent, { port: 3000 }) - }) - - afterEach(() => { - jest.clearAllMocks() - }) - - describe('Get did resolution result by did', () => { - test('should give 200 when did resolution record is found', async () => { - const did = 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL' - const response = await request(app).get(`/dids/${did}`) - - expect(response.statusCode).toBe(200) - expect(response.body.didDocument).toEqual({ - '@context': [ - 'https://w3id.org/did/v1', - 'https://w3id.org/security/suites/ed25519-2018/v1', - 'https://w3id.org/security/suites/x25519-2019/v1', - ], - id: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', - verificationMethod: [ - { - id: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', - type: 'Ed25519VerificationKey2018', - controller: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', - publicKeyBase58: '6fioC1zcDPyPEL19pXRS2E4iJ46zH7xP6uSgAaPdwDrx', - }, - ], - authentication: [ - 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', - ], - assertionMethod: [ - 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', - ], - keyAgreement: [ - { - id: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6LSrdqo4M24WRDJj1h2hXxgtDTyzjjKCiyapYVgrhwZAySn', - type: 'X25519KeyAgreementKey2019', - controller: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', - publicKeyBase58: 'FxfdY3DCQxVZddKGAtSjZdFW9bCCW7oRwZn1NFJ2Tbg2', - }, - ], - capabilityInvocation: [ - 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', - ], - capabilityDelegation: [ - 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', - ], - }) - }) - - test('should give 500 when did document record is not found', async () => { - const response = await request(app).get(`/dids/did:key:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`) - expect(response.statusCode).toBe(500) - }) - }) - - afterAll(async () => { - await aliceAgent.shutdown() - await aliceAgent.wallet.delete() - app.close() - }) -}) diff --git a/packages/rest/tests/outofband.test.ts b/packages/rest/tests/outofband.test.ts deleted file mode 100644 index 62ab1122..00000000 --- a/packages/rest/tests/outofband.test.ts +++ /dev/null @@ -1,376 +0,0 @@ -import type { Agent, OutOfBandRecord, ConnectionRecord, OutOfBandInvitation } from '@aries-framework/core' -import type { Express } from 'express' - -import { JsonTransformer, AgentMessage } from '@aries-framework/core' -import request from 'supertest' - -import { setupServer } from '../src/server' - -import { - getTestAgent, - getTestConnection, - getTestOutOfBandInvitation, - getTestOutOfBandRecord, - objectToJson, -} from './utils/helpers' - -describe('OutOfBandController', () => { - let app: Express - let aliceAgent: Agent - let bobAgent: Agent - let outOfBandRecord: OutOfBandRecord - let outOfBandInvitation: OutOfBandInvitation - let connectionRecord: ConnectionRecord - - beforeAll(async () => { - aliceAgent = await getTestAgent('OutOfBand REST Agent Test Alice', 3014) - bobAgent = await getTestAgent('OutOfBand REST Agent Test Bob', 3015) - app = await setupServer(bobAgent, { port: 3000 }) - outOfBandRecord = getTestOutOfBandRecord() - outOfBandInvitation = getTestOutOfBandInvitation() - connectionRecord = getTestConnection() - }) - - afterEach(() => { - jest.clearAllMocks() - }) - - describe('Get all out of band records', () => { - test('should return all out of band records', async () => { - const spy = jest.spyOn(bobAgent.oob, 'getAll') - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).get('/oob') - const result = await getResult() - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual(result.map(objectToJson)) - }) - test('should return filtered out of band records if query is passed', async () => { - jest.spyOn(bobAgent.oob, 'getAll').mockResolvedValueOnce([outOfBandRecord]) - const response = await request(app).get('/oob?invitationId=test') - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual([]) - }) - }) - - describe('Get out of band record by id', () => { - test('should return out of band record with correct id', async () => { - const spy = jest.spyOn(bobAgent.oob, 'findById').mockResolvedValueOnce(outOfBandRecord) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).get(`/oob/${outOfBandRecord.id}`) - - expect(response.statusCode).toBe(200) - expect(spy).toHaveBeenCalledWith(outOfBandRecord.id) - expect(response.body).toEqual(objectToJson(await getResult())) - }) - test('should return 404 if out of band record is not found', async () => { - const response = await request(app).get(`/oob/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa`) - - expect(response.statusCode).toBe(404) - }) - }) - - describe('Create out of band invitation', () => { - test('should return out of band invitation', async () => { - jest.spyOn(bobAgent.oob, 'createInvitation').mockResolvedValueOnce(outOfBandRecord) - - const response = await request(app).post('/oob/create-invitation') - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual({ - invitationUrl: outOfBandRecord.outOfBandInvitation.toUrl({ - domain: bobAgent.config.endpoints[0], - }), - invitation: outOfBandRecord.outOfBandInvitation.toJSON({ - useLegacyDidSovPrefix: bobAgent.config.useLegacyDidSovPrefix, - }), - outOfBandRecord: outOfBandRecord.toJSON(), - }) - }) - test('should use parameters', async () => { - const spy = jest.spyOn(bobAgent.oob, 'createInvitation').mockResolvedValueOnce(outOfBandRecord) - - // todo: add tests for routing param - const params = { - label: 'string', - alias: 'string', - imageUrl: 'string', - goalCode: 'string', - goal: 'string', - handshake: true, - handshakeProtocols: ['https://didcomm.org/connections/1.0'], - multiUseInvitation: true, - autoAcceptConnection: true, - } - const response = await request(app).post('/oob/create-invitation').send(params) - - expect(response.statusCode).toBe(200) - expect(spy).toHaveBeenCalledWith(params) - }) - }) - - describe('Create legacy invitation', () => { - test('should return out of band invitation', async () => { - jest.spyOn(bobAgent.oob, 'createLegacyInvitation').mockResolvedValueOnce({ - outOfBandRecord: outOfBandRecord, - invitation: outOfBandInvitation, - }) - - const response = await request(app).post('/oob/create-legacy-invitation') - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual({ - invitationUrl: outOfBandInvitation.toUrl({ - domain: bobAgent.config.endpoints[0], - }), - invitation: outOfBandInvitation.toJSON({ - useLegacyDidSovPrefix: bobAgent.config.useLegacyDidSovPrefix, - }), - outOfBandRecord: outOfBandRecord.toJSON(), - }) - }) - test('should use parameters', async () => { - const spy = jest.spyOn(bobAgent.oob, 'createLegacyInvitation').mockResolvedValueOnce({ - outOfBandRecord: outOfBandRecord, - invitation: outOfBandInvitation, - }) - - const params = { - label: 'string', - alias: 'string', - imageUrl: 'string', - multiUseInvitation: true, - autoAcceptConnection: true, - } - const response = await request(app).post('/oob/create-legacy-invitation').send(params) - - expect(response.statusCode).toBe(200) - expect(spy).toHaveBeenCalledWith(params) - }) - }) - - describe('Create legacy connectionless invitation', () => { - const msg = JsonTransformer.fromJSON( - { - '@id': 'eac4ff4e-b4fb-4c1d-aef3-b29c89d1cc00', - '@type': 'https://didcomm.org/connections/1.0/invitation', - }, - AgentMessage, - ) - - const inputParams = { - domain: 'string', - message: { - '@id': 'eac4ff4e-b4fb-4c1d-aef3-b29c89d1cc00', - '@type': 'https://didcomm.org/connections/1.0/invitation', - }, - recordId: 'string', - } - - test('should return out of band invitation', async () => { - const spy = jest.spyOn(bobAgent.oob, 'createLegacyConnectionlessInvitation').mockResolvedValueOnce({ - message: msg, - invitationUrl: 'https://example.com/invitation', - }) - - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).post('/oob/create-legacy-connectionless-invitation').send(inputParams) - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual(objectToJson(await getResult())) - }) - test('should use parameters', async () => { - const spy = jest.spyOn(bobAgent.oob, 'createLegacyConnectionlessInvitation').mockResolvedValueOnce({ - message: msg, - invitationUrl: 'https://example.com/invitation', - }) - - const response = await request(app).post('/oob/create-legacy-connectionless-invitation').send(inputParams) - - expect(response.statusCode).toBe(200) - expect(spy).toHaveBeenCalledWith({ - ...inputParams, - message: msg, - }) - }) - }) - - describe('Receive out of band invitation', () => { - test('should return out of band invitation', async () => { - const spy = jest.spyOn(bobAgent.oob, 'receiveInvitation').mockResolvedValueOnce({ - outOfBandRecord: outOfBandRecord, - connectionRecord: connectionRecord, - }) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app) - .post('/oob/receive-invitation') - .send({ invitation: outOfBandRecord.outOfBandInvitation }) - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual(objectToJson(await getResult())) - }) - test('should use parameters', async () => { - const spy = jest.spyOn(bobAgent.oob, 'receiveInvitation').mockResolvedValueOnce({ - outOfBandRecord: outOfBandRecord, - connectionRecord: connectionRecord, - }) - - // todo: add tests for routing param - const params = { - label: 'test', - alias: 'test', - imageUrl: 'test', - autoAcceptInvitation: false, - autoAcceptConnection: false, - reuseConnection: false, - } - - const response = await request(app) - .post('/oob/receive-invitation') - .send({ - invitation: outOfBandInvitation, - ...params, - }) - - expect(response.statusCode).toBe(200) - expect(spy).toHaveBeenCalledWith( - expect.anything(), - expect.objectContaining({ - label: params.label, - alias: params.alias, - imageUrl: params.imageUrl, - autoAcceptInvitation: params.autoAcceptInvitation, - autoAcceptConnection: params.autoAcceptConnection, - reuseConnection: params.reuseConnection, - }), - ) - }) - }) - - describe('Receive out of band invitation by url', () => { - test('should return out of band invitation', async () => { - const spy = jest.spyOn(bobAgent.oob, 'receiveInvitationFromUrl').mockResolvedValueOnce({ - outOfBandRecord: outOfBandRecord, - connectionRecord: connectionRecord, - }) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app) - .post('/oob/receive-invitation-url') - .send({ invitationUrl: 'https://example.com/test' }) - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual(objectToJson(await getResult())) - }) - test('should use parameters', async () => { - const spy = jest.spyOn(bobAgent.oob, 'receiveInvitationFromUrl').mockResolvedValueOnce({ - outOfBandRecord: outOfBandRecord, - connectionRecord: connectionRecord, - }) - - // todo: add tests for routing param - const params = { - label: 'test', - alias: 'test', - imageUrl: 'test', - autoAcceptInvitation: false, - autoAcceptConnection: false, - reuseConnection: false, - } - - const response = await request(app) - .post('/oob/receive-invitation-url') - .send({ invitationUrl: 'https://example.com/test', ...params }) - - expect(response.statusCode).toBe(200) - expect(spy).toHaveBeenCalledWith( - expect.stringMatching('https://example.com/test'), - expect.objectContaining({ - label: params.label, - alias: params.alias, - imageUrl: params.imageUrl, - autoAcceptInvitation: params.autoAcceptInvitation, - autoAcceptConnection: params.autoAcceptConnection, - reuseConnection: params.reuseConnection, - }), - ) - }) - }) - - describe('Accept out of band invitation', () => { - test('should return record from accepted invitation', async () => { - const spy = jest.spyOn(bobAgent.oob, 'acceptInvitation').mockResolvedValueOnce({ - outOfBandRecord: outOfBandRecord, - connectionRecord: connectionRecord, - }) - const getResult = (): Promise => spy.mock.results[0].value - - // todo: add tests for routing param - const params = { - autoAcceptConnection: false, - reuseConnection: false, - label: 'test', - alias: 'test', - imageUrl: 'test', - mediatorId: 'test', - } - - const response = await request(app) - .post('/oob/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/accept-invitation') - .send(params) - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual(objectToJson(await getResult())) - }) - test('should use parameters', async () => { - const spy = jest.spyOn(bobAgent.oob, 'acceptInvitation').mockResolvedValueOnce({ - outOfBandRecord: outOfBandRecord, - connectionRecord: connectionRecord, - }) - - // todo: add tests for routing param - const params = { - autoAcceptConnection: false, - reuseConnection: false, - label: 'test', - alias: 'test', - imageUrl: 'test', - mediatorId: 'test', - } - - const response = await request(app) - .post('/oob/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/accept-invitation') - .send(params) - - expect(response.statusCode).toBe(200) - expect(spy).toHaveBeenCalledWith('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', params) - }) - test('should throw 404 if out of band record is not found', async () => { - const response = await request(app).post('/oob/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/accept-invitation') - - expect(response.statusCode).toBe(404) - }) - }) - - describe('Delete out of band record', () => { - test('should return 204 if record is successfully deleted', async () => { - jest.spyOn(bobAgent.oob, 'deleteById').mockResolvedValueOnce() - - const response = await request(app).delete('/oob/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa') - - expect(response.statusCode).toBe(204) - }) - }) - - afterAll(async () => { - await aliceAgent.shutdown() - await aliceAgent.wallet.delete() - await bobAgent.shutdown() - await bobAgent.wallet.delete() - }) -}) diff --git a/packages/rest/tests/proof.test.ts b/packages/rest/tests/proof.test.ts deleted file mode 100644 index 207121e3..00000000 --- a/packages/rest/tests/proof.test.ts +++ /dev/null @@ -1,302 +0,0 @@ -import type { Agent, ProofStateChangedEvent } from '@aries-framework/core' -import type { Server } from 'net' - -import { ProofEventTypes, ProofRecord, ProofState } from '@aries-framework/core' -import request from 'supertest' -import WebSocket from 'ws' - -import { startServer } from '../src' - -import { getTestAgent, getTestProof, objectToJson } from './utils/helpers' - -describe('ProofController', () => { - let app: Server - let aliceAgent: Agent - let bobAgent: Agent - let testProof: ProofRecord - - beforeAll(async () => { - aliceAgent = await getTestAgent('Proof REST Agent Test Alice', 3032) - bobAgent = await getTestAgent('Proof REST Agent Test Bob', 3912) - app = await startServer(bobAgent, { port: 3033 }) - - testProof = getTestProof() - }) - - afterEach(() => { - jest.clearAllMocks() - }) - - describe('Get all proofs', () => { - test('should return all proofs', async () => { - const spy = jest.spyOn(bobAgent.proofs, 'getAll').mockResolvedValueOnce([testProof]) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).get('/proofs') - const result = await getResult() - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual(result.map(objectToJson)) - }) - - test('should optionally filter on threadId', async () => { - const spy = jest.spyOn(bobAgent.proofs, 'getAll').mockResolvedValueOnce([testProof]) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).get('/proofs').query({ threadId: testProof.threadId }) - const result = await getResult() - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual(result.map(objectToJson)) - }) - - test('should return empty array if nothing found', async () => { - jest.spyOn(bobAgent.proofs, 'getAll').mockResolvedValueOnce([testProof]) - - const response = await request(app).get('/proofs').query({ threadId: 'string' }) - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual([]) - }) - }) - - describe('Get by proof by id', () => { - test('should return proof record', async () => { - const spy = jest.spyOn(bobAgent.proofs, 'getById').mockResolvedValueOnce(testProof) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).get(`/proofs/${testProof.id}`) - - expect(response.statusCode).toBe(200) - expect(spy).toHaveBeenCalledWith(testProof.id) - expect(response.body).toEqual(objectToJson(await getResult())) - }) - - test('should return 404 not found when proof record not found', async () => { - const response = await request(app).get(`/proofs/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa`) - - expect(response.statusCode).toBe(404) - }) - }) - - describe('Delete proof by id', () => { - test('should give 404 not found when proof is not found', async () => { - const response = await request(app).delete('/proofs/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa') - - expect(response.statusCode).toBe(404) - }) - }) - - describe('Propose proof', () => { - const proposalRequest = { - connectionId: '123456aa-aa78-90a1-aa23-456a7da89010', - attributes: [ - { - name: 'test', - credentialDefinitionId: 'WghBqNdoFjaYh6F5N9eBF:3:CL:3210:test', - }, - ], - predicates: [], - comment: 'test', - } - test('should return proof record', async () => { - const spy = jest.spyOn(bobAgent.proofs, 'proposeProof').mockResolvedValueOnce(testProof) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).post('/proofs/propose-proof').send(proposalRequest) - - expect(spy).toHaveBeenCalledWith( - expect.stringContaining(proposalRequest.connectionId), - expect.objectContaining({ - attributes: proposalRequest.attributes, - }), - expect.objectContaining({ - comment: proposalRequest.comment, - }), - ) - expect(response.statusCode).toBe(200) - expect(response.body).toEqual(objectToJson(await getResult())) - }) - - test('should give 404 not found when connection is not found', async () => { - const response = await request(app).post('/proofs/propose-proof').send(proposalRequest) - - expect(response.statusCode).toBe(404) - }) - }) - - describe('Accept proof proposal', () => { - const acceptRequest = { - request: { - name: 'string', - version: 'string', - nonce: 'string', - }, - comment: 'string', - } - - test('should return proof record', async () => { - const spy = jest.spyOn(bobAgent.proofs, 'acceptProposal').mockResolvedValueOnce(testProof) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).post(`/proofs/${testProof.id}/accept-proposal`).send(acceptRequest) - - expect(spy).toHaveBeenCalledWith(testProof.id, acceptRequest) - expect(response.statusCode).toBe(200) - expect(response.body).toEqual(objectToJson(await getResult())) - }) - - test('should give 404 not found when proof is not found', async () => { - const response = await request(app).post(`/proofs/${testProof.id}/accept-proposal`).send(acceptRequest) - - expect(response.statusCode).toBe(404) - }) - }) - - describe('Request out of band proof', () => { - test('should return proof record', async () => { - const response = await request(app) - .post(`/proofs/request-outofband-proof`) - .send({ - proofRequestOptions: { - name: 'string', - version: '1.0', - requestedAttributes: { - additionalProp1: { - name: 'string', - }, - }, - }, - }) - - expect(response.statusCode).toBe(200) - expect(response.body.proofUrl).toBeDefined() - expect(response.body.proofRecord).toBeDefined() - }) - }) - - describe('Request proof', () => { - test('should return proof record', async () => { - const spy = jest.spyOn(bobAgent.proofs, 'requestProof').mockResolvedValueOnce(testProof) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app) - .post(`/proofs/request-proof`) - .send({ - connectionId: 'string', - proofRequestOptions: { - name: 'string', - version: '1.0', - requestedAttributes: { - additionalProp1: { - name: 'string', - }, - }, - requestedPredicates: {}, - }, - }) - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual(objectToJson(await getResult())) - }) - - test('should give 404 not found when connection is not found', async () => { - const response = await request(app) - .post(`/proofs/request-proof`) - .send({ - connectionId: 'string', - proofRequestOptions: { - name: 'string', - version: '1.0', - requestedAttributes: { - additionalProp1: { - name: 'string', - }, - }, - requestedPredicates: {}, - }, - }) - - expect(response.statusCode).toBe(404) - }) - }) - - describe('Accept proof presentation', () => { - test('should return proof record', async () => { - const spy = jest.spyOn(bobAgent.proofs, 'acceptPresentation').mockResolvedValueOnce(testProof) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).post(`/proofs/${testProof.id}/accept-presentation`) - - expect(spy).toHaveBeenCalledWith(testProof.id) - expect(response.statusCode).toBe(200) - expect(response.body).toEqual(objectToJson(await getResult())) - }) - - test('should give 404 not found when proof is not found', async () => { - const response = await request(app).post('/proofs/aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa/accept-presentation') - - expect(response.statusCode).toBe(404) - }) - }) - - describe('Proof WebSocket event', () => { - test('should return proof event sent from test agent to websocket client', async () => { - expect.assertions(1) - - const now = new Date() - - const proofRecord = new ProofRecord({ - id: 'testest', - state: ProofState.ProposalSent, - threadId: 'random', - createdAt: now, - }) - - // Start client and wait for it to be opened - const client = new WebSocket('ws://localhost:3033') - await new Promise((resolve) => client.once('open', resolve)) - - // Start promise to listen for message - const waitForEvent = new Promise((resolve) => - client.on('message', (data) => { - client.terminate() - resolve(JSON.parse(data as string)) - }), - ) - - bobAgent.events.emit({ - type: ProofEventTypes.ProofStateChanged, - payload: { - previousState: null, - proofRecord, - }, - }) - - // Wait for event on WebSocket - const event = await waitForEvent - expect(event).toEqual({ - type: 'ProofStateChanged', - payload: { - previousState: null, - proofRecord: { - _tags: {}, - metadata: {}, - id: 'testest', - createdAt: now.toISOString(), - state: 'proposal-sent', - threadId: 'random', - }, - }, - }) - }) - }) - - afterAll(async () => { - await aliceAgent.shutdown() - await aliceAgent.wallet.delete() - await bobAgent.shutdown() - await bobAgent.wallet.delete() - app.close() - }) -}) diff --git a/packages/rest/tests/schema.test.ts b/packages/rest/tests/schema.test.ts deleted file mode 100644 index 9e080118..00000000 --- a/packages/rest/tests/schema.test.ts +++ /dev/null @@ -1,93 +0,0 @@ -import type { Agent } from '@aries-framework/core' -import type { Express } from 'express' -import type { Schema } from 'indy-sdk' - -import request from 'supertest' - -import { setupServer } from '../src/server' - -import { getTestAgent } from './utils/helpers' -describe('AgentController', () => { - let app: Express - let agent: Agent - - beforeAll(async () => { - agent = await getTestAgent('Schema REST Agent Test', 3021) - app = await setupServer(agent, { port: 3000 }) - }) - - afterEach(() => { - jest.clearAllMocks() - }) - - describe('get schema by id', () => { - test('should return schema ', async () => { - const spy = jest.spyOn(agent.ledger, 'getSchema').mockResolvedValueOnce({ - id: 'WgWxqztrNooG92RXvxSTWv:2:test:1.0', - name: 'test', - version: '1.0', - ver: '1.0', - seqNo: 9999, - attrNames: ['prop1', 'prop2'], - }) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app).get(`/schemas/WgWxqztrNooG92RXvxSTWv:2:test:1.0`) - const result = await getResult() - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual(result) - }) - - test('should return 400 BadRequest when id has invalid structure', async () => { - const response = await request(app).get(`/schemas/x`) - - expect(response.statusCode).toBe(400) - }) - - test('should return 404 NotFound when schema not found', async () => { - const response = await request(app).get(`/schemas/WgWxqztrNooG92RXvxSTWv:2:test:1.0`) - - expect(response.statusCode).toBe(404) - }) - }) - - describe('create schema', () => { - test('should return created schema ', async () => { - const spy = jest.spyOn(agent.ledger, 'registerSchema').mockResolvedValueOnce({ - id: 'WgWxqztrNooG92RXvxSTWv:2:test:1.0', - name: 'test', - version: '1.0', - ver: '1.0', - seqNo: 9999, - attrNames: ['prop1', 'prop2'], - }) - const getResult = (): Promise => spy.mock.results[0].value - - const response = await request(app) - .post(`/schemas/`) - .send({ - name: 'test', - version: '1.0', - attributes: ['prop1', 'prop2'], - }) - - expect(response.statusCode).toBe(200) - expect(response.body).toEqual(await getResult()) - }) - - test('should throw error when props missing ', async () => { - const response = await request(app).post(`/schemas`).send({ - name: 'string', - version: '1.0', - }) - - expect(response.statusCode).toBe(422) - }) - }) - - afterAll(async () => { - await agent.shutdown() - await agent.wallet.delete() - }) -}) diff --git a/packages/rest/tests/utils/helpers.ts b/packages/rest/tests/utils/helpers.ts index 00ac8e73..d3ae82a7 100644 --- a/packages/rest/tests/utils/helpers.ts +++ b/packages/rest/tests/utils/helpers.ts @@ -1,27 +1,61 @@ -import type { ConnectionRecordProps } from '@aries-framework/core' +import type { RestRootAgent, RestRootAgentWithTenants } from '../../src/utils/agent' +import type { ConnectionRecordProps, DidCreateResult } from '@credo-ts/core' import { AgentMessage, - OutOfBandInvitation, OutOfBandRecord, ConnectionRecord, CredentialExchangeRecord, DidExchangeRole, DidExchangeState, JsonTransformer, - ProofRecord, -} from '@aries-framework/core' -import { JsonEncoder } from '@aries-framework/core/build/utils/JsonEncoder' + ProofExchangeRecord, + OutOfBandInvitation, + ConnectionInvitationMessage, + DidDocument, +} from '@credo-ts/core' +import { JsonEncoder } from '@credo-ts/core/build/utils/JsonEncoder' +import { randomUUID } from 'crypto' +import { InMemoryAnonCredsRegistry } from '../../src/controllers/anoncreds/__tests__/InMemoryAnonCredsRegistry' +import { + testAnonCredsCredentialDefinition, + testAnonCredsSchema, +} from '../../src/controllers/anoncreds/__tests__/fixtures' import { setupAgent } from '../../src/utils/agent' +import { InternalOutboundTransport } from '../InternalOutboundTransport' -export async function getTestAgent(name: string, port: number) { - return await setupAgent({ - port: port, - publicDidSeed: '00000000000000000000000000000000', - endpoints: [`http://localhost:${port}`], - name: name, +export async function getTestAgent( + name: string, + port?: number, + multiTenant?: Multitenant, +) { + const agent = await setupAgent({ + endpoints: [port ? `http://localhost:${port}` : 'internal'], + // add some randomness to ensure test isolation + name: `${name} (${randomUUID()})`, + httpInboundTransportPort: port, + multiTenant, + extraAnonCredsRegistries: [ + new InMemoryAnonCredsRegistry({ + schemas: { + [testAnonCredsSchema.schemaId]: testAnonCredsSchema.schema, + }, + credentialDefinitions: { + [testAnonCredsCredentialDefinition.credentialDefinitionId]: + testAnonCredsCredentialDefinition.credentialDefinition, + }, + }), + ], }) + + if (!port) { + const internalOutboundTransport = new InternalOutboundTransport() + await internalOutboundTransport.start(agent) + agent.registerOutboundTransport(internalOutboundTransport) + } + + return agent as Multitenant extends true ? RestRootAgentWithTenants : RestRootAgent } export function objectToJson(result: T) { @@ -101,6 +135,19 @@ export function getTestOutOfBandInvitation() { return JsonTransformer.fromJSON(json, OutOfBandInvitation) } +export function getTestOutOfBandLegacyInvitation() { + const json = { + id: '42a95528-0e30-4f86-a462-0efb02178b53', + label: 'Aries Test Agent', + did: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', + recipientKeys: ['did:key:z6MkmTBHTWrvLPN8pBmUj7Ye5ww9GiacXCYMNVvpScSpf1DM'], + serviceEndpoint: 'https://6b77-89-20-162-146.ngrok.io', + routingKeys: [], + imageUrl: 'https://example.com/image-url', + } + return JsonTransformer.fromJSON(json, ConnectionInvitationMessage) +} + export function getTestOutOfBandRecord() { const json = { _tags: { @@ -270,29 +317,6 @@ export function getTestOffer() { } } -export function getTestCredDef() { - return { - ver: '1.0', - id: 'WgWxqztrNooG92RXvxSTWv:3:CL:20:tag', - schemaId: '9999', - type: 'CL', - tag: 'latest', - value: { - primary: { - n: 'x', - s: 'x', - r: { - master_secret: 'x', - name: 'x', - title: 'x', - }, - rctxt: 'x', - z: 'x', - }, - }, - } -} - export function getTestProof() { const json = { _tags: { @@ -340,7 +364,7 @@ export function getTestProof() { }, }, } - return JsonTransformer.fromJSON(json, ProofRecord) + return JsonTransformer.fromJSON(json, ProofExchangeRecord) } export function getTestConnection({ @@ -364,3 +388,93 @@ export function getTestConnection({ theirLabel, }) } + +export function getTestDidDocument() { + return { + '@context': [ + 'https://w3id.org/did/v1', + 'https://w3id.org/security/suites/ed25519-2018/v1', + 'https://w3id.org/security/suites/x25519-2019/v1', + ], + id: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', + verificationMethod: [ + { + id: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', + type: 'Ed25519VerificationKey2018', + controller: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', + publicKeyBase58: '6fioC1zcDPyPEL19pXRS2E4iJ46zH7xP6uSgAaPdwDrx', + }, + ], + authentication: [ + 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', + ], + assertionMethod: [ + 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', + ], + keyAgreement: [ + { + id: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6LSrdqo4M24WRDJj1h2hXxgtDTyzjjKCiyapYVgrhwZAySn', + type: 'X25519KeyAgreementKey2019', + controller: 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', + publicKeyBase58: 'FxfdY3DCQxVZddKGAtSjZdFW9bCCW7oRwZn1NFJ2Tbg2', + }, + ], + capabilityInvocation: [ + 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', + ], + capabilityDelegation: [ + 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL#z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL', + ], + } as { [x: string]: unknown } +} + +export function getTestDidCreate() { + return { + didDocumentMetadata: {}, + didRegistrationMetadata: {}, + didState: { + state: 'finished', + did: 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + didDocument: JsonTransformer.fromJSON( + { + '@context': [ + 'https://w3id.org/did/v1', + 'https://w3id.org/security/suites/ed25519-2018/v1', + 'https://w3id.org/security/suites/x25519-2019/v1', + ], + id: 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + verificationMethod: [ + { + id: 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + type: 'Ed25519VerificationKey2018', + controller: 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + publicKeyBase58: 'ApexJxnhZHC6Ctq4fCoNHKYgu87HuRTZ7oSyfehG57zE', + }, + ], + authentication: [ + 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + ], + assertionMethod: [ + 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + ], + keyAgreement: [ + { + id: 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6LSm5B4fB9NA55xB7PSeMYTMS9sf8uboJvyZBaDLLSZ7Ryd', + type: 'X25519KeyAgreementKey2019', + controller: 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + publicKeyBase58: 'APzu8sLW4cND5j1g7i2W2qwPozNV6hkpgCrXqso2Q4Cs', + }, + ], + capabilityInvocation: [ + 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + ], + capabilityDelegation: [ + 'did:key:z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc#z6MkpGuzuD38tpgZKPfmLmmD8R6gihP9KJhuopMuVvfGzLmc', + ], + }, + DidDocument, + ), + secret: {}, + }, + } as DidCreateResult +} diff --git a/packages/rest/tests/webhook.test.ts b/packages/rest/tests/webhook.test.ts index cda43245..8d196a2d 100644 --- a/packages/rest/tests/webhook.test.ts +++ b/packages/rest/tests/webhook.test.ts @@ -1,20 +1,27 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import type { WebhookData } from '../src/utils/webhook' -import type { Agent, CredentialStateChangedEvent, ProofStateChangedEvent } from '@aries-framework/core' +import type { Agent, CredentialStateChangedEvent, ProofStateChangedEvent } from '@credo-ts/core' import type { Server } from 'net' import { CredentialExchangeRecord, ProofEventTypes, ProofState, - ProofRecord, + ProofExchangeRecord, CredentialState, CredentialEventTypes, -} from '@aries-framework/core' -import { EventEmitter } from '@aries-framework/core/build/agent/EventEmitter' - + CredentialRole, + ProofRole, + ConnectionEventTypes, + BasicMessageEventTypes, + BasicMessageRole, +} from '@credo-ts/core' + +import { connectionRecordToApiModel } from '../src/controllers/didcomm/connections/ConnectionsControllerTypes' +import { credentialExchangeRecordToApiModel } from '../src/controllers/didcomm/credentials/CredentialsControllerTypes' +import { proofExchangeRecordToApiModel } from '../src/controllers/didcomm/proofs/ProofsControllerTypes' import { setupServer } from '../src/server' -import { sleep, webhookListener } from '../src/utils/webhook' +import { waitForHook, webhookListener } from '../src/utils/webhook' import { getTestAgent } from './utils/helpers' @@ -26,7 +33,7 @@ describe('WebhookTests', () => { beforeAll(async () => { aliceAgent = await getTestAgent('Webhook REST Agent Test Alice', 3042) - bobAgent = await getTestAgent('Webhook REST Agent Bob', 3043) + bobAgent = await getTestAgent('Webhook REST Agent Test Bob', 3043) server = await webhookListener(3044, webhooks) await setupServer(bobAgent, { webhookUrl: 'http://localhost:3044', port: 6045 }) }) @@ -36,17 +43,21 @@ describe('WebhookTests', () => { const { connectionRecord } = await bobAgent.oob.receiveInvitation(outOfBandInvitation) const connection = await bobAgent.connections.returnWhenIsConnected(connectionRecord!.id) - await bobAgent.basicMessages.sendMessage(connection.id, 'Hello') - - /* - * A sleep is placed here to wait for the event to have processed and sent out - * an webhook first before searching for the webhook - */ - await sleep(100) + const senderBasicMessage = await bobAgent.basicMessages.sendMessage(connection.id, 'Hello') - const webhook = webhooks.find((webhook) => webhook.topic !== 'connections') + const webhook = await waitForHook( + webhooks, + (webhook) => webhook.body.type === BasicMessageEventTypes.BasicMessageStateChanged, + ) - expect(webhook).toBeDefined() + expect(webhook?.body).toMatchObject({ + payload: { + basicMessageRecord: { + threadId: senderBasicMessage.threadId, + role: BasicMessageRole.Sender, + }, + }, + }) }) test('should return a webhook event when connection state changed', async () => { @@ -54,18 +65,17 @@ describe('WebhookTests', () => { const { connectionRecord } = await bobAgent.oob.receiveInvitation(outOfBandInvitation) const connection = await bobAgent.connections.returnWhenIsConnected(connectionRecord!.id) - /* - * A sleep is placed here to wait for the event to have processed and sent out - * an webhook first before searching for the webhook - */ - await sleep(100) - - const webhook = webhooks.find( + const webhook = await waitForHook( + webhooks, (webhook) => - webhook.topic === 'connections' && webhook.body.id === connection.id && webhook.body.state === connection.state, + webhook.body.type === ConnectionEventTypes.ConnectionStateChanged && + webhook.body.payload.connectionRecord.id === connection.id && + webhook.body.payload.connectionRecord.state === connection.state, ) - expect(JSON.parse(JSON.stringify(connection.toJSON()))).toMatchObject(webhook?.body as Record) + expect(webhook?.body).toMatchObject({ + payload: { connectionRecord: JSON.parse(JSON.stringify(connectionRecordToApiModel(connection))) }, + }) }) test('should return a webhook event when credential state changed', async () => { @@ -74,10 +84,10 @@ describe('WebhookTests', () => { state: CredentialState.OfferSent, threadId: 'random', protocolVersion: 'v1', + role: CredentialRole.Holder, }) - const eventEmitter = bobAgent.injectionContainer.resolve(EventEmitter) - eventEmitter.emit({ + bobAgent.events.emit(bobAgent.context, { type: CredentialEventTypes.CredentialStateChanged, payload: { previousState: null, @@ -85,33 +95,29 @@ describe('WebhookTests', () => { }, }) - /* - * A sleep is placed here to wait for the event to have processed and sent out - * an webhook first before searching for the webhook - */ - await sleep(100) - - const webhook = webhooks.find( + const webhook = await waitForHook( + webhooks, (webhook) => - webhook.topic === 'credentials' && - webhook.body.id === credentialRecord.id && - webhook.body.state === credentialRecord.state, + webhook.body.type === CredentialEventTypes.CredentialStateChanged && + webhook.body.payload.credentialExchange.id === credentialRecord.id && + webhook.body.payload.credentialExchange.state === credentialRecord.state, ) - expect(JSON.parse(JSON.stringify(credentialRecord.toJSON()))).toMatchObject( - webhook?.body as Record, - ) + expect(webhook?.body).toMatchObject({ + payload: { credentialExchange: JSON.parse(JSON.stringify(credentialExchangeRecordToApiModel(credentialRecord))) }, + }) }) test('should return a webhook event when proof state changed', async () => { - const proofRecord = new ProofRecord({ + const proofRecord = new ProofExchangeRecord({ id: 'testest', + protocolVersion: 'v2', state: ProofState.ProposalSent, threadId: 'random', + role: ProofRole.Prover, }) - const eventEmitter = bobAgent.injectionContainer.resolve(EventEmitter) - eventEmitter.emit({ + bobAgent.events.emit(bobAgent.context, { type: ProofEventTypes.ProofStateChanged, payload: { previousState: null, @@ -119,18 +125,17 @@ describe('WebhookTests', () => { }, }) - /* - * A sleep is placed here to wait for the event to have processed and sent out - * an webhook first before searching for the webhook - */ - await sleep(100) - - const webhook = webhooks.find( + const webhook = await waitForHook( + webhooks, (webhook) => - webhook.topic === 'proofs' && webhook.body.id === proofRecord.id && webhook.body.state === proofRecord.state, + webhook.body.type === ProofEventTypes.ProofStateChanged && + webhook.body.payload.proofExchange.id === proofRecord.id && + webhook.body.payload.proofExchange.state === proofRecord.state, ) - expect(JSON.parse(JSON.stringify(proofRecord.toJSON()))).toMatchObject(webhook?.body as Record) + expect(webhook?.body).toMatchObject({ + payload: { proofExchange: JSON.parse(JSON.stringify(proofExchangeRecordToApiModel(proofRecord))) }, + }) }) afterAll(async () => { diff --git a/packages/rest/tsconfig.build.json b/packages/rest/tsconfig.build.json index 7611b211..22431cc9 100644 --- a/packages/rest/tsconfig.build.json +++ b/packages/rest/tsconfig.build.json @@ -2,7 +2,8 @@ "extends": "../../tsconfig.build.json", "compilerOptions": { "outDir": "./build", - "types": [] + "types": ["node"], + "lib": ["ES2021.Promise"] }, - "include": ["src/**/*", "src/routes"] + "include": ["src/**/*"] } diff --git a/packages/rest/tsconfig.json b/packages/rest/tsconfig.json index 46efe6f7..4558a193 100644 --- a/packages/rest/tsconfig.json +++ b/packages/rest/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "types": ["jest"] + "lib": ["ES2021.Promise"], + "types": ["jest", "node"] } } diff --git a/packages/rest/tsoa.json b/packages/rest/tsoa.json index 098f7e42..1e4e15a5 100644 --- a/packages/rest/tsoa.json +++ b/packages/rest/tsoa.json @@ -3,11 +3,20 @@ "noImplicitAdditionalProperties": "throw-on-extras", "controllerPathGlobs": ["src/**/*Controller.ts"], "spec": { - "outputDirectory": "src/routes", - "specVersion": 3 + "outputDirectory": "src/generated", + "specVersion": 3, + "securityDefinitions": { + "tenants": { + "type": "apiKey", + "name": "x-tenant-id", + "in": "header" + } + } }, "routes": { - "routesDir": "src/routes", - "iocModule": "./src/utils/tsyringeTsoaIocContainer" + "middlewareTemplate": "src/middlewareTemplate.ts.hbs", + "routesDir": "src/generated", + "iocModule": "./src/utils/tsyringeTsoaIocContainer", + "authenticationModule": "./src/authentication.ts" } } diff --git a/tsconfig.build.json b/tsconfig.build.json index bfef1cfd..0dcde152 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -12,7 +12,8 @@ "allowSyntheticDefaultImports": true, "resolveJsonModule": true, "experimentalDecorators": true, - "emitDecoratorMetadata": true + "emitDecoratorMetadata": true, + "skipLibCheck": true }, "exclude": [ "node_modules", diff --git a/tsconfig.test.json b/tsconfig.test.json index 0cb715dc..100d2109 100644 --- a/tsconfig.test.json +++ b/tsconfig.test.json @@ -1,13 +1,14 @@ { "extends": "./tsconfig.build.json", "compilerOptions": { + "lib": ["ES2021.Promise"], "baseUrl": ".", "paths": { "@credo-ts/react-hooks": ["packages/react-hooks/src"], "@credo-ts/rest": ["packages/rest/src"], "@credo-ts/redux-store": ["packages/redux-store/src"], "@credo-ts/transport-ble": ["packages/transport-ble/src"], - "@credo-tstions": ["packages/push-notifications/src"] + "@credo-ts/push-notifications": ["packages/push-notifications/src"] }, "types": ["jest", "node"] }, diff --git a/yarn.lock b/yarn.lock index d420267d..259c58ed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24,64 +24,26 @@ node-addon-api "^3.0.0" node-gyp-build "^4.2.1" +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + "@ampproject/remapping@^2.2.0": version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== dependencies: "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" "@animo-id/react-native-ble-didcomm@^0.5.1": - version "0.5.1" - resolved "https://registry.yarnpkg.com/@animo-id/react-native-ble-didcomm/-/react-native-ble-didcomm-0.5.1.tgz#01e5946af850aaa5144366ffe706d3aecdbc5e8f" - integrity sha512-gbye6o/9RaANX6nTqwDp3iZPARbT+RKOjWZ+E0cG3Niab50rhp01Q6QyhG4lJpSmoXzsoZkuN68uX0tfTqpB6A== + version "0.5.4" + resolved "https://registry.yarnpkg.com/@animo-id/react-native-ble-didcomm/-/react-native-ble-didcomm-0.5.4.tgz#84afd1f379447a85122850c2317d733937636408" + integrity sha512-dyboDb8j+o9pbR/p/NvNftgZmZRsqljmAXHyc68YRDXGo73m4RsHsKl7jABybqYHt0BWa5UKLpXwK8rrKoW/LQ== dependencies: convert-string "0.1.0" -"@aries-framework/core@0.2.5", "@aries-framework/core@^0.2.3": - version "0.2.5" - resolved "https://registry.yarnpkg.com/@aries-framework/core/-/core-0.2.5.tgz#085b69519c275e742418545a96534f12283de4de" - integrity sha512-UQ5DFSpLrm2TlkFVl8Bufy55RoY+AeP1rOo8Yu7UfU6sjX2qhbqztdVAMocUnwgQny7e7o9p27bL9RItcgAwGA== - dependencies: - "@multiformats/base-x" "^4.0.1" - "@stablelib/ed25519" "^1.0.2" - "@stablelib/sha256" "^1.0.1" - "@types/indy-sdk" "^1.16.19" - "@types/node-fetch" "^2.5.10" - "@types/ws" "^7.4.6" - abort-controller "^3.0.0" - bn.js "^5.2.0" - borc "^3.0.0" - buffer "^6.0.3" - class-transformer "0.5.1" - class-validator "0.13.1" - did-resolver "^3.1.3" - lru_map "^0.4.1" - luxon "^1.27.0" - make-error "^1.3.6" - object-inspect "^1.10.3" - query-string "^7.0.1" - reflect-metadata "^0.1.13" - rxjs "^7.2.0" - tsyringe "^4.5.0" - uuid "^8.3.2" - varint "^6.0.0" - web-did-resolver "^2.0.8" - -"@aries-framework/node@^0.2.3": - version "0.2.5" - resolved "https://registry.yarnpkg.com/@aries-framework/node/-/node-0.2.5.tgz#f23a08813355eec066c9c0942743039d72f87bc5" - integrity sha512-dz0a2RscytlGr5zPK6+ic0EpGE2qKbvCfvwm2MhqVC6qZQEOSo6lbsiIItDh1j+CyG/vIJiZFAUH5s+EzgNN4A== - dependencies: - "@aries-framework/core" "0.2.5" - express "^4.17.1" - ffi-napi "^4.0.3" - indy-sdk "^1.16.0-dev-1636" - node-fetch "^2.6.1" - ref-napi "^3.0.3" - ws "^7.5.3" - "@astronautlabs/jsonpath@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@astronautlabs/jsonpath/-/jsonpath-1.1.2.tgz#af19bb4a7d13dcfbc60c3c998ee1e73d7c2ddc38" @@ -91,7 +53,7 @@ "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz" integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== dependencies: "@babel/highlight" "^7.22.5" @@ -104,15 +66,15 @@ "@babel/highlight" "^7.23.4" chalk "^2.4.2" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5": +"@babel/compat-data@^7.20.5": version "7.21.0" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.0.tgz#c241dc454e5b5917e40d37e525e2f4530c399298" integrity sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g== -"@babel/compat-data@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.5.tgz#b1f6c86a02d85d2dd3368a2b67c09add8cd0c255" - integrity sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": + version "7.22.9" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz" + integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== "@babel/compat-data@^7.23.5": version "7.23.5" @@ -219,27 +181,16 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" - integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== +"@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": + version "7.22.9" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz" + integrity sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw== dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.21.3" - lru-cache "^5.1.1" - semver "^6.3.0" - -"@babel/helper-compilation-targets@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz#fc7319fc54c5e2fa14b2909cf3c5fd3046813e02" - integrity sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw== - dependencies: - "@babel/compat-data" "^7.22.5" + "@babel/compat-data" "^7.22.9" "@babel/helper-validator-option" "^7.22.5" - browserslist "^4.21.3" + browserslist "^4.21.9" lru-cache "^5.1.1" - semver "^6.3.0" + semver "^6.3.1" "@babel/helper-compilation-targets@^7.23.6": version "7.23.6" @@ -266,22 +217,7 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" "@babel/helper-split-export-declaration" "^7.18.6" -"@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz#2192a1970ece4685fbff85b48da2c32fcb130b7c" - integrity sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q== - dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.22.15": +"@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.22.5": version "7.23.10" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz#25d55fafbaea31fd0e723820bb6cc3df72edf7ea" integrity sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw== @@ -296,30 +232,44 @@ "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" +"@babel/helper-create-class-features-plugin@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz#c36ea240bb3348f942f08b0fbe28d6d979fab236" + integrity sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" + "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz#bb2bf0debfe39b831986a4efbf4066586819c6e4" - integrity sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz#9d8e61a8d9366fe66198f57c40565663de0825f6" + integrity sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" regexpu-core "^5.3.1" - semver "^6.3.0" + semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz#487053f103110f25b9755c5980e031e93ced24d8" - integrity sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg== +"@babel/helper-define-polyfill-provider@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" + integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@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" - semver "^6.1.2" "@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" + resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz" integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== "@babel/helper-environment-visitor@^7.22.20": @@ -329,7 +279,7 @@ "@babel/helper-function-name@^7.21.0", "@babel/helper-function-name@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz" integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== dependencies: "@babel/template" "^7.22.5" @@ -345,25 +295,25 @@ "@babel/helper-hoist-variables@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== dependencies: "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.21.0", "@babel/helper-member-expression-to-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" - integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": +"@babel/helper-member-expression-to-functions@^7.21.0", "@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== dependencies: "@babel/types" "^7.23.0" +"@babel/helper-member-expression-to-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" + integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== + dependencies: + "@babel/types" "^7.22.5" + "@babel/helper-module-imports@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" @@ -373,26 +323,12 @@ "@babel/helper-module-imports@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz" integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== dependencies: "@babel/types" "^7.22.5" -"@babel/helper-module-transforms@^7.21.2", "@babel/helper-module-transforms@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef" - integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-module-imports" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helper-module-transforms@^7.23.3": +"@babel/helper-module-transforms@^7.21.2", "@babel/helper-module-transforms@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== @@ -403,6 +339,17 @@ "@babel/helper-split-export-declaration" "^7.22.6" "@babel/helper-validator-identifier" "^7.22.20" +"@babel/helper-module-transforms@^7.22.5": + version "7.22.9" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz" + integrity sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.5" + "@babel/helper-optimise-call-expression@^7.18.6", "@babel/helper-optimise-call-expression@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" @@ -410,49 +357,26 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0": version "7.20.2" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.3": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-remap-async-to-generator@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" - integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-wrap-function" "^7.18.9" - "@babel/types" "^7.18.9" - -"@babel/helper-remap-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz#14a38141a7bf2165ad38da61d61cf27b43015da2" - integrity sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g== +"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.22.5": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" + integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-wrap-function" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/helper-wrap-function" "^7.22.9" -"@babel/helper-replace-supers@^7.20.7", "@babel/helper-replace-supers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz#71bc5fb348856dea9fdc4eafd7e2e49f585145dc" - integrity sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg== - dependencies: - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.5" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helper-replace-supers@^7.22.20": +"@babel/helper-replace-supers@^7.20.7", "@babel/helper-replace-supers@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== @@ -461,35 +385,30 @@ "@babel/helper-member-expression-to-functions" "^7.22.15" "@babel/helper-optimise-call-expression" "^7.22.5" +"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779" + integrity sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-simple-access@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== dependencies: "@babel/types" "^7.22.5" -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" - integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== - dependencies: - "@babel/types" "^7.20.0" - -"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== dependencies: "@babel/types" "^7.22.5" -"@babel/helper-split-export-declaration@^7.18.6", "@babel/helper-split-export-declaration@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz#88cf11050edb95ed08d596f7a044462189127a08" - integrity sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": +"@babel/helper-split-export-declaration@^7.18.6", "@babel/helper-split-export-declaration@^7.22.5", "@babel/helper-split-export-declaration@^7.22.6": version "7.22.6" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== @@ -498,7 +417,7 @@ "@babel/helper-string-parser@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== "@babel/helper-string-parser@^7.23.4": @@ -513,17 +432,12 @@ "@babel/helper-validator-identifier@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz" integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== -"@babel/helper-validator-option@^7.18.6": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" - integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== - "@babel/helper-validator-option@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz" integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== "@babel/helper-validator-option@^7.23.5": @@ -531,26 +445,16 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== -"@babel/helper-wrap-function@^7.18.9", "@babel/helper-wrap-function@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz#44d205af19ed8d872b4eefb0d2fa65f45eb34f06" - integrity sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw== +"@babel/helper-wrap-function@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz#189937248c45b0182c1dcf32f3444ca153944cb9" + integrity sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q== dependencies: "@babel/helper-function-name" "^7.22.5" "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" "@babel/types" "^7.22.5" -"@babel/helpers@^7.21.0", "@babel/helpers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.5.tgz#74bb4373eb390d1ceed74a15ef97767e63120820" - integrity sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q== - dependencies: - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" - -"@babel/helpers@^7.23.9": +"@babel/helpers@^7.21.0", "@babel/helpers@^7.22.5", "@babel/helpers@^7.23.9": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.9.tgz#c3e20bbe7f7a7e10cb9b178384b4affdf5995c7d" integrity sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ== @@ -561,7 +465,7 @@ "@babel/highlight@^7.22.5": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz" integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== dependencies: "@babel/helper-validator-identifier" "^7.22.5" @@ -672,21 +576,21 @@ "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-bigint@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.8.3": version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" @@ -721,63 +625,63 @@ "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-jsx@^7.22.5", "@babel/plugin-syntax-jsx@^7.7.2": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz" integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.0.0", "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.0.0", "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" @@ -791,14 +695,14 @@ "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.20.0", "@babel/plugin-syntax-typescript@^7.22.5", "@babel/plugin-syntax-typescript@^7.7.2": +"@babel/plugin-syntax-typescript@^7.22.5", "@babel/plugin-syntax-typescript@^7.7.2": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz" integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -827,18 +731,18 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-classes@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz#635d4e98da741fad814984639f4c0149eb0135e1" - integrity sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ== + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz#e04d7d804ed5b8501311293d1a0e6d43e94c3363" + integrity sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-function-name" "^7.22.5" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-replace-supers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.0.0": @@ -964,16 +868,16 @@ "@babel/types" "^7.22.5" "@babel/plugin-transform-runtime@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz#ca975fb5e260044473c8142e1b18b567d33c2a3b" - integrity sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.9.tgz#a87b11e170cbbfb018e6a2bf91f5c6e533b9e027" + integrity sha512-9KjBH61AGJetCPYp/IEyLEp47SyybZb0nDRpBvmtEkm+rUIwxdlKpyNHI1TmsGkeuLclJdleQHRZ8XLBnnh8CQ== dependencies: "@babel/helper-module-imports" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.3" - babel-plugin-polyfill-corejs3 "^0.8.1" - babel-plugin-polyfill-regenerator "^0.5.0" - semver "^6.3.0" + babel-plugin-polyfill-corejs2 "^0.4.4" + babel-plugin-polyfill-corejs3 "^0.8.2" + babel-plugin-polyfill-regenerator "^0.5.1" + semver "^6.3.1" "@babel/plugin-transform-shorthand-properties@^7.0.0": version "7.22.5" @@ -1008,14 +912,14 @@ "@babel/plugin-syntax-typescript" "^7.22.5" "@babel/plugin-transform-typescript@^7.5.0": - version "7.21.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz#316c5be579856ea890a57ebc5116c5d064658f2b" - integrity sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.9.tgz#91e08ad1eb1028ecc62662a842e93ecfbf3c7234" + integrity sha512-BnVR1CpKiuD0iobHPaM1iLvcwPYN2uVFAqoLVSpEDKWuOikoCv5HbKLxclhKYUXlWkX86DoZGtqI4XhbOsyrMg== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.21.0" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-typescript" "^7.20.0" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.9" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-typescript" "^7.22.5" "@babel/plugin-transform-unicode-regex@^7.0.0": version "7.22.5" @@ -1062,22 +966,22 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime@^7.0.0", "@babel/runtime@^7.15.4", "@babel/runtime@^7.9.2": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" - integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.6.tgz#57d64b9ae3cff1d67eb067ae117dac087f5bd438" + integrity sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ== dependencies: regenerator-runtime "^0.13.11" -"@babel/template@^7.0.0", "@babel/template@^7.20.7", "@babel/template@^7.22.5", "@babel/template@^7.3.3": +"@babel/template@^7.0.0", "@babel/template@^7.22.5", "@babel/template@^7.3.3": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz" integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== dependencies: "@babel/code-frame" "^7.22.5" "@babel/parser" "^7.22.5" "@babel/types" "^7.22.5" -"@babel/template@^7.22.15", "@babel/template@^7.23.9": +"@babel/template@^7.20.7", "@babel/template@^7.22.15", "@babel/template@^7.23.9": version "7.23.9" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.23.9.tgz#f881d0487cba2828d3259dcb9ef5005a9731011a" integrity sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA== @@ -1118,9 +1022,9 @@ debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.21.3", "@babel/types@^7.22.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3": +"@babel/types@^7.0.0", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.21.3", "@babel/types@^7.22.5", "@babel/types@^7.3.3": version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz" integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== dependencies: "@babel/helper-string-parser" "^7.22.5" @@ -1138,9 +1042,22 @@ "@bcoe/v8-coverage@^0.2.3": version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@credo-ts/anoncreds@0.5.0", "@credo-ts/anoncreds@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@credo-ts/anoncreds/-/anoncreds-0.5.0.tgz#74bcaec9b3e5f75fd03924efc2e8bd67b905b035" + integrity sha512-fYPYxGV2S99dTCb0LHcHnJrVL3FLgrON5tFiv6U7By6aR9paT70Gwep/Lyp0WNzssg2vZ+a4gEf2gKjQiBE8pA== + dependencies: + "@astronautlabs/jsonpath" "^1.1.2" + "@credo-ts/core" "0.5.0" + big-integer "^1.6.51" + bn.js "^5.2.1" + class-transformer "0.5.1" + class-validator "0.14.1" + reflect-metadata "^0.1.13" + "@credo-ts/askar@^0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@credo-ts/askar/-/askar-0.5.0.tgz#5fa2e6443fe3ae1b15c8b66eb73e63beb5c096a1" @@ -1190,6 +1107,14 @@ varint "^6.0.0" web-did-resolver "^2.0.21" +"@credo-ts/indy-vdr@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@credo-ts/indy-vdr/-/indy-vdr-0.5.0.tgz#1799b2a90599d000a43c5dc59e7bd1e1eda68fe1" + integrity sha512-hW7xDdL6fVIgTIclmJRfVz3mlpo87Cwk6hCiRY1/lWV62bsKs6RHGLv6RUp+WPwTIpPpbBs6T1Dm85ditBbxpA== + dependencies: + "@credo-ts/anoncreds" "0.5.0" + "@credo-ts/core" "0.5.0" + "@credo-ts/node@^0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@credo-ts/node/-/node-0.5.0.tgz#d28ed5040f9925777a65f66f55abed7c2d2e53de" @@ -1212,9 +1137,17 @@ class-validator "0.14.1" rxjs "^7.8.0" +"@credo-ts/tenants@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@credo-ts/tenants/-/tenants-0.5.0.tgz#e32943d66580af3b7bf6970fb3321329a479271d" + integrity sha512-SB2btH9adWLBwBs2d3od9VTF6AA2Bfzl3oJovlrcdWHXSYQWf0Hm+PRkvmL8+RYwdGtDM8uBKQrkbdPBGWEWAA== + dependencies: + "@credo-ts/core" "0.5.0" + async-mutex "^0.4.0" + "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" @@ -1238,7 +1171,7 @@ "@digitalbazaar/security-context@^1.0.0": version "1.0.1" - resolved "https://registry.yarnpkg.com/@digitalbazaar/security-context/-/security-context-1.0.1.tgz#badc4b8da03411a32d4e7321ce7c4b355776b410" + resolved "https://registry.npmjs.org/@digitalbazaar/security-context/-/security-context-1.0.1.tgz" integrity sha512-0WZa6tPiTZZF8leBtQgYAfXQePFQp2z5ivpCEN/iZguYYZ0TB9qRmWtan5XH6mNFuusHtMcyIzAcReyE6rZPhA== "@digitalbazaar/vc-status-list-context@^3.0.1": @@ -1308,7 +1241,7 @@ "@digitalcredentials/http-client@^1.0.0": version "1.2.2" - resolved "https://registry.yarnpkg.com/@digitalcredentials/http-client/-/http-client-1.2.2.tgz#8b09ab6f1e3aa8878d91d3ca51946ca8265cc92e" + resolved "https://registry.npmjs.org/@digitalcredentials/http-client/-/http-client-1.2.2.tgz" integrity sha512-YOwaE+vUDSwiDhZT0BbXSWVg+bvp1HA1eg/gEc8OCwCOj9Bn9FRQdu8P9Y/fnYqyFCioDwwTRzGxgJLl50baEg== dependencies: ky "^0.25.1" @@ -1316,7 +1249,7 @@ "@digitalcredentials/jsonld-signatures@^9.3.1": version "9.3.1" - resolved "https://registry.yarnpkg.com/@digitalcredentials/jsonld-signatures/-/jsonld-signatures-9.3.1.tgz#e00175ab4199c580c9b308effade021da805c695" + resolved "https://registry.npmjs.org/@digitalcredentials/jsonld-signatures/-/jsonld-signatures-9.3.1.tgz" integrity sha512-YMh1e1GpTeHDqq2a2Kd+pLcHsMiPeKyE2Zs17NSwqckij7UMRVDQ54S5VQhHvoXZ1mlkpVaI2xtj5M5N6rzylw== dependencies: "@digitalbazaar/security-context" "^1.0.0" @@ -1338,7 +1271,7 @@ "@digitalcredentials/jsonld@^5.2.1": version "5.2.1" - resolved "https://registry.yarnpkg.com/@digitalcredentials/jsonld/-/jsonld-5.2.1.tgz#60acf587bec8331e86324819fd19692939118775" + resolved "https://registry.npmjs.org/@digitalcredentials/jsonld/-/jsonld-5.2.1.tgz" integrity sha512-pDiO1liw8xs+J/43qnMZsxyz0VOWOb7Q2yUlBt/tyjq6SlT9xPo+3716tJPbjGPnou2lQRw3H5/I++z+6oQ07w== dependencies: "@digitalcredentials/http-client" "^1.0.0" @@ -1363,7 +1296,7 @@ "@digitalcredentials/rdf-canonize@^1.0.0": version "1.0.0" - resolved "https://registry.yarnpkg.com/@digitalcredentials/rdf-canonize/-/rdf-canonize-1.0.0.tgz#6297d512072004c2be7f280246383a9c4b0877ff" + resolved "https://registry.npmjs.org/@digitalcredentials/rdf-canonize/-/rdf-canonize-1.0.0.tgz" integrity sha512-z8St0Ex2doecsExCFK1uI4gJC+a5EqYYu1xpRH1pKmqSS9l/nxfuVxexNFyaeEum4dUdg1EetIC2rTwLIFhPRA== dependencies: fast-text-encoding "^1.0.3" @@ -1404,14 +1337,14 @@ "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.4.0": version "4.5.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz" integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== "@eslint-community/regexpp@^4.5.1": @@ -1419,14 +1352,14 @@ resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331" - integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== +"@eslint/eslintrc@^2.1.0": + version "2.1.0" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz" + integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.5.2" + espree "^9.6.0" globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -1434,26 +1367,240 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.43.0": - version "8.43.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.43.0.tgz#559ca3d9ddbd6bf907ad524320a0d14b85586af0" - integrity sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg== +"@eslint/js@8.44.0": + version "8.44.0" + resolved "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz" + integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw== "@fastify/busboy@^2.0.0": version "2.1.0" resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== -"@gar/promisify@^1.0.1": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== +"@hapi/accept@^6.0.1": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@hapi/accept/-/accept-6.0.3.tgz#eef0800a4f89cd969da8e5d0311dc877c37279ab" + integrity sha512-p72f9k56EuF0n3MwlBNThyVE5PXX40g+aQh+C/xbKrfzahM2Oispv3AXmOIU51t3j77zay1qrX7IIziZXspMlw== + dependencies: + "@hapi/boom" "^10.0.1" + "@hapi/hoek" "^11.0.2" + +"@hapi/ammo@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@hapi/ammo/-/ammo-6.0.1.tgz#1bc9f7102724ff288ca03b721854fc5393ad123a" + integrity sha512-pmL+nPod4g58kXrMcsGLp05O2jF4P2Q3GiL8qYV7nKYEh3cGf+rV4P5Jyi2Uq0agGhVU63GtaSAfBEZOlrJn9w== + dependencies: + "@hapi/hoek" "^11.0.2" + +"@hapi/b64@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@hapi/b64/-/b64-6.0.1.tgz#786b47dc070e14465af49e2428c1025bd06ed3df" + integrity sha512-ZvjX4JQReUmBheeCq+S9YavcnMMHWqx3S0jHNXWIM1kQDxB9cyfSycpVvjfrKcIS8Mh5N3hmu/YKo4Iag9g2Kw== + dependencies: + "@hapi/hoek" "^11.0.2" + +"@hapi/boom@^10.0.0", "@hapi/boom@^10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@hapi/boom/-/boom-10.0.1.tgz#ebb14688275ae150aa6af788dbe482e6a6062685" + integrity sha512-ERcCZaEjdH3OgSJlyjVk8pHIFeus91CjKP3v+MpgBNp5IvGzP2l/bRiD78nqYcKPaZdbKkK5vDBVPd2ohHBlsA== + dependencies: + "@hapi/hoek" "^11.0.2" + +"@hapi/bounce@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@hapi/bounce/-/bounce-3.0.1.tgz#25a51bf95733749c557c6bf948048bffa66435e4" + integrity sha512-G+/Pp9c1Ha4FDP+3Sy/Xwg2O4Ahaw3lIZFSX+BL4uWi64CmiETuZPxhKDUD4xBMOUZbBlzvO8HjiK8ePnhBadA== + dependencies: + "@hapi/boom" "^10.0.1" + "@hapi/hoek" "^11.0.2" + +"@hapi/bourne@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-3.0.0.tgz#f11fdf7dda62fe8e336fa7c6642d9041f30356d7" + integrity sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w== + +"@hapi/call@^9.0.1": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@hapi/call/-/call-9.0.1.tgz#569b87d5b67abf0e58fb82a3894a61aaed3ca92e" + integrity sha512-uPojQRqEL1GRZR4xXPqcLMujQGaEpyVPRyBlD8Pp5rqgIwLhtveF9PkixiKru2THXvuN8mUrLeet5fqxKAAMGg== + dependencies: + "@hapi/boom" "^10.0.1" + "@hapi/hoek" "^11.0.2" + +"@hapi/catbox-memory@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@hapi/catbox-memory/-/catbox-memory-6.0.1.tgz#8f6b04c0cf2ce25da470324df360bd4e8d68b6ec" + integrity sha512-sVb+/ZxbZIvaMtJfAbdyY+QJUQg9oKTwamXpEg/5xnfG5WbJLTjvEn4kIGKz9pN3ENNbIL/bIdctmHmqi/AdGA== + dependencies: + "@hapi/boom" "^10.0.1" + "@hapi/hoek" "^11.0.2" + +"@hapi/catbox@^12.1.1": + version "12.1.1" + resolved "https://registry.yarnpkg.com/@hapi/catbox/-/catbox-12.1.1.tgz#9339dca0a5b18b3ca0a825ac5dfc916dbc5bab83" + integrity sha512-hDqYB1J+R0HtZg4iPH3LEnldoaBsar6bYp0EonBmNQ9t5CO+1CqgCul2ZtFveW1ReA5SQuze9GPSU7/aecERhw== + dependencies: + "@hapi/boom" "^10.0.1" + "@hapi/hoek" "^11.0.2" + "@hapi/podium" "^5.0.0" + "@hapi/validate" "^2.0.1" + +"@hapi/content@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@hapi/content/-/content-6.0.0.tgz#2427af3bac8a2f743512fce2a70cbdc365af29df" + integrity sha512-CEhs7j+H0iQffKfe5Htdak5LBOz/Qc8TRh51cF+BFv0qnuph3Em4pjGVzJMkI2gfTDdlJKWJISGWS1rK34POGA== + dependencies: + "@hapi/boom" "^10.0.0" + +"@hapi/cryptiles@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@hapi/cryptiles/-/cryptiles-6.0.1.tgz#7868a9d4233567ed66f0a9caf85fdcc56e980621" + integrity sha512-9GM9ECEHfR8lk5ASOKG4+4ZsEzFqLfhiryIJ2ISePVB92OHLp/yne4m+zn7z9dgvM98TLpiFebjDFQ0UHcqxXQ== + dependencies: + "@hapi/boom" "^10.0.1" + +"@hapi/file@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@hapi/file/-/file-3.0.0.tgz#f1fd824493ac89a6fceaf89c824afc5ae2121c09" + integrity sha512-w+lKW+yRrLhJu620jT3y+5g2mHqnKfepreykvdOcl9/6up8GrQQn+l3FRTsjHTKbkbfQFkuksHpdv2EcpKcJ4Q== + +"@hapi/hapi@^21.3.3": + version "21.3.7" + resolved "https://registry.yarnpkg.com/@hapi/hapi/-/hapi-21.3.7.tgz#0b189312428a813daa225b45aa1695d427efab2b" + integrity sha512-33J0nreMfqkhY7wwRAZRy+9J+7J4QOH1JtICMjIUmxfaOYSJL/d8JJCtg57SX60944bhlCeu7isb7qyr2jT2oA== + dependencies: + "@hapi/accept" "^6.0.1" + "@hapi/ammo" "^6.0.1" + "@hapi/boom" "^10.0.1" + "@hapi/bounce" "^3.0.1" + "@hapi/call" "^9.0.1" + "@hapi/catbox" "^12.1.1" + "@hapi/catbox-memory" "^6.0.1" + "@hapi/heavy" "^8.0.1" + "@hapi/hoek" "^11.0.2" + "@hapi/mimos" "^7.0.1" + "@hapi/podium" "^5.0.1" + "@hapi/shot" "^6.0.1" + "@hapi/somever" "^4.1.1" + "@hapi/statehood" "^8.1.1" + "@hapi/subtext" "^8.1.0" + "@hapi/teamwork" "^6.0.0" + "@hapi/topo" "^6.0.1" + "@hapi/validate" "^2.0.1" + +"@hapi/heavy@^8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@hapi/heavy/-/heavy-8.0.1.tgz#e2be4a6a249005b5a587f7604aafa8ed02461fb6" + integrity sha512-gBD/NANosNCOp6RsYTsjo2vhr5eYA3BEuogk6cxY0QdhllkkTaJFYtTXv46xd6qhBVMbMMqcSdtqey+UQU3//w== + dependencies: + "@hapi/boom" "^10.0.1" + "@hapi/hoek" "^11.0.2" + "@hapi/validate" "^2.0.1" + +"@hapi/hoek@^11.0.2": + version "11.0.4" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-11.0.4.tgz#42a7f244fd3dd777792bfb74b8c6340ae9182f37" + integrity sha512-PnsP5d4q7289pS2T2EgGz147BFJ2Jpb4yrEdkpz2IhgEUzos1S7HTl7ezWh1yfYzYlj89KzLdCRkqsP6SIryeQ== "@hapi/hoek@^9.0.0": version "9.3.0" resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== +"@hapi/iron@^7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@hapi/iron/-/iron-7.0.1.tgz#f74bace8dad9340c7c012c27c078504f070f14b5" + integrity sha512-tEZnrOujKpS6jLKliyWBl3A9PaE+ppuL/+gkbyPPDb/l2KSKQyH4lhMkVb+sBhwN+qaxxlig01JRqB8dk/mPxQ== + dependencies: + "@hapi/b64" "^6.0.1" + "@hapi/boom" "^10.0.1" + "@hapi/bourne" "^3.0.0" + "@hapi/cryptiles" "^6.0.1" + "@hapi/hoek" "^11.0.2" + +"@hapi/mimos@^7.0.1": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@hapi/mimos/-/mimos-7.0.1.tgz#5b65c76bb9da28ba34b0092215891f2c72bc899d" + integrity sha512-b79V+BrG0gJ9zcRx1VGcCI6r6GEzzZUgiGEJVoq5gwzuB2Ig9Cax8dUuBauQCFKvl2YWSWyOc8mZ8HDaJOtkew== + dependencies: + "@hapi/hoek" "^11.0.2" + mime-db "^1.52.0" + +"@hapi/nigel@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@hapi/nigel/-/nigel-5.0.1.tgz#a6dfe357e9d48d944e2ffc552bd95cb701d79ee9" + integrity sha512-uv3dtYuB4IsNaha+tigWmN8mQw/O9Qzl5U26Gm4ZcJVtDdB1AVJOwX3X5wOX+A07qzpEZnOMBAm8jjSqGsU6Nw== + dependencies: + "@hapi/hoek" "^11.0.2" + "@hapi/vise" "^5.0.1" + +"@hapi/pez@^6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@hapi/pez/-/pez-6.1.0.tgz#64d9f95580fc7d8f1d13437ee4a8676709954fda" + integrity sha512-+FE3sFPYuXCpuVeHQ/Qag1b45clR2o54QoonE/gKHv9gukxQ8oJJZPR7o3/ydDTK6racnCJXxOyT1T93FCJMIg== + dependencies: + "@hapi/b64" "^6.0.1" + "@hapi/boom" "^10.0.1" + "@hapi/content" "^6.0.0" + "@hapi/hoek" "^11.0.2" + "@hapi/nigel" "^5.0.1" + +"@hapi/podium@^5.0.0", "@hapi/podium@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@hapi/podium/-/podium-5.0.1.tgz#f292b4c0ca3118747394a102c6c3340bda96662f" + integrity sha512-eznFTw6rdBhAijXFIlBOMJJd+lXTvqbrBIS4Iu80r2KTVIo4g+7fLy4NKp/8+UnSt5Ox6mJtAlKBU/Sf5080TQ== + dependencies: + "@hapi/hoek" "^11.0.2" + "@hapi/teamwork" "^6.0.0" + "@hapi/validate" "^2.0.1" + +"@hapi/shot@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@hapi/shot/-/shot-6.0.1.tgz#ea84d1810b7c8599d5517c23b4ec55a529d7dc16" + integrity sha512-s5ynMKZXYoDd3dqPw5YTvOR/vjHvMTxc388+0qL0jZZP1+uwXuUD32o9DuuuLsmTlyXCWi02BJl1pBpwRuUrNA== + dependencies: + "@hapi/hoek" "^11.0.2" + "@hapi/validate" "^2.0.1" + +"@hapi/somever@^4.1.1": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@hapi/somever/-/somever-4.1.1.tgz#b492c78408303c72cd1a39c5060f35d18a404b27" + integrity sha512-lt3QQiDDOVRatS0ionFDNrDIv4eXz58IibQaZQDOg4DqqdNme8oa0iPWcE0+hkq/KTeBCPtEOjDOBKBKwDumVg== + dependencies: + "@hapi/bounce" "^3.0.1" + "@hapi/hoek" "^11.0.2" + +"@hapi/statehood@^8.1.1": + version "8.1.1" + resolved "https://registry.yarnpkg.com/@hapi/statehood/-/statehood-8.1.1.tgz#db4bd14c90810a1389763cb0b0b8f221aa4179c1" + integrity sha512-YbK7PSVUA59NArAW5Np0tKRoIZ5VNYUicOk7uJmWZF6XyH5gGL+k62w77SIJb0AoAJ0QdGQMCQ/WOGL1S3Ydow== + dependencies: + "@hapi/boom" "^10.0.1" + "@hapi/bounce" "^3.0.1" + "@hapi/bourne" "^3.0.0" + "@hapi/cryptiles" "^6.0.1" + "@hapi/hoek" "^11.0.2" + "@hapi/iron" "^7.0.1" + "@hapi/validate" "^2.0.1" + +"@hapi/subtext@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@hapi/subtext/-/subtext-8.1.0.tgz#58733020a6655bc4d978df9e2f75e31696ff3f91" + integrity sha512-PyaN4oSMtqPjjVxLny1k0iYg4+fwGusIhaom9B2StinBclHs7v46mIW706Y+Wo21lcgulGyXbQrmT/w4dus6ww== + dependencies: + "@hapi/boom" "^10.0.1" + "@hapi/bourne" "^3.0.0" + "@hapi/content" "^6.0.0" + "@hapi/file" "^3.0.0" + "@hapi/hoek" "^11.0.2" + "@hapi/pez" "^6.1.0" + "@hapi/wreck" "^18.0.1" + +"@hapi/teamwork@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@hapi/teamwork/-/teamwork-6.0.0.tgz#b3a173cf811ba59fc6ee22318a1b51f4561f06e0" + integrity sha512-05HumSy3LWfXpmJ9cr6HzwhAavrHkJ1ZRCmNE2qJMihdM5YcWreWPfyN0yKT2ZjCM92au3ZkuodjBxOibxM67A== + "@hapi/topo@^5.0.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" @@ -1461,9 +1608,40 @@ dependencies: "@hapi/hoek" "^9.0.0" +"@hapi/topo@^6.0.1": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-6.0.2.tgz#f219c1c60da8430228af4c1f2e40c32a0d84bbb4" + integrity sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg== + dependencies: + "@hapi/hoek" "^11.0.2" + +"@hapi/validate@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@hapi/validate/-/validate-2.0.1.tgz#45cf228c4c8cfc61ba2da7e0a5ba93ff3b9afff1" + integrity sha512-NZmXRnrSLK8MQ9y/CMqE9WSspgB9xA41/LlYR0k967aSZebWr4yNrpxIbov12ICwKy4APSlWXZga9jN5p6puPA== + dependencies: + "@hapi/hoek" "^11.0.2" + "@hapi/topo" "^6.0.1" + +"@hapi/vise@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@hapi/vise/-/vise-5.0.1.tgz#5c9f16bcf1c039ddd4b6cad5f32d71eeb6bb7dac" + integrity sha512-XZYWzzRtINQLedPYlIkSkUr7m5Ddwlu99V9elh8CSygXstfv3UnWIXT0QD+wmR0VAG34d2Vx3olqcEhRRoTu9A== + dependencies: + "@hapi/hoek" "^11.0.2" + +"@hapi/wreck@^18.0.1": + version "18.0.1" + resolved "https://registry.yarnpkg.com/@hapi/wreck/-/wreck-18.0.1.tgz#6df04532be25fd128c5244e72ccc21438cf8bb65" + integrity sha512-OLHER70+rZxvDl75xq3xXOfd3e8XIvz8fWY0dqg92UvhZ29zo24vQgfqgHSYhB5ZiuFpSLeriOisAlxAo/1jWg== + dependencies: + "@hapi/boom" "^10.0.1" + "@hapi/bourne" "^3.0.0" + "@hapi/hoek" "^11.0.2" + "@humanwhocodes/config-array@^0.11.10": version "0.11.10" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz" integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== dependencies: "@humanwhocodes/object-schema" "^1.2.1" @@ -1472,14 +1650,31 @@ "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@hyperledger/anoncreds-nodejs@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@hyperledger/anoncreds-nodejs/-/anoncreds-nodejs-0.2.1.tgz#7dbde3e878758371e4d44542daa7f54ecf48f38e" + integrity sha512-wfQEVSqYHq6mQFTLRMVayyi8kbHlz3RGEIe10JOQSHCw4ZCTifQ1XuVajSwOj8ykNYwxuckcfNikJtJScs7l+w== + dependencies: + "@2060.io/ffi-napi" "4.0.8" + "@2060.io/ref-napi" "3.0.6" + "@hyperledger/anoncreds-shared" "0.2.1" + "@mapbox/node-pre-gyp" "^1.0.11" + ref-array-di "1.2.2" + ref-struct-di "1.1.1" + +"@hyperledger/anoncreds-shared@0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@hyperledger/anoncreds-shared/-/anoncreds-shared-0.2.1.tgz#7a8be78473e8cdd33b73ccdf2e9b838226aef0f9" + integrity sha512-QpkmsiDBto4B3MS7+tJKn8DHCuhaZuzPKy+SoSAIH8wrjBmQ4NQqzMBZXs0z0JnNr1egkIFR3HIFsIu9ayK20g== + "@hyperledger/aries-askar-nodejs@^0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@hyperledger/aries-askar-nodejs/-/aries-askar-nodejs-0.2.0.tgz#7a0b469184f0682d0e31955e29d091956f662273" @@ -1500,9 +1695,26 @@ dependencies: buffer "^6.0.3" +"@hyperledger/indy-vdr-nodejs@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@hyperledger/indy-vdr-nodejs/-/indy-vdr-nodejs-0.2.0.tgz#c5fd2c211d5a2b2a0637efa6b9636b208d919c06" + integrity sha512-yv+p0mU9NBUgmUDJijNgxtLonhzhDP54wRl4Mfn/s/ZyzLbEQakswmqa2sX0mYQDTLG14iq5uEN6d0eRzUtDeg== + dependencies: + "@2060.io/ffi-napi" "4.0.8" + "@2060.io/ref-napi" "3.0.6" + "@hyperledger/indy-vdr-shared" "0.2.0" + "@mapbox/node-pre-gyp" "^1.0.10" + ref-array-di "^1.2.2" + ref-struct-di "^1.1.1" + +"@hyperledger/indy-vdr-shared@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@hyperledger/indy-vdr-shared/-/indy-vdr-shared-0.2.0.tgz#4781e38bffe69366e694e8d025a8d017b8a1cb5b" + integrity sha512-/aPzpzb6Wks7poRSercSp6f3mFOBoQmxSIyo50XO6ci/Jfa4ZGuV8y8YWU2SJktsdz4TtL5YJxt2WVfOus9bEQ== + "@isaacs/cliui@^8.0.2": version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: string-width "^5.1.2" @@ -1519,7 +1731,7 @@ "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: camelcase "^5.3.1" @@ -1530,7 +1742,7 @@ "@istanbuljs/schema@^0.1.2": version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jest/console@^29.7.0": @@ -1596,14 +1808,7 @@ "@types/node" "*" jest-mock "^29.7.0" -"@jest/expect-utils@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.5.0.tgz#f74fad6b6e20f924582dc8ecbf2cb800fe43a036" - integrity sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg== - dependencies: - jest-get-type "^29.4.3" - -"@jest/expect-utils@^29.7.0": +"@jest/expect-utils@^29.5.0", "@jest/expect-utils@^29.7.0": version "29.7.0" resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== @@ -1670,20 +1875,20 @@ strip-ansi "^6.0.0" v8-to-istanbul "^9.0.1" -"@jest/schemas@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" - integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== - dependencies: - "@sinclair/typebox" "^0.25.16" - -"@jest/schemas@^29.6.3": +"@jest/schemas@^29.4.3", "@jest/schemas@^29.6.3": version "29.6.3" resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== dependencies: "@sinclair/typebox" "^0.27.8" +"@jest/schemas@^29.6.0": + version "29.6.0" + resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz" + integrity sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ== + dependencies: + "@sinclair/typebox" "^0.27.8" + "@jest/source-map@^29.6.3": version "29.6.3" resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" @@ -1734,7 +1939,7 @@ slash "^3.0.0" write-file-atomic "^4.0.2" -"@jest/types@^26.6.2", "@jest/types@^29.5.0", "@jest/types@^29.6.3": +"@jest/types@^26.6.2", "@jest/types@^29.5.0", "@jest/types@^29.6.1", "@jest/types@^29.6.3": version "29.5.0" resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== @@ -1746,27 +1951,18 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0": +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - "@jridgewell/resolve-uri@3.1.0": version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": @@ -1776,30 +1972,30 @@ "@jridgewell/set-array@^1.0.1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/source-map@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.3.tgz#8108265659d4c33e72ffe14e33d6cc5eb59f2fda" - integrity sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg== + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== dependencies: "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" @@ -1807,7 +2003,7 @@ "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": version "0.3.18" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz" integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== dependencies: "@jridgewell/resolve-uri" "3.1.0" @@ -1821,7 +2017,7 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@mapbox/node-pre-gyp@^1.0.10": +"@mapbox/node-pre-gyp@^1.0.10", "@mapbox/node-pre-gyp@^1.0.11": version "1.0.11" resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa" integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== @@ -1838,12 +2034,12 @@ "@multiformats/base-x@^4.0.1": version "4.0.1" - resolved "https://registry.yarnpkg.com/@multiformats/base-x/-/base-x-4.0.1.tgz#95ff0fa58711789d53aefb2590a8b7a4e715d121" + resolved "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz" integrity sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw== "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -1851,36 +2047,20 @@ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== - dependencies: - "@gar/promisify" "^1.0.1" - semver "^7.3.5" - -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" "@peculiar/asn1-schema@^2.3.6": version "2.3.6" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.3.6.tgz#3dd3c2ade7f702a9a94dfb395c192f5fa5d6b922" + resolved "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.6.tgz" integrity sha512-izNRxPoaeJeg/AyH8hER6s+H7p4itk+03QCa4sbxI3lNdseQYCuxzgsuNK8bTXChtLTjpJz6NmXKA73qLa3rCA== dependencies: asn1js "^3.0.5" @@ -1889,14 +2069,14 @@ "@peculiar/json-schema@^1.1.12": version "1.1.12" - resolved "https://registry.yarnpkg.com/@peculiar/json-schema/-/json-schema-1.1.12.tgz#fe61e85259e3b5ba5ad566cb62ca75b3d3cd5339" + resolved "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz" integrity sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w== dependencies: tslib "^2.0.0" "@peculiar/webcrypto@^1.0.22": version "1.4.3" - resolved "https://registry.yarnpkg.com/@peculiar/webcrypto/-/webcrypto-1.4.3.tgz#078b3e8f598e847b78683dc3ba65feb5029b93a7" + resolved "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.4.3.tgz" integrity sha512-VtaY4spKTdN5LjJ04im/d/joXuvLbQdgy5Z4DXF4MFZhQ+MTrejbNMkfZBp1Bs3O5+bFqnJgyGdPuZQflvIa5A== dependencies: "@peculiar/asn1-schema" "^2.3.6" @@ -1907,7 +2087,7 @@ "@pkgjs/parseargs@^0.11.0": version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== "@pkgr/core@^0.1.0": @@ -2307,38 +2487,28 @@ resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== -"@sinclair/typebox@^0.25.16": - version "0.25.24" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" - integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== - "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== -"@sindresorhus/is@^4.0.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - "@sinonjs/commons@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz" integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== dependencies: type-detect "4.0.8" "@sinonjs/fake-timers@^10.0.2": version "10.3.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz" integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== dependencies: "@sinonjs/commons" "^3.0.0" "@sovpro/delimited-stream@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@sovpro/delimited-stream/-/delimited-stream-1.1.0.tgz#4334bba7ee241036e580fdd99c019377630d26b4" + resolved "https://registry.npmjs.org/@sovpro/delimited-stream/-/delimited-stream-1.1.0.tgz" integrity sha512-kQpk267uxB19X3X2T1mvNMjyvIEonpNSHrMlK5ZaBU6aZxw7wPbpgKJOjHN3+/GPVpXgAV9soVT2oyHpLkLtyw== "@sphereon/pex-models@^2.2.2": @@ -2373,14 +2543,14 @@ "@stablelib/binary@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/binary/-/binary-1.0.1.tgz#c5900b94368baf00f811da5bdb1610963dfddf7f" + resolved "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz" integrity sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q== dependencies: "@stablelib/int" "^1.0.1" "@stablelib/ed25519@^1.0.1", "@stablelib/ed25519@^1.0.2": version "1.0.3" - resolved "https://registry.yarnpkg.com/@stablelib/ed25519/-/ed25519-1.0.3.tgz#f8fdeb6f77114897c887bb6a3138d659d3f35996" + resolved "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.3.tgz" integrity sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg== dependencies: "@stablelib/random" "^1.0.2" @@ -2389,17 +2559,17 @@ "@stablelib/hash@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/hash/-/hash-1.0.1.tgz#3c944403ff2239fad8ebb9015e33e98444058bc5" + resolved "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz" integrity sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg== "@stablelib/int@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/int/-/int-1.0.1.tgz#75928cc25d59d73d75ae361f02128588c15fd008" + resolved "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz" integrity sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w== "@stablelib/random@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@stablelib/random/-/random-1.0.2.tgz#2dece393636489bf7e19c51229dd7900eddf742c" + resolved "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz" integrity sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w== dependencies: "@stablelib/binary" "^1.0.1" @@ -2407,7 +2577,7 @@ "@stablelib/sha256@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/sha256/-/sha256-1.0.1.tgz#77b6675b67f9b0ea081d2e31bda4866297a3ae4f" + resolved "https://registry.npmjs.org/@stablelib/sha256/-/sha256-1.0.1.tgz" integrity sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ== dependencies: "@stablelib/binary" "^1.0.1" @@ -2416,7 +2586,7 @@ "@stablelib/sha512@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/sha512/-/sha512-1.0.1.tgz#6da700c901c2c0ceacbd3ae122a38ac57c72145f" + resolved "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz" integrity sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw== dependencies: "@stablelib/binary" "^1.0.1" @@ -2425,71 +2595,71 @@ "@stablelib/wipe@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/wipe/-/wipe-1.0.1.tgz#d21401f1d59ade56a62e139462a97f104ed19a36" + resolved "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz" integrity sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg== -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - "@tsconfig/node10@^1.0.7": version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -"@tsoa/cli@^4.1.3": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@tsoa/cli/-/cli-4.1.3.tgz#e8240c7b476b82225b01804cbac1be4076106091" - integrity sha512-tbuuAf9akIQHoqI0HgRV4GFtvzYxX+Hz5hMRdIDpmvFb9oH1vOekjlLlTNVnzV18amUWAz6lrMdaZWwzLu0JXg== - dependencies: - "@tsoa/runtime" "^4.1.3" - deepmerge "^4.2.2" - fs-extra "^8.1.0" - glob "^7.1.6" - handlebars "^4.7.7" - merge "^2.1.0" - minimatch "^3.0.4" - typescript "<4.8.0" - validator "^13.6.0" - yamljs "^0.3.0" - yargs "^15.4.1" +"@tsoa/cli@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@tsoa/cli/-/cli-6.2.0.tgz#7570346fc9ce6847c6d3a7ed713b2acf88a8b0e7" + integrity sha512-kzr10MsARpuivJl59XD33+sdMA18Rx9KBu7NCp18nV6kPQ1LDrVBwVgLL96w7lBgUGsCgVJ1/cUePW313uTZCw== + dependencies: + "@tsoa/runtime" "^6.2.0" + "@types/multer" "^1.4.11" + fs-extra "^11.2.0" + glob "^10.3.10" + handlebars "^4.7.8" + merge-anything "^5.1.4" + minimatch "^9.0.1" + ts-deepmerge "^7.0.0" + typescript "^5.3.3" + validator "^13.11.0" + yaml "^2.4.1" + yargs "^17.7.1" -"@tsoa/runtime@^4.1.3": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@tsoa/runtime/-/runtime-4.1.3.tgz#657a29464e81602a516a5b28371afcf7963d642c" - integrity sha512-XvHgrzdbpLI3RfWJ2xq6sNk74Lln5OpkHxGyWdUkZfcExizr+bt/QpSEDOZC6XgfhIgzFZqWah+TZ51zX88OCg== +"@tsoa/runtime@^6.2.0": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@tsoa/runtime/-/runtime-6.2.0.tgz#bb56dc728cbb06151229794a7cbdfe4ba69e9967" + integrity sha512-iXSi5rDZWcPRcLKa9WaMBUdh4SdDN+9Cmy+R7i/DSCtFtbtUqE+ui+IMV9o6+759N6J3FqGBaPWa9kAtOrL4sA== + dependencies: + "@hapi/boom" "^10.0.1" + "@hapi/hapi" "^21.3.3" + "@types/koa" "^2.15.0" + "@types/multer" "^1.4.11" + express "^4.18.3" + reflect-metadata "^0.2.1" + validator "^13.11.0" + +"@types/accepts@*": + version "1.3.7" + resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.7.tgz#3b98b1889d2b2386604c2bbbe62e4fb51e95b265" + integrity sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ== dependencies: - promise.any "^2.0.2" - reflect-metadata "^0.1.13" - validator "^13.6.0" + "@types/node" "*" "@types/babel__core@^7.1.14": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891" - integrity sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ== + version "7.20.1" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz" + integrity sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -2499,59 +2669,64 @@ "@types/babel__generator@*": version "7.6.4" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" + resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz" integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" + resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.18.3" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d" - integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w== + version "7.20.1" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz" + integrity sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg== dependencies: - "@babel/types" "^7.3.0" + "@babel/types" "^7.20.7" "@types/body-parser@*", "@types/body-parser@^1.19.2": version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz" integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== dependencies: "@types/connect" "*" "@types/node" "*" -"@types/cacheable-request@^6.0.1": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - "@types/connect@*": version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== dependencies: "@types/node" "*" +"@types/content-disposition@*": + version "0.5.8" + resolved "https://registry.yarnpkg.com/@types/content-disposition/-/content-disposition-0.5.8.tgz#6742a5971f490dc41e59d277eee71361fea0b537" + integrity sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg== + "@types/cookiejar@*": version "2.1.2" - resolved "https://registry.yarnpkg.com/@types/cookiejar/-/cookiejar-2.1.2.tgz#66ad9331f63fe8a3d3d9d8c6e3906dd10f6446e8" + resolved "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz" integrity sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog== +"@types/cookies@*": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@types/cookies/-/cookies-0.9.0.tgz#a2290cfb325f75f0f28720939bee854d4142aee2" + integrity sha512-40Zk8qR147RABiQ7NQnBzWzDcjKzNrntB5BAmeGCb2p/MIyOE+4BVvc17wumsUqUw00bJYqoXFHYygQnEFh4/Q== + dependencies: + "@types/connect" "*" + "@types/express" "*" + "@types/keygrip" "*" + "@types/node" "*" + "@types/cors@^2.8.12": version "2.8.13" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.13.tgz#b8ade22ba455a1b8cb3b5d3f35910fd204f84f94" + resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz" integrity sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA== dependencies: "@types/node" "*" @@ -2566,12 +2741,12 @@ "@types/estree@*": version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz" integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== "@types/express-serve-static-core@^4.17.33": version "4.17.35" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz#c95dd4424f0d32e525d23812aa8ab8e4d3906c4f" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz" integrity sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg== dependencies: "@types/node" "*" @@ -2581,7 +2756,7 @@ "@types/express@*", "@types/express@^4.17.13", "@types/express@^4.17.15": version "4.17.17" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" + resolved "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz" integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== dependencies: "@types/body-parser" "*" @@ -2591,7 +2766,7 @@ "@types/graceful-fs@^4.1.3": version "4.1.6" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" + resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz" integrity sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw== dependencies: "@types/node" "*" @@ -2604,53 +2779,46 @@ "@types/react" "*" hoist-non-react-statics "^3.3.0" -"@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== +"@types/http-assert@*": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@types/http-assert/-/http-assert-1.5.5.tgz#dfb1063eb7c240ee3d3fe213dac5671cfb6a8dbf" + integrity sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g== "@types/http-errors@*": version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65" + resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz" integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ== -"@types/indy-sdk@1.16.9", "@types/indy-sdk@^1.16.19": - version "1.16.9" - resolved "https://registry.yarnpkg.com/@types/indy-sdk/-/indy-sdk-1.16.9.tgz#647a77ead1e93c77b2b0ef5f2c399ba2ea461b89" - integrity sha512-X8fdwcGaXfCxayBOb4NUny37JDd9Q3ZDKnm7WBhPRcdOXw3kmsy+WX52751nJQRBcltu883rbqYAIzcZE83XRA== - dependencies: - buffer "^6.0.0" - "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz" integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== "@types/istanbul-lib-report@*": version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== dependencies: "@types/istanbul-lib-report" "*" "@types/jest@^29.5.2": - version "29.5.2" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.2.tgz#86b4afc86e3a8f3005b297ed8a72494f89e6395b" - integrity sha512-mSoZVJF5YzGVCk+FsDxzDuH7s+SCkzrgKZzf0Z0T2WudhBUPoF6ktoTPC4R0ZoCPCV5xUvuU6ias5NvxcBcMMg== + version "29.5.3" + resolved "https://registry.npmjs.org/@types/jest/-/jest-29.5.3.tgz" + integrity sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA== dependencies: expect "^29.0.0" pretty-format "^29.0.0" "@types/json-schema@*": version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz" integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== "@types/json-schema@^7.0.12": @@ -2660,42 +2828,63 @@ "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== -"@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== +"@types/keygrip@*": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/keygrip/-/keygrip-1.0.6.tgz#1749535181a2a9b02ac04a797550a8787345b740" + integrity sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ== + +"@types/koa-compose@*": + version "3.2.8" + resolved "https://registry.yarnpkg.com/@types/koa-compose/-/koa-compose-3.2.8.tgz#dec48de1f6b3d87f87320097686a915f1e954b57" + integrity sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA== dependencies: - "@types/node" "*" + "@types/koa" "*" -"@types/mime@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" - integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== +"@types/koa@*", "@types/koa@^2.15.0": + version "2.15.0" + resolved "https://registry.yarnpkg.com/@types/koa/-/koa-2.15.0.tgz#eca43d76f527c803b491731f95df575636e7b6f2" + integrity sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g== + dependencies: + "@types/accepts" "*" + "@types/content-disposition" "*" + "@types/cookies" "*" + "@types/http-assert" "*" + "@types/http-errors" "*" + "@types/keygrip" "*" + "@types/koa-compose" "*" + "@types/node" "*" -"@types/mime@^1": +"@types/mime@*", "@types/mime@^1": version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz" integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== +"@types/multer@^1.4.11": + version "1.4.11" + resolved "https://registry.yarnpkg.com/@types/multer/-/multer-1.4.11.tgz#c70792670513b4af1159a2b60bf48cc932af55c5" + integrity sha512-svK240gr6LVWvv3YGyhLlA+6LRRWA4mnGIU7RcNmgjBYFl6665wcXrRfxGp5tEPVHUNm5FMcmq7too9bxCwX/w== + dependencies: + "@types/express" "*" + "@types/multer@^1.4.7": version "1.4.7" - resolved "https://registry.yarnpkg.com/@types/multer/-/multer-1.4.7.tgz#89cf03547c28c7bbcc726f029e2a76a7232cc79e" + resolved "https://registry.npmjs.org/@types/multer/-/multer-1.4.7.tgz" integrity sha512-/SNsDidUFCvqqcWDwxv2feww/yqhNeTRL5CVoL3jU4Goc4kKEL10T7Eye65ZqPNi4HRx8sAEX59pV1aEH7drNA== dependencies: "@types/express" "*" -"@types/node-fetch@^2.5.10": +"@types/node-fetch@^2.6.4": version "2.6.4" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.4.tgz#1bc3a26de814f6bf466b25aeb1473fa1afe6a660" + resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz" integrity sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg== dependencies: "@types/node" "*" form-data "^3.0.0" -"@types/node@*", "@types/node@^16.7.10", "@types/node@^18.0.0", "@types/node@^8.10.50": +"@types/node@*", "@types/node@^16.7.10", "@types/node@^18.0.0": version "18.19.15" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.15.tgz#313a9d75435669a57fc28dc8694e7f4c4319f419" integrity sha512-AMZ2UWx+woHNfM11PyAEQmfSxi05jm9OlkxczuHeEqmvwPkYj6MWv44gbzDPefYOLysTOFyI3ziiy2ONmUZfpA== @@ -2709,12 +2898,12 @@ "@types/qs@*": version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== "@types/range-parser@*": version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== "@types/react-redux@^7.1.20": @@ -2727,31 +2916,36 @@ hoist-non-react-statics "^3.3.0" redux "^4.0.0" -"@types/react@*": - version "18.2.13" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.13.tgz#a98c09bde8b18f80021935b11d2d29ef5f4dcb2f" - integrity sha512-vJ+zElvi/Zn9cVXB5slX2xL8PZodPCwPRDpittQdw43JR2AJ5k3vKdgJJyneV/cYgIbLQUwXa9JVDvUZXGba+Q== +"@types/react@*", "@types/react@^18.2.14": + version "18.2.17" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.17.tgz#baa565b17ddb649c2dac85b5eaf9e9a1fe0f3b4e" + integrity sha512-u+e7OlgPPh+aryjOm5UJMX32OvB2E3QASOAqVMY6Ahs90djagxwv2ya0IctglNbNTexC12qCSMZG47KPfy1hAA== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" csstype "^3.0.2" -"@types/react@^18.2.14": - version "18.2.14" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.14.tgz#fa7a6fecf1ce35ca94e74874f70c56ce88f7a127" - integrity sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g== +"@types/ref-array-di@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@types/ref-array-di/-/ref-array-di-1.2.8.tgz#2b44567b8eaae72c59db68a482f5d26297e955be" + integrity sha512-+re5xrhRXDUR3sicMvN9N3C+6mklq5kd7FkN3ciRWio3BAvUDh2OEUTTG+619r10dqc6de25LIDtgpHtXCKGbA== dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" + "@types/ref-napi" "*" -"@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== +"@types/ref-napi@*": + version "3.0.7" + resolved "https://registry.yarnpkg.com/@types/ref-napi/-/ref-napi-3.0.7.tgz#20adc93a7a2f9f992dfb17409fd748e6f4bf403d" + integrity sha512-CzPwr36VkezSpaJGdQX/UrczMSDsDgsWQQFEfQkS799Ft7n/s183a53lsql7RwVq+Ik4yLEgI84pRnLC0XXRlA== dependencies: "@types/node" "*" +"@types/ref-struct-di@^1.1.9": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@types/ref-struct-di/-/ref-struct-di-1.1.9.tgz#cdca2cefbb8a907ac9eb9d6a7f19cfae00bfa092" + integrity sha512-B1FsB1BhG1VLx0+IqBaAPXEPH0wCOb+Glaaw/i+nRUwDKFtSqWOziGnTRw05RyrBbrDsMiM0tVWmaujrs016Sw== + dependencies: + "@types/ref-napi" "*" + "@types/scheduler@*": version "0.16.3" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" @@ -2764,7 +2958,7 @@ "@types/send@*": version "0.17.1" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301" + resolved "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz" integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q== dependencies: "@types/mime" "^1" @@ -2772,7 +2966,7 @@ "@types/serve-static@*": version "1.15.2" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.2.tgz#3e5419ecd1e40e7405d34093f10befb43f63381a" + resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz" integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw== dependencies: "@types/http-errors" "*" @@ -2781,22 +2975,22 @@ "@types/stack-utils@^2.0.0": version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" + resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== "@types/strip-bom@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" + resolved "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ== "@types/strip-json-comments@0.0.30": version "0.0.30" - resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" + resolved "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz" integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== "@types/superagent@*": version "4.1.18" - resolved "https://registry.yarnpkg.com/@types/superagent/-/superagent-4.1.18.tgz#e8f037d015cb3b55e64dd00c4d07a84be6d16d34" + resolved "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.18.tgz" integrity sha512-LOWgpacIV8GHhrsQU+QMZuomfqXiqzz3ILLkCtKx3Us6AmomFViuzKT9D693QTKgyut2oCytMG8/efOop+DB+w== dependencies: "@types/cookiejar" "*" @@ -2804,14 +2998,14 @@ "@types/supertest@^2.0.12": version "2.0.12" - resolved "https://registry.yarnpkg.com/@types/supertest/-/supertest-2.0.12.tgz#ddb4a0568597c9aadff8dbec5b2e8fddbe8692fc" + resolved "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.12.tgz" integrity sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ== dependencies: "@types/superagent" "*" "@types/swagger-ui-express@^4.1.3": version "4.1.3" - resolved "https://registry.yarnpkg.com/@types/swagger-ui-express/-/swagger-ui-express-4.1.3.tgz#7adbbbf5343b45869debef1e9ff39c9ba73e380f" + resolved "https://registry.npmjs.org/@types/swagger-ui-express/-/swagger-ui-express-4.1.3.tgz" integrity sha512-jqCjGU/tGEaqIplPy3WyQg+Nrp6y80DCFnDEAvVKWkJyv0VivSSDCChkppHRHAablvInZe6pijDFMnavtN0vqA== dependencies: "@types/express" "*" @@ -2819,52 +3013,40 @@ "@types/uuid@^8.3.4": version "8.3.4" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" + resolved "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz" integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== -"@types/validator@^13.1.3": - version "13.7.17" - resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.7.17.tgz#0a6d1510395065171e3378a4afc587a3aefa7cc1" - integrity sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ== - "@types/validator@^13.11.8": version "13.11.9" resolved "https://registry.yarnpkg.com/@types/validator/-/validator-13.11.9.tgz#adfe96520b437a0eaa798a475877bf2f75ee402d" integrity sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw== -"@types/ws@^7.4.6", "@types/ws@^7.4.7": +"@types/ws@^7.4.7": version "7.4.7" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" + resolved "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz" integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== dependencies: "@types/node" "*" "@types/ws@^8.5.4": version "8.5.4" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" + resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz" integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== dependencies: "@types/node" "*" "@types/yargs-parser@*": version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^17.0.8": version "17.0.24" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz" integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== dependencies: "@types/yargs-parser" "*" -"@types/yauzl@^2.9.1": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" - integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== - dependencies: - "@types/node" "*" - "@typescript-eslint/eslint-plugin@^7.0.1": version "7.0.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.0.1.tgz#407daffe09d964d57aceaf3ac51846359fbe61b0" @@ -2953,14 +3135,14 @@ "@unimodules/core@*": version "7.1.2" - resolved "https://registry.yarnpkg.com/@unimodules/core/-/core-7.1.2.tgz#5181b99586476a5d87afd0958f26a04714c47fa1" + resolved "https://registry.npmjs.org/@unimodules/core/-/core-7.1.2.tgz" integrity sha512-lY+e2TAFuebD3vshHMIRqru3X4+k7Xkba4Wa7QsDBd+ex4c4N2dHAO61E2SrGD9+TRBD8w/o7mzK6ljbqRnbyg== dependencies: compare-versions "^3.4.0" "@unimodules/react-native-adapter@*": version "6.3.9" - resolved "https://registry.yarnpkg.com/@unimodules/react-native-adapter/-/react-native-adapter-6.3.9.tgz#2f4bef6b7532dce5bf9f236e69f96403d0243c30" + resolved "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.3.9.tgz" integrity sha512-i9/9Si4AQ8awls+YGAKkByFbeAsOPgUNeLoYeh2SQ3ddjxJ5ZJDtq/I74clDnpDcn8zS9pYlcDJ9fgVJa39Glw== dependencies: expo-modules-autolinking "^0.0.3" @@ -2968,19 +3150,19 @@ abbrev@1: version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== abort-controller@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== dependencies: event-target-shim "^5.0.0" accepts@^1.3.7, accepts@~1.3.5, accepts@~1.3.7, accepts@~1.3.8: version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== dependencies: mime-types "~2.1.34" @@ -2988,53 +3170,26 @@ accepts@^1.3.7, accepts@~1.3.5, accepts@~1.3.7, accepts@~1.3.8: acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.1.1: version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^8.4.1: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== - -acorn@^8.8.0: - version "8.8.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz" - integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== +acorn@^8.4.1, acorn@^8.8.2, acorn@^8.9.0: + version "8.10.0" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== -acorn@^8.8.2: - version "8.9.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" - integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== - -agent-base@6, agent-base@^6.0.2: +agent-base@6: version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" -agentkeepalive@^4.1.3: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255" - integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg== - dependencies: - debug "^4.1.0" - depd "^2.0.0" - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -3044,7 +3199,7 @@ ajv-formats@^2.1.1: ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -3069,7 +3224,7 @@ anser@^1.4.9: ansi-escapes@^4.2.1: version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" @@ -3090,41 +3245,41 @@ ansi-regex@^4.1.0: ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-regex@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" ansi-styles@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== ansi-styles@^6.1.0: version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -3137,7 +3292,7 @@ appdirsjs@^1.2.4: "aproba@^1.0.3 || ^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== are-we-there-yet@^2.0.0: @@ -3148,34 +3303,26 @@ are-we-there-yet@^2.0.0: delegates "^1.0.0" readable-stream "^3.6.0" -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - arg@^4.1.0: version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^1.0.7: version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-buffer-byte-length@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz" integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== dependencies: call-bind "^1.0.2" @@ -3191,12 +3338,12 @@ array-buffer-byte-length@^1.0.1: array-flatten@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== array-ify@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + resolved "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz" integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== array-includes@^3.1.7: @@ -3220,7 +3367,7 @@ array-index@^1.0.0: array-union@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== array.prototype.filter@^1.0.3: @@ -3265,17 +3412,6 @@ array.prototype.flatmap@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -array.prototype.map@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.5.tgz#6e43c2fee6c0fb5e4806da2dc92eb00970809e55" - integrity sha512-gfaKntvwqYIuC7mLLyv2wzZIJqrRhn5PZ9EfFejSx6a78sV7iDsGpG9P+3oUPtm1Rerqm6nrKS4FYuTIvWfo3g== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - arraybuffer.prototype.slice@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" @@ -3292,17 +3428,17 @@ arraybuffer.prototype.slice@^1.0.2: asap@^2.0.0, asap@~2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + resolved "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== asmcrypto.js@^0.22.0: version "0.22.0" - resolved "https://registry.yarnpkg.com/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz#38fc1440884d802c7bd37d1d23c2b26a5cd5d2d2" + resolved "https://registry.npmjs.org/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz" integrity sha512-usgMoyXjMbx/ZPdzTSXExhMPur2FTdz/Vo5PVx2gIaBcdAAJNOFlsdgqveM8Cff7W0v+xrf9BwjOV26JSAF9qA== asn1js@^3.0.1, asn1js@^3.0.5: version "3.0.5" - resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.5.tgz#5ea36820443dbefb51cc7f88a2ebb5b462114f38" + resolved "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz" integrity sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ== dependencies: pvtsutils "^1.3.2" @@ -3326,19 +3462,26 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== +async-mutex@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.4.1.tgz#bccf55b96f2baf8df90ed798cb5544a1f6ee4c2c" + integrity sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA== + dependencies: + tslib "^2.4.0" + asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== at-least-node@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== available-typed-arrays@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz" integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== available-typed-arrays@^1.0.6: @@ -3348,14 +3491,14 @@ available-typed-arrays@^1.0.6: b64-lite@^1.3.1, b64-lite@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/b64-lite/-/b64-lite-1.4.0.tgz#e62442de11f1f21c60e38b74f111ac0242283d3d" + resolved "https://registry.npmjs.org/b64-lite/-/b64-lite-1.4.0.tgz" integrity sha512-aHe97M7DXt+dkpa8fHlCcm1CnskAHrJqEfMI0KN7dwqlzml/aUe1AGt6lk51HzrSfVD67xOso84sOpr+0wIe2w== dependencies: base-64 "^0.1.0" b64u-lite@^1.0.1: version "1.1.0" - resolved "https://registry.yarnpkg.com/b64u-lite/-/b64u-lite-1.1.0.tgz#a581b7df94cbd4bed7cbb19feae816654f0b1bf0" + resolved "https://registry.npmjs.org/b64u-lite/-/b64u-lite-1.1.0.tgz" integrity sha512-929qWGDVCRph7gQVTC6koHqQIpF4vtVaSbwLltFQo44B1bYUquALswZdBKFfrJCPEnsCOvWkJsPdQYZ/Ukhw8A== dependencies: b64-lite "^1.4.0" @@ -3380,7 +3523,7 @@ babel-jest@^29.7.0: babel-plugin-istanbul@^6.1.1: version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -3399,29 +3542,29 @@ babel-plugin-jest-hoist@^29.6.3: "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz#75044d90ba5043a5fb559ac98496f62f3eb668fd" - integrity sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw== +babel-plugin-polyfill-corejs2@^0.4.4: + version "0.4.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" + integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.4.0" - semver "^6.1.1" + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.4.2" + semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz#39248263c38191f0d226f928d666e6db1b4b3a8a" - integrity sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q== +babel-plugin-polyfill-corejs3@^0.8.2: + version "0.8.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52" + integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.0" - core-js-compat "^3.30.1" + "@babel/helper-define-polyfill-provider" "^0.4.2" + core-js-compat "^3.31.0" -babel-plugin-polyfill-regenerator@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz#e7344d88d9ef18a3c47ded99362ae4a757609380" - integrity sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g== +babel-plugin-polyfill-regenerator@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" + integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.0" + "@babel/helper-define-polyfill-provider" "^0.4.2" babel-plugin-transform-flow-enums@^0.0.2: version "0.0.2" @@ -3432,7 +3575,7 @@ babel-plugin-transform-flow-enums@^0.0.2: babel-preset-current-node-syntax@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" @@ -3458,17 +3601,17 @@ babel-preset-jest@^29.6.3: balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base-64@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" + resolved "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz" integrity sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA== base64-js@*, base64-js@^1.3.0, base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== base64url-universal@^1.1.0: @@ -3492,26 +3635,19 @@ base64url@^3.0.0, base64url@^3.0.1: big-integer@^1.6.51: version "1.6.51" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + resolved "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz" integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== bignumber.js@^9.0.0: version "9.1.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" + resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz" integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== binary-extensions@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bindings@^1.3.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" @@ -3521,14 +3657,14 @@ bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" -bn.js@^5.2.0, bn.js@^5.2.1: +bn.js@^5.2.1: version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== body-parser@1.20.1: version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== dependencies: bytes "3.1.2" @@ -3544,9 +3680,9 @@ body-parser@1.20.1: type-is "~1.6.18" unpipe "1.0.0" -body-parser@^1.20.0: +body-parser@1.20.2, body-parser@^1.20.0: version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz" integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== dependencies: bytes "3.1.2" @@ -3564,7 +3700,7 @@ body-parser@^1.20.0: borc@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/borc/-/borc-3.0.0.tgz#49ada1be84de86f57bb1bb89789f34c186dfa4fe" + resolved "https://registry.npmjs.org/borc/-/borc-3.0.0.tgz" integrity sha512-ec4JmVC46kE0+layfnwM3l15O70MlFiEbmQHY/vpqIKiUtPVntv4BY4NVnz3N4vb21edV3mY97XVckFvYHWF9g== dependencies: bignumber.js "^9.0.0" @@ -3577,7 +3713,7 @@ borc@^3.0.0: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -3585,21 +3721,21 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" braces@^3.0.2, braces@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" -browserslist@^4.21.3, browserslist@^4.21.5: +browserslist@^4.21.9: version "4.21.9" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz" integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== dependencies: caniuse-lite "^1.0.30001503" @@ -3619,29 +3755,24 @@ browserslist@^4.22.2: bs-logger@0.x: version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + resolved "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz" integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== dependencies: fast-json-stable-stringify "2.x" bser@2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@*, buffer@^6.0.0, buffer@^6.0.3: +buffer@*, buffer@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== @@ -3664,54 +3795,12 @@ bytes@3.0.0: bytes@3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== - dependencies: - "@npmcli/fs" "^1.0.0" - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.1" - tar "^6.0.2" - unique-filename "^1.1.1" - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-request@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" - integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== - 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" - call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" @@ -3749,23 +3838,23 @@ callsites@^2.0.0: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== camelcase@^6.2.0: version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== caniuse-lite@^1.0.30001503: - version "1.0.30001507" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001507.tgz#fae53f6286e7564783eadea9b447819410a59534" - integrity sha512-SFpUDoSLCaE5XYL2jfqe9ova/pbQHEmbheDf5r4diNwbAgR3qxM9NQtfsiSscjqoya5K7kFcHPUQ+VsUkIJR4A== + version "1.0.30001515" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz" + integrity sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA== caniuse-lite@^1.0.30001580: version "1.0.30001587" @@ -3774,12 +3863,12 @@ caniuse-lite@^1.0.30001580: canonicalize@^1.0.1: version "1.0.8" - resolved "https://registry.yarnpkg.com/canonicalize/-/canonicalize-1.0.8.tgz#24d1f1a00ed202faafd9bf8e63352cd4450c6df1" + resolved "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz" integrity sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A== chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -3788,7 +3877,7 @@ chalk@^2.0.0, chalk@^2.4.2: chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -3796,12 +3885,12 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: char-regex@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== chokidar@^3.5.1: version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" @@ -3816,7 +3905,7 @@ chokidar@^3.5.1: chownr@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== chrome-launcher@^0.15.2: @@ -3848,28 +3937,19 @@ ci-info@^2.0.0: ci-info@^3.2.0: version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz" integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== cjs-module-lexer@^1.0.0: version "1.2.3" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" + resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== class-transformer@0.5.1: version "0.5.1" - resolved "https://registry.yarnpkg.com/class-transformer/-/class-transformer-0.5.1.tgz#24147d5dffd2a6cea930a3250a677addf96ab336" + resolved "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz" integrity sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw== -class-validator@0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/class-validator/-/class-validator-0.13.1.tgz#381b2001ee6b9e05afd133671fbdf760da7dec67" - integrity sha512-zWIeYFhUitvAHBwNhDdCRK09hWx+P0HUwFE8US8/CxFpMVzkUK8RJl7yOIE+BVu2lxyPNgeOaFv78tLE47jBIg== - dependencies: - "@types/validator" "^13.1.3" - libphonenumber-js "^1.9.7" - validator "^13.5.2" - class-validator@0.14.1: version "0.14.1" resolved "https://registry.yarnpkg.com/class-validator/-/class-validator-0.14.1.tgz#ff2411ed8134e9d76acfeb14872884448be98110" @@ -3879,11 +3959,6 @@ class-validator@0.14.1: libphonenumber-js "^1.10.53" validator "^13.9.0" -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -3907,7 +3982,7 @@ cliui@^6.0.0: cliui@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" @@ -3923,13 +3998,6 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - clone@2.x: version "2.1.2" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" @@ -3942,41 +4010,41 @@ clone@^1.0.2: co@^4.6.0: version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + version "1.0.2" + resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-support@^1.1.2, color-support@^1.1.3: +color-support@^1.1.2: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== colorette@^1.0.7: @@ -3986,7 +4054,7 @@ colorette@^1.0.7: combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" @@ -3998,12 +4066,12 @@ command-exists@^1.2.8: commander@^2.15.0, commander@^2.20.0: version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^7.2.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== commander@^9.4.1: @@ -4018,7 +4086,7 @@ commondir@^1.0.1: compare-func@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz" integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== dependencies: array-ify "^1.0.0" @@ -4026,12 +4094,12 @@ compare-func@^2.0.0: compare-versions@^3.4.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" + resolved "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz" integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== component-emitter@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== compressible@~2.0.16: @@ -4056,7 +4124,7 @@ compression@^1.7.1: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== connect@^3.6.5: @@ -4071,19 +4139,19 @@ connect@^3.6.5: console-control-strings@^1.0.0, console-control-strings@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== content-disposition@0.5.4: version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== conventional-changelog-conventionalcommits@^7.0.2: @@ -4095,12 +4163,12 @@ conventional-changelog-conventionalcommits@^7.0.2: convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== convert-source-map@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== convert-string@0.1.0: @@ -4110,25 +4178,30 @@ convert-string@0.1.0: cookie-signature@1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== cookie@0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookie@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== + cookiejar@^2.1.4: version "2.1.4" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" + resolved "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz" integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== -core-js-compat@^3.30.1: - version "3.31.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.0.tgz#4030847c0766cc0e803dcdfb30055d7ef2064bf1" - integrity sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw== +core-js-compat@^3.31.0: + version "3.32.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.0.tgz#f41574b6893ab15ddb0ac1693681bd56c8550a90" + integrity sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw== dependencies: - browserslist "^4.21.5" + browserslist "^4.21.9" core-util-is@~1.0.0: version "1.0.3" @@ -4137,7 +4210,7 @@ core-util-is@~1.0.0: cors@^2.8.5: version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== dependencies: object-assign "^4" @@ -4168,24 +4241,24 @@ create-jest@^29.7.0: create-require@^1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== credentials-context@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/credentials-context/-/credentials-context-2.0.0.tgz#68a9a1a88850c398d3bba4976c8490530af093e8" + resolved "https://registry.npmjs.org/credentials-context/-/credentials-context-2.0.0.tgz" integrity sha512-/mFKax6FK26KjgV2KW2D4YqKgoJ5DVJpNt87X2Jc9IxT2HBMy7nEIlc+n7pEi+YFFe721XqrvZPd+jbyyBjsvQ== cross-fetch@^3.1.5: version "3.1.6" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.6.tgz#bae05aa31a4da760969756318feeee6e70f15d6c" + resolved "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz" integrity sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g== dependencies: node-fetch "^2.6.11" cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -4212,7 +4285,7 @@ d@1, d@^1.0.1: data-uri-to-buffer@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz#594b8973938c5bc2c33046535785341abc4f3636" + resolved "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz" integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== data-uri-to-buffer@^4.0.0: @@ -4227,21 +4300,21 @@ dayjs@^1.8.15: debug@2.6.9, debug@^2.2.0, debug@^2.6.9: version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" debug@^3.1.0, debug@^3.2.7: version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" @@ -4253,16 +4326,9 @@ decamelize@^1.2.0: decode-uri-component@^0.2.2: version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - dedent@^1.0.0: version "1.5.1" resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" @@ -4270,12 +4336,12 @@ dedent@^1.0.0: deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2, deepmerge@^4.3.0: version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== defaults@^1.0.3: @@ -4285,11 +4351,6 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - define-data-property@^1.0.1, define-data-property@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.3.tgz#281845e04737d709c2de99e278546189b65d3055" @@ -4302,7 +4363,7 @@ define-data-property@^1.0.1, define-data-property@^1.1.2: define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz" integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== dependencies: has-property-descriptors "^1.0.0" @@ -4319,12 +4380,12 @@ define-properties@^1.2.1: delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== delegates@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== denodeify@^1.2.1: @@ -4332,9 +4393,9 @@ denodeify@^1.2.1: resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" integrity sha512-KNTihKNmQENUZeKu5fzfpzRqR5S2VMp4gl9RFHiWzj9DfvYQPMJ6XHKNaQxaGCXwPk6y9yme3aUoaiAe+KX+vg== -depd@2.0.0, depd@^2.0.0: +depd@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== deprecated-react-native-prop-types@^5.0.0: @@ -4348,7 +4409,7 @@ deprecated-react-native-prop-types@^5.0.0: destroy@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-libc@^2.0.0: @@ -4358,32 +4419,22 @@ detect-libc@^2.0.0: detect-newline@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== dezalgo@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" + resolved "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz" integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== dependencies: asap "^2.0.0" wrappy "1" -did-resolver@^3.1.3: - version "3.2.2" - resolved "https://registry.yarnpkg.com/did-resolver/-/did-resolver-3.2.2.tgz#6f4e252a810f785d1b28a10265fad6dffee25158" - integrity sha512-Eeo2F524VM5N3W4GwglZrnul2y6TLTwMQP3In62JdG34NZoqihYyOZLk+5wUW8sSgvIYIcJM8Dlt3xsdKZZ3tg== - did-resolver@^4.0.0, did-resolver@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/did-resolver/-/did-resolver-4.1.0.tgz#740852083c4fd5bf9729d528eca5d105aff45eb6" + resolved "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz" integrity sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA== -diff-sequences@^29.4.3: - version "29.4.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" - integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== - diff-sequences@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" @@ -4391,47 +4442,47 @@ diff-sequences@^29.6.3: diff@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" doctrine@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" dot-prop@^5.1.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== dependencies: is-obj "^2.0.0" dynamic-dedupe@^0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz#06e44c223f5e4e94d78ef9db23a6515ce2f962a1" + resolved "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz" integrity sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ== dependencies: xtend "^4.0.0" eastasianwidth@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== ed25519-signature-2018-context@^1.1.0: @@ -4446,13 +4497,13 @@ ed25519-signature-2020-context@^1.0.1: ee-first@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.431: - version "1.4.439" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.439.tgz#d0748e8128c18f92354d3412dfb2104c3fb90e8f" - integrity sha512-BHpErPSNhb9FB25+OwQP6mCAf3ZXfGbmuvc4LzBNVJwpCcXQJm++LerimocYRG9FRxUVRKZqaB7d0+pImSTPSg== + version "1.4.459" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.459.tgz" + integrity sha512-XXRS5NFv8nCrBL74Rm3qhJjA2VCsRFx0OjHKBMPI0otij56aun8UWiKTDABmd5/7GTR021pA4wivs+Ri6XCElg== electron-to-chromium@^1.4.648: version "1.4.667" @@ -4461,64 +4512,40 @@ electron-to-chromium@^1.4.648: emittery@^0.13.1: version "0.13.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz" integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== encodeurl@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -encoding@^0.1.12: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - enhanced-resolve@^5.12.0: version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz" integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - envinfo@^7.10.0: version "7.11.1" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.11.1.tgz#2ffef77591057081b0129a8fd8cf6118da1b94e1" integrity sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg== -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" @@ -4538,46 +4565,6 @@ errorhandler@^1.5.1: accepts "~1.3.7" escape-html "~1.0.3" -es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.21.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" - integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== - dependencies: - array-buffer-byte-length "^1.0.0" - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.0" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.10" - is-weakref "^1.0.2" - object-inspect "^1.12.3" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.9" - es-abstract@^1.22.1, es-abstract@^1.22.3: version "1.22.3" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" @@ -4623,22 +4610,9 @@ es-abstract@^1.22.1, es-abstract@^1.22.3: unbox-primitive "^1.0.2" which-typed-array "^1.1.13" -es-aggregate-error@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/es-aggregate-error/-/es-aggregate-error-1.0.9.tgz#b50925cdf78c8a634bd766704f6f7825902be3d9" - integrity sha512-fvnX40sb538wdU6r4s35cq4EY6Lr09Upj40BEVem4LEsuW8XgQep9yD5Q1U2KftokNp1rWODFJ2qwZSsAjFpbg== - dependencies: - define-properties "^1.1.4" - es-abstract "^1.20.4" - function-bind "^1.1.1" - functions-have-names "^1.2.3" - get-intrinsic "^1.1.3" - globalthis "^1.0.3" - has-property-descriptors "^1.0.0" - es-array-method-boxes-properly@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + resolved "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-define-property@^1.0.0: @@ -4653,24 +4627,9 @@ es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-get-iterator@^1.0.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" - integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - is-arguments "^1.1.1" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.7" - isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" - es-set-tostringtag@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz" integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== dependencies: get-intrinsic "^1.1.3" @@ -4679,7 +4638,7 @@ es-set-tostringtag@^2.0.1: es-shim-unscopables@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz" integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== dependencies: has "^1.0.3" @@ -4693,7 +4652,7 @@ es-shim-unscopables@^1.0.2: es-to-primitive@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" @@ -4729,27 +4688,27 @@ es6-symbol@^3.0.2, es6-symbol@^3.1.1, es6-symbol@^3.1.3: escalade@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-html@~1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escodegen@^1.8.1: @@ -4793,7 +4752,7 @@ eslint-import-resolver-typescript@^3.6.1: eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0: version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz" integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== dependencies: debug "^3.2.7" @@ -4831,7 +4790,7 @@ eslint-plugin-prettier@^5.1.3: eslint-scope@^7.2.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz" integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== dependencies: esrecurse "^4.3.0" @@ -4839,18 +4798,18 @@ eslint-scope@^7.2.0: eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: version "3.4.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz" integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== eslint@^8.43.0: - version "8.43.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.43.0.tgz#3e8c6066a57097adfd9d390b8fc93075f257a094" - integrity sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q== + version "8.44.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz" + integrity sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.0.3" - "@eslint/js" "8.43.0" + "@eslint/eslintrc" "^2.1.0" + "@eslint/js" "8.44.0" "@humanwhocodes/config-array" "^0.11.10" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" @@ -4862,7 +4821,7 @@ eslint@^8.43.0: escape-string-regexp "^4.0.0" eslint-scope "^7.2.0" eslint-visitor-keys "^3.4.1" - espree "^9.5.2" + espree "^9.6.0" esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -4882,7 +4841,7 @@ eslint@^8.43.0: lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" + optionator "^0.9.3" strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" @@ -4897,12 +4856,12 @@ esniff@^2.0.1: event-emitter "^0.3.5" type "^2.7.2" -espree@^9.5.2: - version "9.5.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b" - integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== +espree@^9.6.0: + version "9.6.0" + resolved "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz" + integrity sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A== dependencies: - acorn "^8.8.0" + acorn "^8.9.0" acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" @@ -4913,41 +4872,41 @@ esprima@1.2.2: esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.2: version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.2.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== etag@~1.8.1: version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== event-emitter@^0.3.5: @@ -4960,12 +4919,12 @@ event-emitter@^0.3.5: event-target-shim@^5.0.0, event-target-shim@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== execa@^5.0.0, execa@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -4980,7 +4939,7 @@ execa@^5.0.0, execa@^5.1.1: exit@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== expect@^29.0.0: @@ -5007,7 +4966,7 @@ expect@^29.7.0: expo-modules-autolinking@^0.0.3: version "0.0.3" - resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-0.0.3.tgz#45ba8cb1798f9339347ae35e96e9cc70eafb3727" + resolved "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.0.3.tgz" integrity sha512-azkCRYj/DxbK4udDuDxA9beYzQTwpJ5a9QA0bBgha2jHtWdFGF4ZZWSY+zNA5mtU3KqzYt8jWHfoqgSvKyu1Aw== dependencies: chalk "^4.1.0" @@ -5018,14 +4977,14 @@ expo-modules-autolinking@^0.0.3: expo-random@*: version "13.1.1" - resolved "https://registry.yarnpkg.com/expo-random/-/expo-random-13.1.1.tgz#15e781911d5db4fbcee75e26ac109bc2523fe00c" + resolved "https://registry.npmjs.org/expo-random/-/expo-random-13.1.1.tgz" integrity sha512-+KkhGp7xW45GvMRzlcSOzvDwzTgyXo6C84GaG4GI43rOdECBQ2lGUJ12st39OtfZm1lORNskpi66DjnuJ73g9w== dependencies: base64-js "^1.3.0" express@^4.17.1, express@^4.18.1: version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz" integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== dependencies: accepts "~1.3.8" @@ -5060,6 +5019,43 @@ express@^4.17.1, express@^4.18.1: utils-merge "1.0.1" vary "~1.1.2" +express@^4.18.3: + version "4.19.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" + integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.2" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.6.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" + ext@^1.1.2: version "1.7.0" resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" @@ -5067,25 +5063,14 @@ ext@^1.1.2: dependencies: type "^2.7.2" -extract-zip@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - dependencies: - debug "^4.1.1" - get-stream "^5.1.0" - yauzl "^2.10.0" - optionalDependencies: - "@types/yauzl" "^2.9.1" - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-diff@^1.1.2: version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== fast-glob@^3.2.5, fast-glob@^3.2.9: @@ -5112,28 +5097,28 @@ fast-glob@^3.3.1: fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-safe-stringify@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== fast-text-encoding@^1.0.3: version "1.0.6" - resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz#0aa25f7f638222e3396d72bf936afcf1d42d6867" + resolved "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz" integrity sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w== fast-xml-parser@^4.0.12: - version "4.2.5" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz#a6747a09296a6cb34f2ae634019bf1738f3b421f" - integrity sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g== + version "4.2.6" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.2.6.tgz#30ad37b014c16e31eec0e01fbf90a85cedb4eacf" + integrity sha512-Xo1qV++h/Y3Ng8dphjahnYe+rGHaaNdsYOBWL9Y9GCPKpNKilJtilvWkLcI9f9X2DoKTLsZsGYAls5+JL5jfLA== dependencies: strnum "^1.0.5" @@ -5146,28 +5131,21 @@ fast-xml-parser@^4.2.4: fastq@^1.6.0: version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" fb-watchman@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz" integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: bser "2.1.1" -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== - dependencies: - pend "~1.2.0" - fetch-blob@^2.1.1: version "2.1.2" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-2.1.2.tgz#a7805db1361bd44c1ef62bb57fb5fe8ea173ef3c" + resolved "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz" integrity sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow== fetch-blob@^3.1.2, fetch-blob@^3.1.4: @@ -5178,40 +5156,23 @@ fetch-blob@^3.1.2, fetch-blob@^3.1.4: node-domexception "^1.0.0" web-streams-polyfill "^3.0.3" -ffi-napi@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/ffi-napi/-/ffi-napi-4.0.3.tgz#27a8d42a8ea938457154895c59761fbf1a10f441" - integrity sha512-PMdLCIvDY9mS32RxZ0XGb95sonPRal8aqRhLbeEtWKZTe2A87qRFG9HjOhvG8EX2UmQw5XNRMIOT+1MYlWmdeg== - dependencies: - debug "^4.1.1" - get-uv-event-loop-napi-h "^1.0.5" - node-addon-api "^3.0.0" - node-gyp-build "^4.2.1" - ref-napi "^2.0.1 || ^3.0.2" - ref-struct-di "^1.1.0" - file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" filter-obj@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" + resolved "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz" integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== finalhandler@1.1.2: @@ -5229,7 +5190,7 @@ finalhandler@1.1.2: finalhandler@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== dependencies: debug "2.6.9" @@ -5258,7 +5219,7 @@ find-up@^3.0.0: find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" @@ -5266,7 +5227,7 @@ find-up@^4.0.0, find-up@^4.1.0: find-up@^5.0.0, find-up@~5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -5283,7 +5244,7 @@ fix-esm@^1.0.1: flat-cache@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: flatted "^3.1.0" @@ -5291,7 +5252,7 @@ flat-cache@^3.0.4: flatted@^3.1.0: version "3.2.7" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== flow-enums-runtime@^0.0.6: @@ -5300,9 +5261,9 @@ flow-enums-runtime@^0.0.6: integrity sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw== flow-parser@0.*: - version "0.210.1" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.210.1.tgz#6e04775dc2ebd5bde6a37de38532836678a5ac3e" - integrity sha512-M0SdOwD0wZHhk6K/AOaPReBnw2vB7p9KUFUFZHJRsU3ZMl/+WVrMpmb8AfEM6GXZ5mEssCx9vHugxxJg1ieoew== + version "0.213.1" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.213.1.tgz#c1916465050b165c9d8b931c02d78fe582e6c20c" + integrity sha512-l+vyZO6hrWG60DredryA8mq62fK9vxL6/RR13HA/aVLBNh9No/wEJsKI+CJqPRkF4CIRUfcJQBeaMXSKcncxUQ== flow-parser@^0.206.0: version "0.206.0" @@ -5311,14 +5272,14 @@ flow-parser@^0.206.0: for-each@^0.3.3: version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== dependencies: is-callable "^1.1.3" foreground-child@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz" integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== dependencies: cross-spawn "^7.0.0" @@ -5326,7 +5287,7 @@ foreground-child@^3.1.0: form-data@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + resolved "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== dependencies: asynckit "^0.4.0" @@ -5335,7 +5296,7 @@ form-data@^3.0.0: form-data@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" @@ -5351,7 +5312,7 @@ formdata-polyfill@^4.0.10: formidable@^2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/formidable/-/formidable-2.1.2.tgz#fa973a2bec150e4ce7cac15589d7a25fc30ebd89" + resolved "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz" integrity sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g== dependencies: dezalgo "^1.0.4" @@ -5361,14 +5322,23 @@ formidable@^2.1.2: forwarded@0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fresh@0.5.2: version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== +fs-extra@^11.2.0: + version "11.2.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" + integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -5380,7 +5350,7 @@ fs-extra@^8.1.0: fs-extra@^9.1.0: version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== dependencies: at-least-node "^1.0.0" @@ -5390,24 +5360,24 @@ fs-extra@^9.1.0: fs-minipass@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@^2.3.2, fsevents@~2.3.2: version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== function-bind@^1.1.2: @@ -5415,16 +5385,6 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - function.prototype.name@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" @@ -5435,9 +5395,9 @@ function.prototype.name@^1.1.6: es-abstract "^1.22.1" functions-have-names "^1.2.3" -functions-have-names@^1.2.2, functions-have-names@^1.2.3: +functions-have-names@^1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== gauge@^3.0.0: @@ -5455,33 +5415,19 @@ gauge@^3.0.0: strip-ansi "^6.0.1" wide-align "^1.1.2" -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - 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" - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz" integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== dependencies: function-bind "^1.1.1" @@ -5502,24 +5448,17 @@ get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@ get-package-type@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - get-stream@^6.0.0: version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== get-symbol-description@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz" integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== dependencies: call-bind "^1.0.2" @@ -5527,38 +5466,38 @@ get-symbol-description@^1.0.0: get-symbol-from-current-process-h@^1.0.1, get-symbol-from-current-process-h@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/get-symbol-from-current-process-h/-/get-symbol-from-current-process-h-1.0.2.tgz#510af52eaef873f7028854c3377f47f7bb200265" + resolved "https://registry.npmjs.org/get-symbol-from-current-process-h/-/get-symbol-from-current-process-h-1.0.2.tgz" integrity sha512-syloC6fsCt62ELLrr1VKBM1ggOpMdetX9hTrdW77UQdcApPHLmf7CI7OKcN1c9kYuNxKcDe4iJ4FY9sX3aw2xw== get-tsconfig@^4.5.0: version "4.6.2" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.6.2.tgz#831879a5e6c2aa24fe79b60340e2233a1e0f472e" + resolved "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.6.2.tgz" integrity sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg== dependencies: resolve-pkg-maps "^1.0.0" get-uv-event-loop-napi-h@^1.0.5: version "1.0.6" - resolved "https://registry.yarnpkg.com/get-uv-event-loop-napi-h/-/get-uv-event-loop-napi-h-1.0.6.tgz#42b0b06b74c3ed21fbac8e7c72845fdb7a200208" + resolved "https://registry.npmjs.org/get-uv-event-loop-napi-h/-/get-uv-event-loop-napi-h-1.0.6.tgz" integrity sha512-t5c9VNR84nRoF+eLiz6wFrEp1SE2Acg0wS+Ysa2zF0eROes+LzOfuTaVHxGy8AbS8rq7FHEJzjnCZo1BupwdJg== dependencies: get-symbol-from-current-process-h "^1.0.1" glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" -glob@^10.3.7: +glob@^10.3.10, glob@^10.3.7: version "10.3.10" resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== @@ -5569,9 +5508,9 @@ glob@^10.3.7: minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-scurry "^1.10.1" -glob@^7.0.5, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.1.1, glob@^7.1.3, glob@^7.1.4: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -5583,26 +5522,26 @@ glob@^7.0.5, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: globals@^11.1.0: version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: version "13.20.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz" integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== dependencies: type-fest "^0.20.2" globalthis@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz" integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== dependencies: define-properties "^1.1.3" globby@^11.1.0: version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -5614,45 +5553,28 @@ globby@^11.1.0: gopd@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== dependencies: get-intrinsic "^1.1.3" -got@^11.8.5: - version "11.8.6" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - 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" - -graceful-fs@^4.1.11, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: +graceful-fs@^4.1.11, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== graphemer@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -handlebars@^4.7.7: - version "4.7.7" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" - integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== +handlebars@^4.7.8: + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== dependencies: minimist "^1.2.5" - neo-async "^2.6.0" + neo-async "^2.6.2" source-map "^0.6.1" wordwrap "^1.0.0" optionalDependencies: @@ -5660,22 +5582,22 @@ handlebars@^4.7.7: has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz" integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz" integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== dependencies: get-intrinsic "^1.1.1" @@ -5689,17 +5611,17 @@ has-property-descriptors@^1.0.1: has-proto@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-tostringtag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: has-symbols "^1.0.2" @@ -5713,12 +5635,12 @@ has-tostringtag@^1.0.1: has-unicode@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== has@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" @@ -5763,7 +5685,7 @@ hermes-profile-transformer@^0.0.6: hexoid@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/hexoid/-/hexoid-1.0.0.tgz#ad10c6573fb907de23d9ec63a711267d9dc9bc18" + resolved "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz" integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: @@ -5773,24 +5695,14 @@ hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: dependencies: react-is "^16.7.0" -hpagent@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/hpagent/-/hpagent-0.1.2.tgz#cab39c66d4df2d4377dbd212295d878deb9bdaa9" - integrity sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ== - html-escaper@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== http-errors@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -5799,26 +5711,9 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - https-proxy-agent@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" @@ -5826,38 +5721,24 @@ https-proxy-agent@^5.0.0: human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - iconv-lite@0.4.24: version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.2.0: version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== ignore@^5.2.4: @@ -5887,7 +5768,7 @@ import-fresh@^2.0.0: import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -5895,7 +5776,7 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: import-local@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: pkg-dir "^4.2.0" @@ -5903,31 +5784,12 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -indy-sdk@^1.16.0-dev-1636: - version "1.16.0-dev-1655" - resolved "https://registry.yarnpkg.com/indy-sdk/-/indy-sdk-1.16.0-dev-1655.tgz#098c38df4a6eb4e13f89c0b86ebe9636944b71e0" - integrity sha512-MSWRY8rdnGAegs4v4AnzE6CT9O/3JBMUiE45I0Ihj2DMuH+XS1EJZUQEJsyis6aOQzRavv/xVtaBC8o+6azKuw== - dependencies: - bindings "^1.3.1" - nan "^2.11.1" - node-gyp "^8.0.0" - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -5935,12 +5797,12 @@ inflight@^1.0.4: inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -internal-slot@^1.0.4, internal-slot@^1.0.5: +internal-slot@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz" integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== dependencies: get-intrinsic "^1.2.0" @@ -5949,7 +5811,7 @@ internal-slot@^1.0.4, internal-slot@^1.0.5: invariant@^2.2.4: version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" @@ -5959,27 +5821,14 @@ ip@^1.1.5: resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.9.tgz#8dfbcc99a754d07f425310b86a99546b1151e396" integrity sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ== -ip@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105" - integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ== - ipaddr.js@1.9.1: version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz" integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== dependencies: call-bind "^1.0.2" @@ -5996,26 +5845,26 @@ is-array-buffer@^3.0.4: is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-bigint@^1.0.1: version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== dependencies: has-bigints "^1.0.1" is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-boolean-object@^1.1.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: call-bind "^1.0.2" @@ -6023,7 +5872,7 @@ is-boolean-object@^1.1.0: is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-core-module@^2.11.0: @@ -6049,7 +5898,7 @@ is-core-module@^2.9.0: is-date-object@^1.0.1: version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== dependencies: has-tostringtag "^1.0.0" @@ -6061,12 +5910,12 @@ is-directory@^0.3.1: is-docker@^2.0.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^2.0.0: @@ -6076,17 +5925,17 @@ is-fullwidth-code-point@^2.0.0: is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-generator-fn@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" @@ -6096,41 +5945,31 @@ is-interactive@^1.0.0: resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -is-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - is-negative-zero@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-number-object@^1.0.4: version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz" integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: has-tostringtag "^1.0.0" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-obj@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== is-path-inside@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== is-plain-object@^2.0.4: @@ -6142,46 +5981,41 @@ is-plain-object@^2.0.4: is-regex@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-set@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - is-shared-array-buffer@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz" integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== dependencies: call-bind "^1.0.2" is-stream@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== dependencies: has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: has-symbols "^1.0.2" is-typed-array@^1.1.10, is-typed-array@^1.1.9: version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz" integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== dependencies: available-typed-arrays "^1.0.5" @@ -6204,11 +6038,16 @@ is-unicode-supported@^0.1.0: is-weakref@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz" integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== dependencies: call-bind "^1.0.2" +is-what@^4.1.8: + version "4.1.16" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-4.1.16.tgz#1ad860a19da8b4895ad5495da3182ce2acdd7a6f" + integrity sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A== + is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" @@ -6216,14 +6055,14 @@ is-wsl@^1.1.0: is-wsl@^2.1.1, is-wsl@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== dependencies: is-docker "^2.0.0" isarray@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== isarray@~1.0.0: @@ -6233,12 +6072,12 @@ isarray@~1.0.0: isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== iso-url@^1.1.5: version "1.2.1" - resolved "https://registry.yarnpkg.com/iso-url/-/iso-url-1.2.1.tgz#db96a49d8d9a64a1c889fc07cc525d093afb1811" + resolved "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz" integrity sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng== isobject@^3.0.1: @@ -6248,7 +6087,7 @@ isobject@^3.0.1: isomorphic-webcrypto@^2.3.8: version "2.3.8" - resolved "https://registry.yarnpkg.com/isomorphic-webcrypto/-/isomorphic-webcrypto-2.3.8.tgz#4a7493b486ef072b9f11b6f8fd66adde856e3eec" + resolved "https://registry.npmjs.org/isomorphic-webcrypto/-/isomorphic-webcrypto-2.3.8.tgz" integrity sha512-XddQSI0WYlSCjxtm1AI8kWQOulf7hAN3k3DclF1sxDJZqOe0pcsOt675zvWW91cZH9hYs3nlA3Ev8QK5i80SxQ== dependencies: "@peculiar/webcrypto" "^1.0.22" @@ -6266,12 +6105,12 @@ isomorphic-webcrypto@^2.3.8: istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== istanbul-lib-instrument@^5.0.4: version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: "@babel/core" "^7.12.3" @@ -6293,7 +6132,7 @@ istanbul-lib-instrument@^6.0.0: istanbul-lib-report@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== dependencies: istanbul-lib-coverage "^3.0.0" @@ -6302,7 +6141,7 @@ istanbul-lib-report@^3.0.0: istanbul-lib-source-maps@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== dependencies: debug "^4.1.1" @@ -6311,25 +6150,12 @@ istanbul-lib-source-maps@^4.0.0: istanbul-reports@^3.1.3: version "3.1.5" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -iterate-iterator@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.2.tgz#551b804c9eaa15b847ea6a7cdc2f5bf1ec150f91" - integrity sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw== - -iterate-value@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/iterate-value/-/iterate-value-1.0.2.tgz#935115bd37d006a52046535ebc8d07e9c9337f57" - integrity sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ== - dependencies: - es-get-iterator "^1.0.2" - iterate-iterator "^1.0.1" - jackspeak@^2.3.5: version "2.3.6" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" @@ -6419,16 +6245,6 @@ jest-config@^29.7.0: slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63" - integrity sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.4.3" - jest-get-type "^29.4.3" - pretty-format "^29.5.0" - jest-diff@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" @@ -6471,7 +6287,7 @@ jest-environment-node@^29.6.3, jest-environment-node@^29.7.0: jest-get-type@^29.4.3: version "29.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" + resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz" integrity sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg== jest-get-type@^29.6.3: @@ -6506,17 +6322,7 @@ jest-leak-detector@^29.7.0: jest-get-type "^29.6.3" pretty-format "^29.7.0" -jest-matcher-utils@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5" - integrity sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw== - dependencies: - chalk "^4.0.0" - jest-diff "^29.5.0" - jest-get-type "^29.4.3" - pretty-format "^29.5.0" - -jest-matcher-utils@^29.7.0: +jest-matcher-utils@^29.5.0, jest-matcher-utils@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== @@ -6567,7 +6373,7 @@ jest-mock@^29.7.0: jest-pnp-resolver@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz" integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== jest-regex-util@^29.6.3: @@ -6679,19 +6485,19 @@ jest-snapshot@^29.7.0: pretty-format "^29.7.0" semver "^7.5.3" -jest-util@^29.0.0, jest-util@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" - integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== +jest-util@^29.0.0: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.6.1.tgz" + integrity sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.1" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-util@^29.7.0: +jest-util@^29.5.0, jest-util@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== @@ -6762,12 +6568,12 @@ joi@^17.2.1: "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" @@ -6775,7 +6581,7 @@ js-yaml@^3.13.1: js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" @@ -6817,7 +6623,7 @@ jscodeshift@^0.14.0: jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@~0.5.0: @@ -6825,11 +6631,6 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -6837,12 +6638,12 @@ json-parse-better-errors@^1.0.1: json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: @@ -6852,26 +6653,26 @@ json-schema-traverse@^1.0.0: json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json-text-sequence@~0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/json-text-sequence/-/json-text-sequence-0.3.0.tgz#6603e0ee45da41f949669fd18744b97fb209e6ce" + resolved "https://registry.npmjs.org/json-text-sequence/-/json-text-sequence-0.3.0.tgz" integrity sha512-7khKIYPKwXQem4lWXfpIN/FEnhztCeRPSxH4qm3fVlqulwujrRDD54xAwDDn/qVKpFtV550+QAkcWJcufzqQuA== dependencies: "@sovpro/delimited-stream" "^1.1.0" json5@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" json5@^2.2.2, json5@^2.2.3: version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonfile@^4.0.0: @@ -6883,7 +6684,7 @@ jsonfile@^4.0.0: jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" @@ -6923,13 +6724,6 @@ jwt-decode@^3.1.2: resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-3.1.2.tgz#3fb319f3675a2df0c2895c8f5e9fa4b67b04ed59" integrity sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A== -keyv@^4.0.0: - version "4.5.2" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" - integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== - dependencies: - json-buffer "3.0.1" - kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" @@ -6937,7 +6731,7 @@ kind-of@^6.0.2: kleur@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== ky-universal@^0.11.0: @@ -6950,7 +6744,7 @@ ky-universal@^0.11.0: ky-universal@^0.8.2: version "0.8.2" - resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.8.2.tgz#edc398d54cf495d7d6830aa1ab69559a3cc7f824" + resolved "https://registry.npmjs.org/ky-universal/-/ky-universal-0.8.2.tgz" integrity sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ== dependencies: abort-controller "^3.0.0" @@ -6958,7 +6752,7 @@ ky-universal@^0.8.2: ky@^0.25.1: version "0.25.1" - resolved "https://registry.yarnpkg.com/ky/-/ky-0.25.1.tgz#0df0bd872a9cc57e31acd5dbc1443547c881bfbc" + resolved "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz" integrity sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA== ky@^0.33.3: @@ -6968,12 +6762,12 @@ ky@^0.33.3: leven@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== levn@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -6992,11 +6786,6 @@ libphonenumber-js@^1.10.53: resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.10.55.tgz#ec864e369bf7babde02021d06b5f2433d7e9c78e" integrity sha512-MrTg2JFLscgmTY6/oT9vopYETlgUls/FU6OaeeamGwk4LFxjIgOUML/ZSZICgR0LPYXaonVJo40lzMvaaTJlQA== -libphonenumber-js@^1.9.7: - version "1.10.36" - resolved "https://registry.yarnpkg.com/libphonenumber-js/-/libphonenumber-js-1.10.36.tgz#ec74008ffbc488d7ad9ebd722b2773292d568033" - integrity sha512-NCPWES1poiS4NSzIS49mxHM5hCkSWov8wFICRKfL9narzimqAXlnAgNloHCt0BukZHbWt8TIStCdzLy7LXBYpQ== - lighthouse-logger@^1.0.0: version "1.4.2" resolved "https://registry.yarnpkg.com/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz#aef90f9e97cd81db367c7634292ee22079280aaa" @@ -7007,7 +6796,7 @@ lighthouse-logger@^1.0.0: lines-and-columns@^1.1.6: version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== locate-path@^3.0.0: @@ -7020,23 +6809,18 @@ locate-path@^3.0.0: locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== - lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -7044,12 +6828,12 @@ lodash.debounce@^4.0.8: lodash.memoize@4.x: version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.throttle@^4.1.1: @@ -7076,48 +6860,38 @@ logkitty@^0.7.1: loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" "lru-cache@^9.1.1 || ^10.0.0": version "10.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz" integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw== lru_map@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.4.1.tgz#f7b4046283c79fb7370c36f8fca6aee4324b0a98" + resolved "https://registry.npmjs.org/lru_map/-/lru_map-0.4.1.tgz" integrity sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg== -luxon@^1.27.0: - version "1.28.1" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.28.1.tgz#528cdf3624a54506d710290a2341aa8e6e6c61b0" - integrity sha512-gYHAa180mKrNIUJCbwpmD0aTu9kV0dREDrwNnuyFAsO1Wt0EVYSZelPnJlbj9HplzXX/YWXHFTL45kvZ53M0pw== - luxon@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.3.0.tgz#d73ab5b5d2b49a461c47cedbc7e73309b4805b48" + resolved "https://registry.npmjs.org/luxon/-/luxon-3.3.0.tgz" integrity sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg== make-dir@^2.0.0, make-dir@^2.1.0: @@ -7130,41 +6904,19 @@ make-dir@^2.0.0, make-dir@^2.1.0: make-dir@^3.0.0, make-dir@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" make-error@1.x, make-error@^1.1.1, make-error@^1.3.6: version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - dependencies: - agentkeepalive "^4.1.3" - cacache "^15.2.0" - http-cache-semantics "^4.1.0" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^6.0.0" - minipass "^3.1.3" - minipass-collect "^1.0.2" - minipass-fetch "^1.3.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.2" - promise-retry "^2.0.1" - socks-proxy-agent "^6.0.0" - ssri "^8.0.0" - makeerror@1.0.12: version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== dependencies: tmpl "1.0.5" @@ -7176,7 +6928,7 @@ marky@^1.2.2: media-typer@0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memoize-one@^5.0.0: @@ -7184,29 +6936,31 @@ memoize-one@^5.0.0: resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== +merge-anything@^5.1.4: + version "5.1.7" + resolved "https://registry.yarnpkg.com/merge-anything/-/merge-anything-5.1.7.tgz#94f364d2b0cf21ac76067b5120e429353b3525d7" + integrity sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ== + dependencies: + is-what "^4.1.8" + merge-descriptors@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -merge@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" - integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== - methods@^1.1.2, methods@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== metro-babel-transformer@0.80.5: @@ -7395,50 +7149,40 @@ metro@0.80.5, metro@^0.80.3: micromatch@^4.0.4: version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" picomatch "^2.3.1" -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2", mime-db@^1.52.0: version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mime@1.6.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@2.6.0, mime@^2.4.1: version "2.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -minimatch@9.0.3: +minimatch@9.0.3, minimatch@^9.0.1: version "9.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== @@ -7447,72 +7191,26 @@ minimatch@9.0.3: minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimatch@^9.0.1: - version "9.0.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.2.tgz#397e387fff22f6795844d00badc903a3d5de7057" - integrity sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg== - dependencies: - brace-expansion "^2.0.1" - minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-fetch@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: +minipass@^3.0.0: version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" minipass@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== "minipass@^5.0.0 || ^6.0.2 || ^7.0.0": @@ -7520,9 +7218,9 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== -minizlib@^2.0.0, minizlib@^2.1.1: +minizlib@^2.1.1: version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== dependencies: minipass "^3.0.0" @@ -7537,34 +7235,29 @@ mkdirp@^0.5.1: mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== ms@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.2: +ms@2.1.2, ms@^2.1.1: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.0.0, ms@^2.1.1: +ms@2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== msrcrypto@^1.5.6: version "1.5.8" - resolved "https://registry.yarnpkg.com/msrcrypto/-/msrcrypto-1.5.8.tgz#be419be4945bf134d8af52e9d43be7fa261f4a1c" + resolved "https://registry.npmjs.org/msrcrypto/-/msrcrypto-1.5.8.tgz" integrity sha512-ujZ0TRuozHKKm6eGbKHfXef7f+esIhEckmThVnz7RNyiOJd7a6MXj2JGBoL9cnPDW+JMG16MoTUh5X+XXjI66Q== -nan@^2.11.1: - version "2.17.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" - integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== - nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" @@ -7572,17 +7265,17 @@ nanoid@^3.3.7: natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -negotiator@0.6.3, negotiator@^0.6.2: +negotiator@0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -neo-async@^2.5.0, neo-async@^2.6.0: +neo-async@^2.5.0, neo-async@^2.6.2: version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== next-tick@^1.1.0: @@ -7590,20 +7283,6 @@ next-tick@^1.1.0: resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== -ngrok@^4.3.1: - version "4.3.3" - resolved "https://registry.yarnpkg.com/ngrok/-/ngrok-4.3.3.tgz#c51a1c4af2271ac3c9092ede3b0975caf7833217" - integrity sha512-a2KApnkiG5urRxBPdDf76nNBQTnNNWXU0nXw0SsqsPI+Kmt2lGf9TdVYpYrHMnC+T9KhcNSWjCpWqBgC6QcFvw== - dependencies: - "@types/node" "^8.10.50" - extract-zip "^2.0.1" - got "^11.8.5" - lodash.clonedeep "^4.5.0" - uuid "^7.0.0 || ^8.0.0" - yaml "^1.10.0" - optionalDependencies: - hpagent "^0.1.2" - nocache@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/nocache/-/nocache-3.0.4.tgz#5b37a56ec6e09fc7d401dceaed2eab40c8bfdf79" @@ -7616,7 +7295,7 @@ node-abort-controller@^3.1.1: node-addon-api@^3.0.0: version "3.2.1" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.2.1.tgz#81325e0a2117789c0128dab65e7e38f07ceba161" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== node-cache@^5.1.2: @@ -7640,26 +7319,33 @@ node-domexception@^1.0.0: node-fetch@3.0.0-beta.9: version "3.0.0-beta.9" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.0.0-beta.9.tgz#0a7554cfb824380dd6812864389923c783c80d9b" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz" integrity sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg== dependencies: data-uri-to-buffer "^3.0.1" fetch-blob "^2.1.1" -node-fetch@^2.2.0, node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.6.7: - version "2.6.9" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" - integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== +node-fetch@^2.2.0, node-fetch@^2.6.0: + version "2.6.12" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" + integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== dependencies: whatwg-url "^5.0.0" node-fetch@^2.6.11: version "2.6.11" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz" integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== dependencies: whatwg-url "^5.0.0" +node-fetch@^2.6.7: + version "2.6.9" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz" + integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== + dependencies: + whatwg-url "^5.0.0" + node-fetch@^3.2.10: version "3.3.2" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" @@ -7671,34 +7357,18 @@ node-fetch@^3.2.10: node-gyp-build@^4.2.1: version "4.6.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" + resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz" integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== -node-gyp@^8.0.0: - version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - node-int64@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== node-releases@^2.0.12: - version "2.0.12" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" - integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== + version "2.0.13" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz" + integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== node-releases@^2.0.14: version "2.0.14" @@ -7712,24 +7382,19 @@ node-stream-zip@^1.9.1: nopt@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== dependencies: abbrev "1" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" @@ -7744,16 +7409,6 @@ npmlog@^5.0.1: gauge "^3.0.0" set-blocking "^2.0.0" -npmlog@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - nullthrows@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" @@ -7766,12 +7421,12 @@ ob1@0.80.5: object-assign@^4, object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.10.3, object-inspect@^1.12.3, object-inspect@^1.9.0: +object-inspect@^1.10.3, object-inspect@^1.9.0: version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== object-inspect@^1.13.1: @@ -7781,12 +7436,12 @@ object-inspect@^1.13.1: object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.4: version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: call-bind "^1.0.2" @@ -7825,7 +7480,7 @@ object.values@^1.1.7: on-finished@2.4.1: version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" @@ -7842,16 +7497,16 @@ on-headers@~1.0.2: resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0, once@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" @@ -7883,17 +7538,17 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== 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" - word-wrap "^1.2.3" ora@^5.4.1: version "5.4.1" @@ -7910,21 +7565,16 @@ ora@^5.4.1: strip-ansi "^6.0.0" wcwidth "^1.0.1" -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" @@ -7938,28 +7588,21 @@ p-locate@^3.0.0: p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - p-try@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== pako@^2.0.4: @@ -7969,7 +7612,7 @@ pako@^2.0.4: parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" @@ -7984,7 +7627,7 @@ parse-json@^4.0.0: parse-json@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -7994,7 +7637,7 @@ parse-json@^5.2.0: parseurl@~1.3.3: version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== path-exists@^3.0.0: @@ -8004,22 +7647,22 @@ path-exists@^3.0.0: path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-scurry@^1.10.1: @@ -8032,27 +7675,22 @@ path-scurry@^1.10.1: path-to-regexp@0.1.7: version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== path-type@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== - picocolors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pify@^4.0.1: @@ -8062,7 +7700,7 @@ pify@^4.0.1: pirates@^4.0.4, pirates@^4.0.5: version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== pkg-dir@^3.0.0: @@ -8074,14 +7712,14 @@ pkg-dir@^3.0.0: pkg-dir@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== prelude-ls@~1.1.2: @@ -8091,7 +7729,7 @@ prelude-ls@~1.1.2: prettier-linter-helpers@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== dependencies: fast-diff "^1.1.2" @@ -8111,16 +7749,16 @@ pretty-format@^26.5.2, pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" -pretty-format@^29.0.0, pretty-format@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a" - integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw== +pretty-format@^29.0.0: + version "29.6.1" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz" + integrity sha512-7jRj+yXO0W7e4/tSJKoR7HRIHLPPjtNaUGG2xxKQnGvPNRkgWcQ0AZX6P4KBRJN4FcTBWb3sa7DVUJmocYuoog== dependencies: - "@jest/schemas" "^29.4.3" + "@jest/schemas" "^29.6.0" ansi-styles "^5.0.0" react-is "^18.0.0" -pretty-format@^29.7.0: +pretty-format@^29.5.0, pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== @@ -8134,32 +7772,6 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -promise.any@^2.0.2: - version "2.0.5" - resolved "https://registry.yarnpkg.com/promise.any/-/promise.any-2.0.5.tgz#413d1bf3ddfb35680e7101e744b89431fa514df6" - integrity sha512-aM+D4cv0Sjkc90Qhg19XH8Mo5aw28YWqPTFWFkaOpE80MuPbjH/brgI7NI4YGWbcS3suOa0xjJrYznet7lSHhw== - dependencies: - array.prototype.map "^1.0.5" - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-aggregate-error "^1.0.9" - get-intrinsic "^1.1.3" - iterate-value "^1.0.2" - promise@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" @@ -8169,7 +7781,7 @@ promise@^8.3.0: prompts@^2.0.1, prompts@^2.4.2: version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz" integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== dependencies: kleur "^3.0.3" @@ -8186,59 +7798,51 @@ prop-types@^15.7.2, prop-types@^15.8.1: proxy-addr@~2.0.7: version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: forwarded "0.2.0" ipaddr.js "1.9.1" -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - punycode@^2.1.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== pure-rand@^6.0.0: version "6.0.2" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.2.tgz#a9c2ddcae9b68d736a8163036f088a2781c8b306" + resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz" integrity sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ== pvtsutils@^1.3.2: version "1.3.2" - resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.2.tgz#9f8570d132cdd3c27ab7d51a2799239bf8d8d5de" + resolved "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.2.tgz" integrity sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ== dependencies: tslib "^2.4.0" pvutils@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.3.tgz#f35fc1d27e7cd3dfbd39c0826d173e806a03f5a3" + resolved "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz" integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ== qs@6.11.0: version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== dependencies: side-channel "^1.0.4" qs@^6.11.0: version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + resolved "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz" integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== dependencies: side-channel "^1.0.4" query-string@^7.0.1: version "7.1.3" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328" + resolved "https://registry.npmjs.org/query-string/-/query-string-7.1.3.tgz" integrity sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg== dependencies: decode-uri-component "^0.2.2" @@ -8248,7 +7852,7 @@ query-string@^7.0.1: queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== queue@6.0.2: @@ -8258,19 +7862,14 @@ queue@6.0.2: dependencies: inherits "~2.0.3" -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - range-parser@~1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== raw-body@2.5.1: version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== dependencies: bytes "3.1.2" @@ -8280,7 +7879,7 @@ raw-body@2.5.1: raw-body@2.5.2: version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== dependencies: bytes "3.1.2" @@ -8305,7 +7904,7 @@ react-devtools-core@^4.27.7: "react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0: version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== react-is@^16.13.1, react-is@^16.7.0: @@ -8320,7 +7919,7 @@ react-is@^17.0.1, react-is@^17.0.2: react-native-securerandom@^0.1.1: version "0.1.1" - resolved "https://registry.yarnpkg.com/react-native-securerandom/-/react-native-securerandom-0.1.1.tgz#f130623a412c338b0afadedbc204c5cbb8bf2070" + resolved "https://registry.npmjs.org/react-native-securerandom/-/react-native-securerandom-0.1.1.tgz" integrity sha512-CozcCx0lpBLevxiXEb86kwLRalBCHNjiGPlw3P7Fi27U6ZLdfjOCNRHD1LtBKcvPvI3TvkBXB3GOtLvqaYJLGw== dependencies: base64-js "*" @@ -8403,7 +8002,7 @@ react@^18.0.0: readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" @@ -8425,7 +8024,7 @@ readable-stream@~2.3.6: readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" @@ -8457,7 +8056,7 @@ redux@^4.0.0, redux@^4.2.1: dependencies: "@babel/runtime" "^7.9.2" -ref-array-di@^1.2.2: +ref-array-di@1.2.2, ref-array-di@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/ref-array-di/-/ref-array-di-1.2.2.tgz#ceee9d667d9c424b5a91bb813457cc916fb1f64d" integrity sha512-jhCmhqWa7kvCVrWhR/d7RemkppqPUdxEil1CtTtm7FkZV8LcHHCK3Or9GinUiFP5WY3k0djUkMvhBhx49Jb2iA== @@ -8465,28 +8064,23 @@ ref-array-di@^1.2.2: array-index "^1.0.0" debug "^3.1.0" -"ref-napi@^2.0.1 || ^3.0.2", ref-napi@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ref-napi/-/ref-napi-3.0.3.tgz#e259bfc2bbafb3e169e8cd9ba49037dd00396b22" - integrity sha512-LiMq/XDGcgodTYOMppikEtJelWsKQERbLQsYm0IOOnzhwE9xYZC7x8txNnFC9wJNOkPferQI4vD4ZkC0mDyrOA== - dependencies: - debug "^4.1.1" - get-symbol-from-current-process-h "^1.0.2" - node-addon-api "^3.0.0" - node-gyp-build "^4.2.1" - -ref-struct-di@^1.1.0, ref-struct-di@^1.1.1: +ref-struct-di@1.1.1, ref-struct-di@^1.1.0, ref-struct-di@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/ref-struct-di/-/ref-struct-di-1.1.1.tgz#5827b1d3b32372058f177547093db1fe1602dc10" + resolved "https://registry.npmjs.org/ref-struct-di/-/ref-struct-di-1.1.1.tgz" integrity sha512-2Xyn/0Qgz89VT+++WP0sTosdm9oeowLP23wRJYhG4BFdMUrLj3jhwHZNEytYNYgtPKLNTP3KJX4HEgBvM1/Y2g== dependencies: debug "^3.1.0" reflect-metadata@^0.1.13: version "0.1.13" - resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== +reflect-metadata@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.2.1.tgz#8d5513c0f5ef2b4b9c3865287f3c0940c1f67f74" + integrity sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw== + regenerate-unicode-properties@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" @@ -8504,15 +8098,6 @@ regenerator-runtime@^0.13.11, regenerator-runtime@^0.13.2: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -regexp.prototype.flags@^1.4.3: - version "1.5.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - functions-have-names "^1.2.3" - regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: version "1.5.2" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" @@ -8544,7 +8129,7 @@ regjsparser@^0.9.1: require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: @@ -8562,14 +8147,9 @@ reselect@^4.1.8: resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== -resolve-alpn@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - resolve-cwd@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: resolve-from "^5.0.0" @@ -8581,22 +8161,22 @@ resolve-from@^3.0.0: resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve-pkg-maps@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + resolved "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz" integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== resolve.exports@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== resolve@^1.0.0, resolve@^1.14.2, resolve@^1.20.0: @@ -8617,13 +8197,6 @@ resolve@^1.22.4: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -8632,26 +8205,21 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - reusify@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@^2.6.1: version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" @@ -8672,14 +8240,14 @@ rimraf@~2.6.2: run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" -rxjs@^7.2.0, rxjs@^7.8.0: +rxjs@^7.2.0, rxjs@^7.8.0, rxjs@^7.8.1: version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" @@ -8701,21 +8269,21 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: safe-buffer@5.2.1, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex-test@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz" integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== dependencies: call-bind "^1.0.2" get-intrinsic "^1.1.3" is-regex "^1.1.4" -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": +"safer-buffer@>= 2.1.2 < 3": version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== scheduler@0.24.0-canary-efb381bbf-20230505: @@ -8730,7 +8298,7 @@ semver@^5.6.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: +semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -8756,7 +8324,7 @@ semver@^7.5.2, semver@^7.5.3, semver@^7.5.4: send@0.18.0: version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" @@ -8780,14 +8348,14 @@ serialize-error@^2.1.0: serialize-error@^8.0.1, serialize-error@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-8.1.0.tgz#3a069970c712f78634942ddd50fbbc0eaebe2f67" + resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz" integrity sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ== dependencies: type-fest "^0.20.2" serve-static@1.15.0, serve-static@^1.13.1: version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: encodeurl "~1.0.2" @@ -8797,7 +8365,7 @@ serve-static@1.15.0, serve-static@^1.13.1: set-blocking@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== set-function-length@^1.2.1: @@ -8828,7 +8396,7 @@ setimmediate@^1.0.5: setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== shallow-clone@^3.0.0: @@ -8840,29 +8408,24 @@ shallow-clone@^3.0.0: shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@^1.6.1: - version "1.8.0" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.0.tgz#20d078d0eaf71d54f43bd2ba14a1b5b9bfa5c8ba" - integrity sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ== - -shell-quote@^1.7.3: +shell-quote@^1.6.1, shell-quote@^1.7.3: version "1.8.1" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== side-channel@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: call-bind "^1.0.0" @@ -8871,22 +8434,22 @@ side-channel@^1.0.4: signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== signal-exit@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.2.tgz" integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== sisteransi@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== slash@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slice-ansi@^2.0.0: @@ -8898,39 +8461,17 @@ slice-ansi@^2.0.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - -source-map-support@0.5.13: +source-map-support@0.5.13, source-map-support@^0.5.12: version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@^0.5.12, source-map-support@^0.5.16, source-map-support@^0.5.17, source-map-support@^0.5.21, source-map-support@~0.5.20: +source-map-support@^0.5.16, source-map-support@^0.5.17, source-map-support@^0.5.21, source-map-support@~0.5.20: version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" @@ -8943,7 +8484,7 @@ source-map@^0.5.6: source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@^0.7.3: @@ -8953,24 +8494,17 @@ source-map@^0.7.3: split-on-first@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + resolved "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz" integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - stack-utils@^2.0.3: version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz" integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== dependencies: escape-string-regexp "^2.0.0" @@ -8996,7 +8530,7 @@ static-eval@2.0.2: statuses@2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== statuses@~1.5.0: @@ -9004,26 +8538,19 @@ statuses@~1.5.0: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== - dependencies: - internal-slot "^1.0.4" - str2buf@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/str2buf/-/str2buf-1.3.0.tgz#a4172afff4310e67235178e738a2dbb573abead0" + resolved "https://registry.npmjs.org/str2buf/-/str2buf-1.3.0.tgz" integrity sha512-xIBmHIUHYZDP4HyoXGHYNVmxlXLXDrtFHYT0eV6IOdEj3VO9ccaF1Ejl9Oq8iFjITllpT8FhaXb4KsNmw+3EuA== strict-uri-encode@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz" integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== string-length@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== dependencies: char-regex "^1.0.2" @@ -9031,7 +8558,7 @@ string-length@^4.0.1: "string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" @@ -9040,7 +8567,7 @@ string-length@^4.0.1: string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== dependencies: eastasianwidth "^0.2.0" @@ -9062,15 +8589,6 @@ string.prototype.matchall@^4.0.10: set-function-name "^2.0.0" side-channel "^1.0.4" -string.prototype.trim@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" - integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - string.prototype.trim@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" @@ -9080,15 +8598,6 @@ string.prototype.trim@^1.2.8: define-properties "^1.2.0" es-abstract "^1.22.1" -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - string.prototype.trimend@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" @@ -9098,15 +8607,6 @@ string.prototype.trimend@^1.0.7: define-properties "^1.2.0" es-abstract "^1.22.1" -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - string.prototype.trimstart@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" @@ -9118,7 +8618,7 @@ string.prototype.trimstart@^1.0.7: string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" @@ -9132,7 +8632,7 @@ string_decoder@~1.1.1: "strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" @@ -9146,34 +8646,34 @@ strip-ansi@^5.0.0, strip-ansi@^5.2.0: strip-ansi@^7.0.1: version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-bom@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-json-comments@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strnum@^1.0.5: @@ -9188,7 +8688,7 @@ sudo-prompt@^9.0.0: superagent@^8.0.5: version "8.0.9" - resolved "https://registry.yarnpkg.com/superagent/-/superagent-8.0.9.tgz#2c6fda6fadb40516515f93e9098c0eb1602e0535" + resolved "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz" integrity sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA== dependencies: component-emitter "^1.3.0" @@ -9204,7 +8704,7 @@ superagent@^8.0.5: supertest@^6.2.3: version "6.3.3" - resolved "https://registry.yarnpkg.com/supertest/-/supertest-6.3.3.tgz#42f4da199fee656106fd422c094cf6c9578141db" + resolved "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz" integrity sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA== dependencies: methods "^1.1.2" @@ -9212,38 +8712,38 @@ supertest@^6.2.3: supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" supports-color@^8.0.0: version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: has-flag "^4.0.0" supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== swagger-ui-dist@>=4.11.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-5.1.0.tgz#b01b3be06bebb2566b2df586c1632d502ec792ad" + resolved "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.1.0.tgz" integrity sha512-c1KmAjuVODxw+vwkNLALQZrgdlBAuBbr2xSPfYrJgseEi7gFKcTvShysPmyuDI4kcUa1+5rFpjWvXdusKY74mg== swagger-ui-express@^4.4.0: version "4.6.3" - resolved "https://registry.yarnpkg.com/swagger-ui-express/-/swagger-ui-express-4.6.3.tgz#870d0892654fe80e6970a2d680e22521acd2dc19" + resolved "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.6.3.tgz" integrity sha512-CDje4PndhTD2HkgyKH3pab+LKspDeB/NhPN2OF1j+piYIamQqBYwAXWESOT1Yju2xFg51bRW9sUng2WxDjzArw== dependencies: swagger-ui-dist ">=4.11.0" @@ -9258,21 +8758,9 @@ synckit@^0.8.6: tapable@^2.2.0: version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -tar@^6.0.2, tar@^6.1.2: - version "6.1.15" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" - integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== - 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" - tar@^6.1.11: version "6.2.0" resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" @@ -9298,9 +8786,9 @@ temp@^0.8.4: rimraf "~2.6.2" terser@^5.15.0: - version "5.18.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.2.tgz#ff3072a0faf21ffd38f99acc9a0ddf7b5f07b948" - integrity sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w== + version "5.19.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.2.tgz#bdb8017a9a4a8de4663a7983f45c506534f9234e" + integrity sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -9309,7 +8797,7 @@ terser@^5.15.0: test-exclude@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: "@istanbuljs/schema" "^0.1.2" @@ -9318,7 +8806,7 @@ test-exclude@^6.0.0: text-table@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== throat@^5.0.0: @@ -9336,34 +8824,34 @@ through2@^2.0.1: tmpl@1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" toidentifier@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tr46@~0.0.3: version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== tree-kill@^1.2.2: version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== ts-api-utils@^1.0.1: @@ -9371,6 +8859,11 @@ ts-api-utils@^1.0.1: resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.2.1.tgz#f716c7e027494629485b21c0df6180f4d08f5e8b" integrity sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA== +ts-deepmerge@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/ts-deepmerge/-/ts-deepmerge-7.0.0.tgz#ee824dc177d452603348c7e6f3b90223434a6b44" + integrity sha512-WZ/iAJrKDhdINv1WG6KZIGHrZDar6VfhftG1QJFpVbOYZMYJLJOvZOo1amictRXVdBXZIgBHKswMTXzElngprA== + ts-jest@^29.1.2: version "29.1.2" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.2.tgz#7613d8c81c43c8cb312c6904027257e814c40e09" @@ -9403,7 +8896,7 @@ ts-node-dev@^1.1.8: ts-node-dev@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-2.0.0.tgz#bdd53e17ab3b5d822ef519928dc6b4a7e0f13065" + resolved "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz" integrity sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w== dependencies: chokidar "^3.5.1" @@ -9419,7 +8912,7 @@ ts-node-dev@^2.0.0: ts-node@^10.4.0: version "10.9.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: "@cspotcode/source-map-support" "^0.8.0" @@ -9479,7 +8972,7 @@ tsconfig-paths@^3.15.0: tsconfig-paths@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz" integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== dependencies: json5 "^2.2.2" @@ -9488,7 +8981,7 @@ tsconfig-paths@^4.2.0: tsconfig@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" + resolved "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz" integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== dependencies: "@types/strip-bom" "^3.0.0" @@ -9498,17 +8991,22 @@ tsconfig@^7.0.0: tslib@^1.9.3: version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.5.0: +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.4.0: version "2.5.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz" integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w== tslib@^2.0.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410" + integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== + +tslib@^2.5.0: version "2.6.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz" integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== tslib@^2.6.2: @@ -9518,29 +9016,29 @@ tslib@^2.6.2: tslog@^3.3.3: version "3.3.4" - resolved "https://registry.yarnpkg.com/tslog/-/tslog-3.3.4.tgz#083197a908c97b3b714a0576b9dac293f223f368" + resolved "https://registry.npmjs.org/tslog/-/tslog-3.3.4.tgz" integrity sha512-N0HHuHE0e/o75ALfkioFObknHR5dVchUad4F0XyFf3gXJYB++DewEzwGI/uIOM216E5a43ovnRNEeQIq9qgm4Q== dependencies: source-map-support "^0.5.21" -tsoa@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tsoa/-/tsoa-4.1.3.tgz#46abe8c45667c2fe3ea08a3b8a23762ebe8db114" - integrity sha512-jSvH+b3hNUx3lBzscyAu1nlE/PO4cYdgDMmPTF5/3mQVRdyblE/zinRQ5lipyCNYFD07KTiRQJCFKfdtklrs8w== +tsoa@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/tsoa/-/tsoa-6.2.0.tgz#6fa5a87b70c3644fa8b51a1bf56293e2537db74a" + integrity sha512-EX/RyoU+4hD1rLM5NjYG+I7lEhqx1yuLgcHs/gyWQpkX/RL9cVR9hFA9LKQrK6PE+WTg1SEahn1MK3l/+6pVKw== dependencies: - "@tsoa/cli" "^4.1.3" - "@tsoa/runtime" "^4.1.3" + "@tsoa/cli" "^6.2.0" + "@tsoa/runtime" "^6.2.0" -tsyringe@^4.5.0, tsyringe@^4.6.0, tsyringe@^4.7.0, tsyringe@^4.8.0: +tsyringe@^4.6.0, tsyringe@^4.7.0, tsyringe@^4.8.0: version "4.8.0" - resolved "https://registry.yarnpkg.com/tsyringe/-/tsyringe-4.8.0.tgz#d599651b36793ba872870fee4f845bd484a5cac1" + resolved "https://registry.npmjs.org/tsyringe/-/tsyringe-4.8.0.tgz" integrity sha512-YB1FG+axdxADa3ncEtRnQCFq/M0lALGLxSZeVNbTU8NqhOVc51nnv2CISTcvc1kyv6EGPtXVr0v6lWeDxiijOA== dependencies: tslib "^1.9.3" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" @@ -9554,17 +9052,17 @@ type-check@~0.3.2: type-detect@4.0.8: version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-fest@^0.7.1: @@ -9574,7 +9072,7 @@ type-fest@^0.7.1: type-is@~1.6.18: version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" @@ -9622,31 +9120,26 @@ typed-array-byte-offset@^1.0.0: typed-array-length@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz" integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== dependencies: call-bind "^1.0.2" for-each "^0.3.3" is-typed-array "^1.1.9" -typescript@<4.8.0: - version "4.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" - integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== - -typescript@~5.3.3: +typescript@^5.3.3, typescript@~5.3.3: version "5.3.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== uglify-js@^3.1.4: version "3.17.4" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz" integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== unbox-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz" integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: call-bind "^1.0.2" @@ -9694,20 +9187,6 @@ unicode-property-aliases-ecmascript@^2.0.0: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -9715,17 +9194,17 @@ universalify@^0.1.0: universalify@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== update-browserslist-db@^1.0.11: version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz" integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== dependencies: escalade "^3.1.1" @@ -9741,63 +9220,53 @@ update-browserslist-db@^1.0.13: uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== utils-merge@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -"uuid@^7.0.0 || ^8.0.0", uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - uuid@^9.0.0: version "9.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz" integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== v8-to-istanbul@^9.0.1: version "9.1.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz" integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== dependencies: "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" -validator@^13.5.2, validator@^13.6.0: - version "13.9.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.9.0.tgz#33e7b85b604f3bbce9bb1a05d5c3e22e1c2ff855" - integrity sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA== - -validator@^13.9.0: +validator@^13.11.0, validator@^13.9.0: version "13.11.0" resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== varint@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/varint/-/varint-6.0.0.tgz#9881eb0ce8feaea6512439d19ddf84bf551661d0" + resolved "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz" integrity sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg== vary@^1, vary@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== vlq@^1.0.0: @@ -9807,7 +9276,7 @@ vlq@^1.0.0: walker@^1.0.7, walker@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + resolved "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== dependencies: makeerror "1.0.12" @@ -9821,20 +9290,12 @@ wcwidth@^1.0.1: web-did-resolver@^2.0.21: version "2.0.23" - resolved "https://registry.yarnpkg.com/web-did-resolver/-/web-did-resolver-2.0.23.tgz#59806a8bc6f5709403929a3d2b49c06279580632" + resolved "https://registry.npmjs.org/web-did-resolver/-/web-did-resolver-2.0.23.tgz" integrity sha512-7yOKnY9E322cVFfVkpV6g2j7QWB3H32aezGn2VagBmTAQr74zf0hxRN0p/PzK/kcgnc/oDCIRuiWUGwJEJAh0w== dependencies: cross-fetch "^3.1.5" did-resolver "^4.0.0" -web-did-resolver@^2.0.8: - version "2.0.22" - resolved "https://registry.yarnpkg.com/web-did-resolver/-/web-did-resolver-2.0.22.tgz#f28965543b90b5b9065e8dce759e535981143b67" - integrity sha512-JktHY9dd8z+xQO/UcTXUiuGCPaxWnu5J/95KWNs19LikeL0+m2qgT0pdgQSW1yxrUSqBjEx/kTnZj3NrtzYBNQ== - dependencies: - cross-fetch "^3.1.5" - did-resolver "^4.0.0" - web-streams-polyfill@^3.0.3: version "3.3.2" resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz#32e26522e05128203a7de59519be3c648004343b" @@ -9842,7 +9303,7 @@ web-streams-polyfill@^3.0.3: webcrypto-core@^1.7.7: version "1.7.7" - resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.7.7.tgz#06f24b3498463e570fed64d7cab149e5437b162c" + resolved "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.7.7.tgz" integrity sha512-7FjigXNsBfopEj+5DV2nhNpfic2vumtjjgPmeDKk45z+MJwXKKfhPB7118Pfzrmh4jqOMST6Ch37iPAHoImg5g== dependencies: "@peculiar/asn1-schema" "^2.3.6" @@ -9853,22 +9314,22 @@ webcrypto-core@^1.7.7: webcrypto-shim@^0.1.4: version "0.1.7" - resolved "https://registry.yarnpkg.com/webcrypto-shim/-/webcrypto-shim-0.1.7.tgz#da8be23061a0451cf23b424d4a9b61c10f091c12" + resolved "https://registry.npmjs.org/webcrypto-shim/-/webcrypto-shim-0.1.7.tgz" integrity sha512-JAvAQR5mRNRxZW2jKigWMjCMkjSdmP5cColRP1U/pTg69VgHXEi1orv5vVpJ55Zc5MIaPc1aaurzd9pjv2bveg== webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== whatwg-fetch@^3.0.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" - integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== + version "3.6.17" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.17.tgz#009bbbfc122b227b74ba1ff31536b3a1a0e0e212" + integrity sha512-c4ghIvG6th0eudYwKZY5keb81wtFz9/WeAHAoy8+r18kcWlitUIrmGFQ2rWEl4UCKUilD3zCLHOIPheHx5ypRQ== whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -9876,7 +9337,7 @@ whatwg-url@^5.0.0: which-boxed-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== dependencies: is-bigint "^1.0.1" @@ -9901,37 +9362,20 @@ which-typed-array@^1.1.13, which-typed-array@^1.1.14: gopd "^1.0.1" has-tostringtag "^1.0.1" -which-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" - -which@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -wide-align@^1.1.2, wide-align@^1.1.5: +wide-align@^1.1.2: version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: string-width "^1.0.2 || 2 || 3 || 4" -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - word-wrap@~1.2.3: version "1.2.5" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" @@ -9939,12 +9383,12 @@ word-wrap@~1.2.3: wordwrap@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" @@ -9962,7 +9406,7 @@ wrap-ansi@^6.2.0: wrap-ansi@^8.1.0: version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== dependencies: ansi-styles "^6.1.0" @@ -9971,7 +9415,7 @@ wrap-ansi@^8.1.0: wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^2.3.0: @@ -9985,7 +9429,7 @@ write-file-atomic@^2.3.0: write-file-atomic@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== dependencies: imurmurhash "^0.1.4" @@ -10000,17 +9444,17 @@ ws@^6.2.2: ws@^7, ws@^7.5.1, ws@^7.5.3: version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== ws@^8.13.0: version "8.13.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^4.0.0: @@ -10020,36 +9464,28 @@ y18n@^4.0.0: y18n@^5.0.5: version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yallist@^3.0.2: version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - yaml@^2.2.1: version "2.3.1" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" integrity sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ== -yamljs@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/yamljs/-/yamljs-0.3.0.tgz#dc060bf267447b39f7304e9b2bfbe8b5a7ddb03b" - integrity sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ== - dependencies: - argparse "^1.0.7" - glob "^7.0.5" +yaml@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.1.tgz#2e57e0b5e995292c25c75d2658f0664765210eed" + integrity sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg== yargs-parser@^18.1.2: version "18.1.3" @@ -10061,10 +9497,10 @@ yargs-parser@^18.1.2: yargs-parser@^21.0.1, yargs-parser@^21.1.1: version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^15.1.0, yargs@^15.4.1: +yargs@^15.1.0: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -10081,22 +9517,9 @@ yargs@^15.1.0, yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^17.3.1: - version "17.7.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.1.tgz#34a77645201d1a8fc5213ace787c220eabbd0967" - integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yargs@^17.6.2: +yargs@^17.3.1, yargs@^17.6.2, yargs@^17.7.1: version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: cliui "^8.0.1" @@ -10107,20 +9530,12 @@ yargs@^17.6.2: y18n "^5.0.5" yargs-parser "^21.1.1" -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" - yn@3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==