diff --git a/.env b/.env index b9f832b..1531dba 100644 --- a/.env +++ b/.env @@ -1,16 +1,10 @@ AGENT_PORT=5106 -VERIFY_PORT=5004 AGENT_DID_NAME="issuer.agent.0235@cord" -CORD_WSS_URL=wss://sparknet.cord.network -AUTHOR_URI=//sparknet/agent - -CHAIN_SPACE_ID=space:cord:c35h1XGuUXDHwtJTre7dwsb7KqZM5DWYA4kpPRuSx6BZJnXTg -CHAIN_SPACE_AUTH=auth:cord:a3fHEajeParsSaCNLffgi9UVL3dieXNrufHujvdorccQ94qqv -MNEMONIC=loyal federal rare goddess chief display vessel athlete vault fork grab eager strategy lonely current foster eager toe holiday unveil heavy city belt agent - TYPEORM_PORT=5432 +AGENT_MNEMONIC=bind sentence iron have wine frown forest twice coffee family balance together + STUDIO_TYPEORM_HOST=postgres42 STUDIO_TYPEORM_PORT=5574 STUDIO_TYPEORM_USERNAME=postgres @@ -28,5 +22,14 @@ STUDIO_TYPEORM_LOGGING=false # WALLET_URL = http://wallet:5001/api/v1 WEB_URL=issuer-agent.demo.dhiway.com REQUEST_URL_TOKEN=d53b731c-be91-458d-bd97-71d37d444e60 + +# Cord +NETWORK_ADDRESS=wss://weave1.testnet.cord.network +STASH_ACC_MNEMONIC=demo + +# Redis +REDIS_URL=redis://redis_container:6379 +REDIS_TIMEOUT=3600 + SENDGRID_API_KEY=SG.xxxxxxxx.yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy # Replace with your actual SendGrid API key -DB_HOST=localhost \ No newline at end of file +DB_HOST=localhost diff --git a/.gitignore b/.gitignore index b622677..00686d3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /node_modules .vscode +dist \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json index d64804a..fff1218 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1,6 +1,6 @@ { - "useTabs": false, - "tabWidth": 2, - "singleQuote": true, - "jsxBracketSameLine": false + "useTabs": false, + "tabWidth": 2, + "singleQuote": true, + "jsxBracketSameLine": false } diff --git a/Dockerfile b/Dockerfile index 79151d3..e9f78ee 100755 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,21 @@ -FROM node:18-slim as prod - -#ENV NODE_ENV=production +FROM node:22-slim AS build WORKDIR /app -COPY package.json yarn.lock /app/ -RUN yarn +COPY package.json yarn.lock ./ +RUN yarn install --frozen-lockfile COPY . . RUN yarn build -RUN mkdir -p /tmp/templates +FROM node:22-slim -EXPOSE 5001 +WORKDIR /app -CMD ["node", "dist/index.js"] +COPY --from=build /app/dist ./dist +COPY --from=build /app/package.json ./package.json +COPY --from=build /app/node_modules ./node_modules + +EXPOSE 5001 -#CMD ["tail", "-f", "/dev/null"] +CMD ["yarn", "run", "prod"] diff --git a/Dockerfile.mac b/Dockerfile.mac deleted file mode 100644 index d4c0ccf..0000000 --- a/Dockerfile.mac +++ /dev/null @@ -1,16 +0,0 @@ -FROM node:20.1-slim - -WORKDIR /app - -RUN apt update && apt install -y python3 make gcc g++ -COPY package.json yarn.lock /app/ -RUN yarn - -COPY . . -RUN yarn build - -EXPOSE 5001 - -CMD ["npm", "run", "prod"] - -#CMD ["tail", "-f", "/dev/null"] diff --git a/README.md b/README.md index 3e30629..3fbfc18 100644 --- a/README.md +++ b/README.md @@ -1,54 +1,164 @@ # Issuer-Agent: Verifiable Credentials on CORD Blockchain -This project demonstrates the APIs for creation and issuance of verifiable credentials in compliance with the W3C standards, using the CORD blockchain. The issuer-agent provides functionality for schema creation, credential issuance, and the anchoring of hashes on-chain, ensuring tamper-evident and verifiable data. +The Issuer-Agent is a backend service that enables the creation, issuance, and on-chain anchoring of Verifiable Credentials (VCs) using the CORD blockchain. It follows the W3C Verifiable Credentials standards to ensure security, interoperability, and decentralization. This service is built using Node.js and exposes a set of APIs to interact with credentials and registries. -The primary objective of the project is to issue digital credentials that are cryptographically verifiable and anchored on the CORD blockchain. This offers trust and transparency, enabling entities to issue and manage verifiable credentials while adhering to decentralized identity standards. +## ✨ Key Features -## Key Features +- **Credential Issuance**: Issue cryptographically signed Verifiable Credentials compliant with W3C standards. +- **Blockchain Anchoring**: Anchor credential hashes on the CORD blockchain for tamper-evidence. +- **Decentralized Identity Support**: Built-in DID management and integration with the CORD identity layer. +- **Swagger Docs**: Explore and test API endpoints via an interactive Swagger UI. -- **Schema Creation**: Design and define credential schemas, forming the structure for verifiable credentials. -- **Verifiable Credential Issuance**: Issue credentials that are cryptographically signed and aligned with the W3C Verifiable Credentials standard. -- **CORD Blockchain Integration**: Anchor the issued credentials hash on the CORD blockchain to ensure tamper-evidence and verifiability. -- **Compliance**: Built to adhere to globally recognized standards for decentralized identity and credentialing, promoting interoperability and trust. +--- -## Getting Started +## 📅 Prerequisites -To get the project up and running locally, follow the instructions below. +Make sure the following are installed on your system: -### Prerequisites +- [Node.js](https://nodejs.org/) (v18+ recommended) +- [Yarn](https://classic.yarnpkg.com/en/docs/install) +- [Docker](https://www.docker.com/products/docker-desktop) +- [Docker Compose](https://docs.docker.com/compose/install/) -Ensure that you have Docker installed on your system to run the issuer-agent locally. Docker Compose is also required for managing multiple containers efficiently. +--- -### Running Locally Using Docker +## 📚 Getting Started -1. **Build the Docker image** - Build the Docker image for the issuer-agent using the following command: +### 1. Clone the Repository - ```bash - docker build . -t dhiway/issuer-agent:latest -f Dockerfile.mac - ``` +```bash +git clone https://github.com/dhiway/issuer-agent.git +cd issuer-agent +``` -2. **Run the Docker container** - After building the image, use Docker Compose to bring up the necessary services in detached mode: +### 2. Install Dependencies - ```bash - docker compose up -d - ``` +```bash +yarn install +``` -The service will now be running locally, and you can access the API documentation through the Swagger interface. Alternatively, you can also test the APIs by importing the Postman collection. +### 3. Create a Stash Account -## API Documentation +```bash +yarn create:stash-account +``` -- [Swagger_Documentation](https://issuer-agent.demo.dhiway.com/docs) +This will generate a stash account with a mnemonic phrase. Save the phrase securely and add it to your environment variables. -You can explore the API and interact with the service using Swagger. The Swagger documentation provides detailed information about available endpoints, request/response formats, and the overall workflow. -Swagger Documentation +### 4. Configure Environment Variables -- [Postman_Collection] - Alternatively, the `postman_collection.json` file mentioned in the repository can be imported into Postman to test out the APIs directly. This collection contains pre-configured API requests, making it easier to interact with the issuer-agent. +Create a `.env` file in the root directory: -# Further Implementation: CORD.js SDK (https://github.com/dhiway/cord.js) +```env +STASH_ACC_MNEMONIC="your twelve word mnemonic phrase" +``` -For more advanced interactions with the CORD blockchain, you can use the cord.js SDK, which provides developers with tools to build on the CORD blockchain. This SDK is essential for managing identity, verifiable credentials, and interacting with CORD-based decentralized networks. +Ensure your stash account is funded. You can contact Dhiway for testnet funds if needed. -The cord.js repository offers comprehensive utilities for handling blockchain transactions, creating and managing decentralized identifiers (DIDs), and managing credentials programmatically. \ No newline at end of file +--- + +## 🚀 Running the Project + +### Option 1: Using Docker (Recommended) + +1. **Build the Docker image** + +```bash +docker build . -t dhiway/issuer-agent:latest -f Dockerfile +``` + +2. **Start the service** + +```bash +docker compose up -d +``` + +### Option 2: Running Locally with Node.js + +```bash +yarn dev +``` + +--- + +## 🔍 API Documentation + +### Swagger UI: + +Access interactive documentation at: + +``` + https://dhiway.github.io/dhiway-api-docs/issuer-agent +``` + +### Postman: + +Import the `postman_collection.json` file provided in the repo to quickly test APIs with pre-configured requests. + +#### Available APIs: + +- `POST /profile` → Create and link a profile +- `POST /registry` → Anchor the credential hash and schema to the blockchain +- `POST /credential/issue` → Issue a Verifiable Credential + +> Note: There is no standalone schema creation API. Schemas are passed as part of the registry creation or credential issuance payload. + +--- + +## 💡 Development Workflow + +1. **Create Profile**: Register an entity (person/org) to issue credentials. +2. **Create Registry**: Define and anchor the credential structure and metadata to the blockchain. +3. **Issue Credential**: Generate a VC using the created profile and registry. +4. **Verify**: Use public chain data and cryptographic signatures to validate. + +--- + +## 🎓 CORD.js SDK + +For advanced use cases or integrating directly with the blockchain: + +- GitHub: [https://github.com/dhiway/cord.js] +- Features: + + - DID management + - Credential creation & verification + - On-chain registry access + - Signing utilities + +--- + +## 🛠️ Architecture Overview + +``` +┌──────────────┐ ┌───────────────┐ ┌────────────────────┐ +│ Client App ├────>│ Issuer-Agent ├────>│ CORD Blockchain │ +└──────────────┘ └───────────────┘ └────────────────────┘ + │ + ▼ + ┌───────────────┐ + │ VC Storage │ + └───────────────┘ +``` + +--- + +## 🌟 Contributing + +We welcome contributions to the Issuer-Agent! Follow these steps: + +1. Fork the repo +2. Create a new feature branch +3. Commit and push your changes +4. Submit a pull request with a clear description + +--- + +## 🌐 Support & Contact + +For technical support or help funding your stash account: + +- Website: [https://dhiway.com](https://dhiway.com) +- GitHub: [https://github.com/dhiway](https://github.com/dhiway) + +--- diff --git a/apis.yaml b/apis.yaml deleted file mode 100644 index 750e2fb..0000000 --- a/apis.yaml +++ /dev/null @@ -1,621 +0,0 @@ -openapi: 3.0.1 -info: - version: 1.4.1 - title: Issuer Agent - description: API for managing schemas, verifiable credentials, decentralized identifiers (DIDs), and document hashes in a wallet agent. - termsOfService: http://studio.dhiway.com/page/terms-and-conditions - contact: - name: Dhiway Networks - email: info@dhiway.com - url: https://dhiway.com - license: - name: Apache v2.0 - url: https://www.apache.org/licenses/LICENSE-2.0 -servers: - - url: https://issuer-agent-api.demo.dhiway.net - description: Demo server - - url: http://localhost:5106/ - description: Local server -paths: - /api/v1/schema: - post: - tags: - - Schema - description: Create a new schema definition on the blockchain. This schema can later be used to issue verifiable credentials. - operationId: createSchema - requestBody: - description: Schema definition to be created, including title, description, and properties. - content: - application/json: - schema: - $ref: '#/components/schemas/SchemaRequest' - required: true - responses: - '200': - description: Schema created successfully and registered on the blockchain. - content: - application/json: - schema: - type: object - properties: - result: - type: string - example: SUCCESS - description: Indicates the operation was successful. - schemaId: - type: string - example: schema:cord:s34ouTR2XCJprL48EbkyhNV4SSsbQU9JGN4KhJbAerz6wEVWC - description: The unique identifier of the created schema. - '400': - description: Invalid schema format, missing required fields (e.g., title or properties), or schema creation failed. - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - '500': - description: Server error during schema creation, such as a failure in blockchain registration. - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - security: - - bearerAuth: [] - - /api/v1/schema/{id}: - get: - tags: - - Schema - description: Retrieve a schema by its unique identifier from the database. - operationId: getSchemaById - parameters: - - in: path - name: id - schema: - type: string - required: true - description: Unique identifier of the schema (e.g., schema:cord:s33Nap3uKe3A3DTuroTEXFUBbkG5P3WRE9RcJFJDxh5Ktc14v). - responses: - '200': - description: Schema retrieved successfully. - content: - application/json: - schema: - type: object - properties: - schema: - type: object - properties: - identifier: - type: string - description: Unique identifier of the schema. - example: schema:cord:s33Nap3uKe3A3DTuroTEXFUBbkG5P3WRE9RcJFJDxh5Ktc14v - title: - type: string - description: Title of the schema. - example: Event XYZ Participation - description: - type: string - description: Description of the schema. - example: Description of the title - schemaProperties: - type: object - description: Properties of the schema. - cordSchema: - type: string - description: JSON string of the Cord-specific schema details. - requiredFields: - type: array - description: List of required fields in the schema. - items: - type: string - '400': - description: Schema not found for the given identifier. - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - '500': - description: Server error during schema retrieval. - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - security: - - bearerAuth: [] - - /api/v1/cred: - post: - tags: - - Verifiable Credential - description: Issue a new verifiable credential (VC) to a specified holder using a predefined schema. The VC is created based on the schema and includes properties such as the holder DID and optional validity timestamps (validFrom and validUntil). The credential is registered on the blockchain and stored in the database. - operationId: issueCred - requestBody: - description: Details required to issue the VC, including the schema ID, credential properties (e.g., holder DID), and optional validity timestamps. - content: - application/json: - schema: - $ref: '#/components/schemas/RecordRequest' - required: true - responses: - '200': - description: Verifiable credential issued successfully. - content: - application/json: - schema: - type: object - properties: - result: - type: string - example: success - description: Indicates the operation was successful. - identifier: - type: string - example: stmt:cord:s3dgvtunhXyxg5oBb1QNaqR9NvhF3tnQoLj2jmNBHiW4cYzby:d528de06ecb92d68b33c77c627c2dac6f08ed2507e4bd1ca00456f9635c94af6 - description: The unique identifier of the issued credential. - vc: - type: object - description: The full verifiable credential object, including proof and content. - '400': - description: Invalid request data, missing required fields (e.g., schemaId), or credential issuance failed. - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - '500': - description: Server error during credential issuance, such as a schema mismatch or blockchain registration failure. - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - security: - - bearerAuth: [] - - /api/v1/cred/{id}: - get: - tags: - - Verifiable Credential - description: Retrieve a verifiable credential by its unique identifier from the database. - operationId: getCredById - parameters: - - in: path - name: id - schema: - type: string - required: true - description: Unique identifier of the credential (e.g., stmt:cord:s3dgvtunhXyxg5oBb1QNaqR9NvhF3tnQoLj2jmNBHiW4cYzby:d528de06ecb92d68b33c77c627c2dac6f08ed2507e4bd1ca00456f9635c94af6). - responses: - '200': - description: Credential retrieved successfully. - content: - application/json: - schema: - type: object - properties: - credential: - type: object - description: The stored credential object, including schemaId, identifier, fromDid, credHash, vc, and active status. - '400': - description: Credential not found for the given identifier. - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - '500': - description: Server error during credential retrieval. - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - security: - - bearerAuth: [] - - /api/v1/cred/update/{id}: - put: - tags: - - Verifiable Credential - description: Update the properties of an existing verifiable credential identified by its unique identifier. Only the credential's properties are updated, and the updated credential is registered on the blockchain. Other fields (e.g., schema, issuer) remain unchanged. - operationId: updateCred - parameters: - - in: path - name: id - schema: - type: string - required: true - description: Unique identifier of the credential to update. - requestBody: - description: Updated properties for the credential (e.g., name, email, or other attributes). - content: - application/json: - schema: - $ref: '#/components/schemas/UpdateRequest' - required: true - responses: - '200': - description: Credential updated successfully. - content: - application/json: - schema: - type: object - properties: - result: - type: string - example: Updated successfully - description: Indicates the operation was successful. - identifier: - type: string - example: stmt:cord:s3dgvtunhXyxg5oBb1QNaqR9NvhF3tnQoLj2jmNBHiW4cYzby:de689c81fae40362f8f6a9ca228e9d3389e15d0ba8199066366264b017454066 - description: The updated identifier of the credential. - vc: - type: object - description: The updated verifiable credential object, including the new proof and content. - '400': - description: Invalid update request (e.g., missing properties field or credential not found). - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - '500': - description: Server error during credential update, such as a blockchain registration failure. - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - security: - - bearerAuth: [] - - /api/v1/cred/revoke/{id}: - post: - tags: - - Verifiable Credential - description: Revoke a previously issued verifiable credential by its identifier. The revocation is dispatched to the blockchain, marking the credential as inactive. - operationId: revokeCred - parameters: - - in: path - name: id - schema: - type: string - required: true - description: Unique identifier of the credential to revoke. - responses: - '200': - description: Credential revoked successfully. - content: - application/json: - schema: - type: object - properties: - result: - type: string - example: Statement revoked successfully - description: Indicates the revocation was successful. - '400': - description: Invalid credential identifier or credential not found. - content: - application/json: - schema: - $ref: '#/components/schemas/ErrorResponse' - security: - - bearerAuth: [] - - /api/v1/did/create: - post: - tags: - - DID - description: Generate a new decentralized identifier (DID) with optional service endpoints. The DID is created using the provided service data, and a mnemonic and delegate keys are generated. - operationId: generateDid - requestBody: - description: Service data for the DID, including service endpoints (optional). - content: - application/json: - schema: - type: object - properties: - services: - type: array - description: Array of service endpoints for the DID (optional, only the first item is processed). - items: - type: object - properties: - id: - type: string - description: Service ID. - example: service1 - type: - type: string - description: Service type. - example: VerifiableCredentialService - serviceEndpoint: - type: string - description: Service endpoint URL. - example: https://example.com/credentials - responses: - '200': - description: DID generated successfully. - content: - application/json: - schema: - type: object - properties: - mnemonic: - type: string - description: Mnemonic phrase for the DID. - example: 'word1 word2 word3 ...' - delegateKeys: - type: object - description: Delegate keys for the DID. - additionalProperties: - type: string - document: - type: object - description: DID document containing the DID details. - additionalProperties: true - '500': - description: Server error during DID generation (e.g., failure to add delegate or process service data). - content: - application/json: - schema: - type: object - properties: - error: - type: string - example: Did not created - description: Error message describing the issue. - security: - - bearerAuth: [] - - /api/v1/doc-hash/issue: - post: - tags: - - Document Hash - description: Issue a new document hash on the blockchain. The document hash is registered, and a proof is generated and stored on the blockchain. - operationId: documentHashOnChain - requestBody: - description: The hash of the document to be issued. - content: - application/json: - schema: - type: object - properties: - filehash: - type: string - description: The hash of the document (must start with '0x'). - example: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef' - required: - - filehash - responses: - '200': - description: Document hash issued successfully. - content: - application/json: - schema: - type: object - properties: - result: - type: object - properties: - identifier: - type: string - description: The identifier of the issued document hash. - example: stmt:cord:s3dgvtunhXyxg5oBb1QNaqR9NvhF3tnQoLj2jmNBHiW4cYzby:1234567890abcdef - blockHash: - type: string - description: The block hash where the document hash was registered. - example: '0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890' - '400': - description: Invalid request data (e.g., missing or invalid filehash). - content: - application/json: - schema: - type: object - properties: - err: - type: string - description: Error message describing the issue. - example: No file uploaded - security: - - bearerAuth: [] - - /api/v1/doc-hash/revoke: - post: - tags: - - Document Hash - description: Revoke a previously issued document hash on the blockchain. The document hash can be revoked using either the filehash or the identifier. - operationId: revokeDocumentHashOnChain - requestBody: - description: The filehash or identifier of the document hash to revoke (at least one is required). - content: - application/json: - schema: - type: object - properties: - filehash: - type: string - description: The hash of the document (optional if identifier is provided, must start with '0x'). - example: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef' - identifier: - type: string - description: The identifier of the document hash (optional if filehash is provided). - example: stmt:cord:s3dgvtunhXyxg5oBb1QNaqR9NvhF3tnQoLj2jmNBHiW4cYzby:1234567890abcdef - responses: - '200': - description: Document hash revoked successfully. - content: - application/json: - schema: - type: object - properties: - result: - type: object - properties: - msg: - type: string - example: Successfully revoked - description: Indicates the revocation was successful. - '400': - description: Invalid request data (e.g., missing filehash or identifier, document already revoked, or document not revoked successfully). - content: - application/json: - schema: - type: object - properties: - err: - type: string - description: Error message describing the issue. - example: File hash or identifier is required for revoke - security: - - bearerAuth: [] - - /api/v1/doc-hash/update: - put: - tags: - - Document Hash - description: Update an existing document hash on the blockchain. The update requires both the new filehash and the identifier of the existing document hash. - operationId: updateDocumentHashOnChain - requestBody: - description: The new filehash and the identifier of the document hash to update. - content: - application/json: - schema: - type: object - properties: - filehash: - type: string - description: The new hash of the document (must start with '0x'). - example: '0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890' - identifier: - type: string - description: The identifier of the document hash to update. - example: stmt:cord:s3dgvtunhXyxg5oBb1QNaqR9NvhF3tnQoLj2jmNBHiW4cYzby:1234567890abcdef - required: - - filehash - - identifier - responses: - '200': - description: Document hash updated successfully. - content: - application/json: - schema: - type: object - properties: - result: - type: object - properties: - identifier: - type: string - description: The identifier of the updated document hash. - example: stmt:cord:s3dgvtunhXyxg5oBb1QNaqR9NvhF3tnQoLj2jmNBHiW4cYzby:abcdef1234567890 - blockHash: - type: string - description: The block hash where the update was registered. - example: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef' - '400': - description: Invalid request data (e.g., missing filehash or identifier, invalid document, or unable to find the digest). - content: - application/json: - schema: - type: object - properties: - err: - type: string - description: Error message describing the issue. - example: Please enter valid identifier - security: - - bearerAuth: [] - -components: - securitySchemes: - bearerAuth: - type: http - scheme: bearer - bearerFormat: JWT - schemas: - SchemaRequest: - type: object - properties: - schema: - type: object - properties: - title: - type: string - description: Title of the schema (required). - example: Event XYZ Participation - description: - type: string - description: Description of the schema (optional). - example: Description of the title - properties: - type: object - description: Schema properties defining the structure of the credential (required). - additionalProperties: - type: object - properties: - type: - type: string - example: string - required: - type: array - description: List of required fields in the schema (optional). - items: - type: string - required: - - schema - ErrorResponse: - type: object - properties: - error: - type: string - description: Error message describing the issue. - example: Invalid request data - RecordRequest: - type: object - properties: - schemaId: - type: string - description: Identifier of the schema used to issue the credential. - example: schema:cord:s34ouTR2XCJprL48EbkyhNV4SSsbQU9JGN4KhJbAerz6wEVWC - properties: - type: object - description: Credential properties including holder information. - properties: - name: - type: string - example: Jack - email: - type: string - example: jack@dhiway.com - age: - type: number - example: 23 - holderDid: - type: string - description: DID of the credential holder. - example: did:cord:3wCdDiKx3GdRM8p79QYL5EE7NbaiwrL7T2C46QMBfadr9nre - validFrom: - type: string - format: date-time - description: The date and time from which the credential is valid. - example: '2025-03-24T09:02:56.793Z' - validUntil: - type: string - format: date-time - description: The date and time until which the credential is valid. - example: '2025-03-26T09:02:56.793Z' - required: - - schemaId - - properties - UpdateRequest: - type: object - properties: - properties: - type: object - description: Updated credential properties. - properties: - name: - type: string - example: Jack - email: - type: string - example: jack@dhiway.com - age: - type: number - example: 23 diff --git a/docker-compose.yaml b/docker-compose.yaml index 223d553..3acd7d1 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,80 +1,74 @@ -version: '3.8' - services: - dhiagent: - image: dhiway/issuer-agent:latest - container_name: dhiagent - environment: - - PORT=${AGENT_PORT} - - TYPEORM_HOST=${STUDIO_TYPEORM_HOST} - - TYPEORM_PORT=${TYPEORM_PORT} - - TYPEORM_USERNAME=${STUDIO_TYPEORM_USERNAME} - - TYPEORM_PASSWORD=${STUDIO_TYPEORM_PASSWORD} - - TYPEORM_DATABASE=${STUDIO_TYPEORM_DATABASE} - - TYPEORM_AUTO_SCHEMA_SYNC=${STUDIO_TYPEORM_AUTO_SCHEMA_SYNC} - - TYPEORM_ENTITIES=${STUDIO_TYPEORM_ENTITIES} - - TYPEORM_SUBSCRIBERS=${STUDIO_TYPEORM_SUBSCRIBERS} - - TYPEORM_MIGRATIONS=${STUDIO_TYPEORM_MIGRATIONS} - - TYPEORM_ENTITIES_DIR=${STUDIO_TYPEORM_ENTITIES_DIR} - - TYPEORM_MIGRATIONS_DIR=${STUDIO_TYPEORM_MIGRATIONS_DIR} - - TYPEORM_SUBSCRIBERS_DIR=${STUDIO_TYPEORM_SUBSCRIBERS_DIR} - - TYPEORM_LOGGING=${STUDIO_TYPEORM_LOGGING} - - CORD_WSS_URL=${CORD_WSS_URL} - - AUTHOR_URI=${AUTHOR_URI} - - MNEMONIC=${MNEMONIC} - - WALLET_URL=${WALLET_URL} - - AGENT_DID_NAME=${AGENT_DID_NAME} - - CHAIN_SPACE_ID=${CHAIN_SPACE_ID} - - CHAIN_SPACE_AUTH=${CHAIN_SPACE_AUTH} - - WEB_URL=${WEB_URL} - - REQUEST_URL_TOKEN=${REQUEST_URL_TOKEN} - ports: - - ${AGENT_PORT}:${AGENT_PORT} - depends_on: - - postgres42 - networks: - - local - command: node dist/index.js + dhiagent: + image: dhiway/issuer-agent:latest + container_name: dhiagent + environment: + - AGENT_MNEMONIC=${AGENT_MNEMONIC} + - PORT=${AGENT_PORT} + - REDIS_URL=${REDIS_URL} + - REDIS_TIMEOUT=${REDIS_TIMEOUT} + - TYPEORM_HOST=${STUDIO_TYPEORM_HOST} + - TYPEORM_PORT=${TYPEORM_PORT} + - TYPEORM_USERNAME=${STUDIO_TYPEORM_USERNAME} + - TYPEORM_PASSWORD=${STUDIO_TYPEORM_PASSWORD} + - TYPEORM_DATABASE=${STUDIO_TYPEORM_DATABASE} + - TYPEORM_AUTO_SCHEMA_SYNC=${STUDIO_TYPEORM_AUTO_SCHEMA_SYNC} + - TYPEORM_ENTITIES=${STUDIO_TYPEORM_ENTITIES} + - TYPEORM_SUBSCRIBERS=${STUDIO_TYPEORM_SUBSCRIBERS} + - TYPEORM_MIGRATIONS=${STUDIO_TYPEORM_MIGRATIONS} + - TYPEORM_ENTITIES_DIR=${STUDIO_TYPEORM_ENTITIES_DIR} + - TYPEORM_MIGRATIONS_DIR=${STUDIO_TYPEORM_MIGRATIONS_DIR} + - TYPEORM_SUBSCRIBERS_DIR=${STUDIO_TYPEORM_SUBSCRIBERS_DIR} + - TYPEORM_LOGGING=${STUDIO_TYPEORM_LOGGING} + - CORD_WSS_URL=${CORD_WSS_URL} + - AUTHOR_URI=${AUTHOR_URI} + - MNEMONIC=${MNEMONIC} + - WALLET_URL=${WALLET_URL} + - AGENT_DID_NAME=${AGENT_DID_NAME} + - CHAIN_SPACE_ID=${CHAIN_SPACE_ID} + - CHAIN_SPACE_AUTH=${CHAIN_SPACE_AUTH} + - WEB_URL=${WEB_URL} + - REQUEST_URL_TOKEN=${REQUEST_URL_TOKEN} + - NETWORK_ADDRESS=${NETWORK_ADDRESS} + - STASH_ACC_MNEMONIC=${STASH_ACC_MNEMONIC} + ports: + - ${AGENT_PORT}:${AGENT_PORT} + depends_on: + - postgres42 + - redis + networks: + - local + command: node dist/index.js - vc-verify: - image: dhiway/vc-verify-ui:latest - container_name: vc-verify - environment: - - PORT=${VERIFY_PORT} - - TYPEORM_HOST=${STUDIO_TYPEORM_HOST} - - TYPEORM_PORT=${TYPEORM_PORT} - - TYPEORM_USERNAME=${STUDIO_TYPEORM_USERNAME} - - TYPEORM_PASSWORD=${STUDIO_TYPEORM_PASSWORD} - - TYPEORM_DATABASE=${STUDIO_TYPEORM_DATABASE} - ports: - - ${VERIFY_PORT}:${VERIFY_PORT} - depends_on: - - postgres42 - - dhiagent - networks: - - local - command: node dist/index.js + postgres42: + image: postgres:16-alpine + container_name: postgres42 + environment: + POSTGRES_USER: ${STUDIO_TYPEORM_USERNAME} + POSTGRES_PASSWORD: ${STUDIO_TYPEORM_PASSWORD} + POSTGRES_DB: ${STUDIO_TYPEORM_DATABASE} + PGDATA: /var/lib/postgresql/data/pgdata + ports: + - ${STUDIO_TYPEORM_PORT}:${TYPEORM_PORT} + restart: always + volumes: + - postgres-data42:/var/lib/postgresql/data + networks: + - local - postgres42: - image: postgres:14.5-alpine - container_name: postgres42 - environment: - POSTGRES_USER: ${STUDIO_TYPEORM_USERNAME} - POSTGRES_PASSWORD: ${STUDIO_TYPEORM_PASSWORD} - POSTGRES_DB: ${STUDIO_TYPEORM_DATABASE} - PGDATA: /var/lib/postgresql/data/pgdata - ports: - - ${STUDIO_TYPEORM_PORT}:${TYPEORM_PORT} - restart: always - volumes: - - postgres-data42:/var/lib/postgresql/data - networks: - - local + redis: + image: redis:latest + container_name: redis_container + ports: + - '6379:6379' + restart: always + networks: + - local volumes: - postgres-data42: - name: postgres-data42 + postgres-data42: + name: postgres-data42 networks: - local: - name: local + local: + name: local diff --git a/package.json b/package.json index 820bb44..69f5a0f 100644 --- a/package.json +++ b/package.json @@ -1,41 +1,39 @@ { - "name": "issuer-cord", - "version": "1.0.0", - "description": "", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "start": "nodemon src/index.ts", - "dev": "tsc-watch --skipLibCheck --onSuccess \"node ./dist/index.js\"", - "prod": "node ./dist/index.js", - "build": "tsc" - }, - "author": "", - "license": "ISC", - "dependencies": { - "@cord.network/vc-export": "0.9.5-rc3", - "body-parser": "^1.20.2", - "cors": "^2.8.5", - "dotenv": "^16.0.3", - "dayjs": "^1.11.13", - "express": "^4.18.2", - "moment": "^2.30.1", - "nodemon": "^3.1.7", - "pg": "^8.10.0", - "reflect-metadata": "^0.2.2", - "swagger-ui-express": "^5.0.1", - "ts-node": "^10.9.1", - "typeorm": "^0.3.20", - "uuid": "^10.0.0", - "yamljs": "^0.3.0" - }, - "devDependencies": { - "@types/cors": "^2.8.14", - "@types/express": "^4.17.17", - "@types/node": "^22.7.3", - "@types/swagger-ui-express": "^4.1.3", - "@types/uuid": "^10.0.0", - "@types/yamljs": "^0.2.34", - "typescript": "^5.6.2" - }, - "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" + "name": "issuer-agent", + "version": "1.0.0", + "description": "", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "nodemon src/index.ts", + "dev": "tsc-watch --skipLibCheck --onSuccess \"node ./dist/index.js\"", + "prod": "node ./dist/index.js", + "build": "tsc", + "create:stash-account": "ts-node src/controller/create_stash_account.ts" + }, + "author": "", + "license": "ISC", + "dependencies": { + "@cord.network/vc-export": "0.9.6-6", + "doken-precomputer": "0.0.4", + "body-parser": "^1.20.2", + "cors": "^2.8.5", + "dayjs": "^1.11.13", + "express": "^5.1.0", + "moment": "^2.30.1", + "pg": "^8.16.0", + "redis": "^5.5.6", + "reflect-metadata": "^0.2.2", + "typeorm": "^0.3.24", + "uuid": "^11.1.0", + "yamljs": "^0.3.0" + }, + "devDependencies": { + "@types/cors": "^2.8.14", + "@types/express": "^4.17.17", + "@types/node": "^22.7.3", + "@types/uuid": "^10.0.0", + "@types/yamljs": "^0.2.34", + "ts-node": "^10.9.1", + "typescript": "^5.8.3" + } } diff --git a/postman_collection.json b/postman_collection.json index 0309a99..5da36a7 100644 --- a/postman_collection.json +++ b/postman_collection.json @@ -1,193 +1,297 @@ { - "info": { - "_postman_id": "a827fe7c-fad6-4e21-8d18-06b3f6d22d54", - "name": "Issuer_agent", - "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", - "_exporter_id": "30729753", - "_collection_link": "https://martian-comet-644842.postman.co/workspace/dhiway~0c0084e6-99d5-4fca-aa61-441132a5c4ac/collection/30729753-a827fe7c-fad6-4e21-8d18-06b3f6d22d54?action=share&source=collection_link&creator=30729753" - }, - "item": [ - { - "name": "schema", - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\n \"schema\": {\n \"title\": \"Test_224\",\n \"description\": \"Test_22\",\n \"properties\": {\n \"name\": { \"type\": \"string\"},\n \"email\": { \"type\": \"string\"}\n }\n }\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "localhost:5106/api/v1/schema", - "host": [ - "localhost" - ], - "port": "5106", - "path": [ - "api", - "v1", - "schema" - ] - } - }, - "response": [] - }, - { - "name": "getSchema", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "localhost:5106/api/v1/schema/schema:cord:s35s4XMhariXiEDwxJ8GiPqLEhkfchkBkgChchhLY8P2jPimb", - "host": [ - "localhost" - ], - "port": "5106", - "path": [ - "api", - "v1", - "schema", - "schema:cord:s35s4XMhariXiEDwxJ8GiPqLEhkfchkBkgChchhLY8P2jPimb" - ] - } - }, - "response": [] - }, - { - "name": "cred", - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\n \"schemaId\": \"schema:cord:s33ddYcZqR6nSw5smrk84Sj2vtrzmoqXp1C2XxLUs8wg25D2A\",\n \"properties\": {\n \"name\": \"demo22\",\n \"email\": \"demo22@gmail.com\"\n }\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "localhost:5106/api/v1/cred", - "host": [ - "localhost" - ], - "port": "5106", - "path": [ - "api", - "v1", - "cred" - ] - } - }, - "response": [] - }, - { - "name": "getCred", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "localhost:5106/api/v1/cred/stmt:cord:s3bkEJchkHh4x4sbS9L1KYvSxwSuNSWTNcv9yybSDs6S6pNjx", - "host": [ - "localhost" - ], - "port": "5106", - "path": [ - "api", - "v1", - "cred", - "stmt:cord:s3bkEJchkHh4x4sbS9L1KYvSxwSuNSWTNcv9yybSDs6S6pNjx" - ] - } - }, - "response": [] - }, - { - "name": "updateCred", - "request": { - "method": "PUT", - "header": [], - "body": { - "mode": "raw", - "raw": "{\n \"properties\": {\n \"name\": \"test20\",\n \"email\": \"test20@dhiway.com\"\n }\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "localhost:5106/api/v1/cred/update/stmt:cord:s3dZ7iFCeE2CwXQxQTqi41mg5AQjY49SKuqkHZ42gaLJC8rqm", - "host": [ - "localhost" - ], - "port": "5106", - "path": [ - "api", - "v1", - "cred", - "update", - "stmt:cord:s3dZ7iFCeE2CwXQxQTqi41mg5AQjY49SKuqkHZ42gaLJC8rqm" - ] - } - }, - "response": [] - }, - { - "name": "revokeCred", - "request": { - "method": "POST", - "header": [], - "url": { - "raw": "localhost:5106/api/v1/cred/revoke/stmt:cord:s3bkEJchkHh4x4sbS9L1KYvSxwSuNSWTNcv9yybSDs6S6pNjx", - "host": [ - "localhost" - ], - "port": "5106", - "path": [ - "api", - "v1", - "cred", - "revoke", - "stmt:cord:s3bkEJchkHh4x4sbS9L1KYvSxwSuNSWTNcv9yybSDs6S6pNjx" - ] - } - }, - "response": [] - }, - { - "name": "docHash", - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\n \"name\": \"issuer-cord\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\",\n \"start\": \"nodemon src/index.ts\",\n \"dev\": \"tsc-watch --skipLibCheck --onSuccess \\\"node ./dist/index.js\\\"\",\n \"prod\": \"node ./dist/index.js\",\n \"build\": \"tsc\"\n },\n \"author\": \"\",\n \"license\": \"ISC\",\n \"dependencies\": {\n \"@cord.network/sdk\": \"0.9.3-1rc7\",\n \"@cord.network/vc-export\": \"0.9.3-1rc7\",\n \"body-parser\": \"^1.20.2\",\n \"dotenv\": \"^16.0.3\",\n \"express\": \"^4.18.2\",\n \"moment\": \"^2.30.1\",\n \"nodemon\": \"^2.0.21\",\n \"pg\": \"^8.10.0\",\n \"reflect-metadata\": \"^0.1.13\",\n \"swagger-ui-express\": \"^4.6.2\",\n \"ts-node\": \"^10.9.1\",\n \"typeorm\": \"^0.2.31\"\n },\n \"devDependencies\": {\n \"@types/express\": \"^4.17.17\",\n \"@types/node\": \"^20.11.0\",\n \"@types/swagger-ui-express\": \"^4.1.3\",\n \"@types/uuid\": \"^9.0.1\",\n \"typescript\": \"^4.9.2\"\n }\n}\n", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "localhost:5106/api/v1/docHash", - "host": [ - "localhost" - ], - "port": "5106", - "path": [ - "api", - "v1", - "docHash" - ] - } - }, - "response": [] - } - ] -} \ No newline at end of file + "info": { + "_postman_id": "e50691ab-5821-432f-9d29-a6683739d486", + "name": "Issuer_agent", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", + "_exporter_id": "30729753", + "_collection_link": "https://martian-comet-644842.postman.co/workspace/Team-Workspace~a3adf906-907b-46d4-8e8c-0b7a113d870e/collection/30729753-e50691ab-5821-432f-9d29-a6683739d486?action=share&source=collection_link&creator=30729753" + }, + "item": [ + { + "name": "create profile", + "request": { + "method": "POST", + "header": [], + "url": { + "raw": "localhost:5106/api/v1/profile/create", + "host": ["localhost"], + "port": "5106", + "path": ["api", "v1", "profile", "create"] + } + }, + "response": [] + }, + { + "name": "get profile", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "localhost:5106/api/v1/profile/3ybGUky9mQgScUaX7HzhXwuZqEZeA39DyzAgqGox2NH9N3ms", + "host": ["localhost"], + "port": "5106", + "path": [ + "api", + "v1", + "profile", + "3ybGUky9mQgScUaX7HzhXwuZqEZeA39DyzAgqGox2NH9N3ms" + ] + } + }, + "response": [] + }, + { + "name": "redis-stats", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "localhost:5106/api/v1/profile/cache/stats", + "host": ["localhost"], + "port": "5106", + "path": ["api", "v1", "profile", "cache", "stats"] + } + }, + "response": [] + }, + { + "name": "Create Registry", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"address\": \"3xp6Q9eFSn3aePA5dYhiuskk5Z69nHCmzTguSbyw8yE5C52W\",\n \"schema\": {\n \n }\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "localhost:5106/api/v1/registry/create", + "host": ["localhost"], + "port": "5106", + "path": ["api", "v1", "registry", "create"] + } + }, + "response": [] + }, + { + "name": "get registry", + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "auth": { + "type": "noauth" + }, + "method": "GET", + "header": [], + "body": { + "mode": "raw", + "raw": "" + }, + "url": { + "raw": "localhost:5106/api/v1/registry/3xMmUftwiwZMtxwjStuekLDBo7CgmkaYbrL2AZPTtMr7E9Ek", + "host": ["localhost"], + "port": "5106", + "path": [ + "api", + "v1", + "registry", + "3xMmUftwiwZMtxwjStuekLDBo7CgmkaYbrL2AZPTtMr7E9Ek" + ] + } + }, + "response": [] + }, + { + "name": "Issue VC", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "console.log(pm.response)", + "let jsonData = pm.response.json();", + "console.log(\"jsonData\",jsonData)", + "pm.collectionVariables.set(\"identifier\", jsonData.identifier);" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "auth": { + "type": "bearer", + "bearer": [ + { + "key": "token", + "value": "fb5fbd27fecf0ad32398b0e6b2a60853653bdc0d0c576ec976960a14882e9328", + "type": "string" + } + ] + }, + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"schema\": {\n \"title\": \"new_test_schema\",\n \"description\": \"new_test_schema\",\n \"properties\": {\n \"name\":{\n \"type\":\"string\"\n },\n \"email\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"name\",\n \"email\"\n ]\n },\n \"properties\": {\n \"name\": \"redbull\",\n \"email\": \"demo22@gmail.com\"\n },\n \"address\": \"3x9aAdNbHEopR3ES5p7tNKSNLWqUUhcjV6MGLNhQyf8JVByz\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:5106/api/v1/cred", + "protocol": "http", + "host": ["localhost"], + "port": "5106", + "path": ["api", "v1", "cred"] + } + }, + "response": [] + }, + { + "name": "getCred", + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "auth": { + "type": "noauth" + }, + "method": "GET", + "header": [], + "body": { + "mode": "raw", + "raw": "", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:5106/api/v1/cred/JCfskWmkv842qhM1118gyQ8SgTxB9vfPiC9qasttvC3immmUbUbC", + "protocol": "http", + "host": ["localhost"], + "port": "5106", + "path": [ + "api", + "v1", + "cred", + "JCfskWmkv842qhM1118gyQ8SgTxB9vfPiC9qasttvC3immmUbUbC" + ] + } + }, + "response": [] + }, + { + "name": "updateCred", + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"credId\": \"JCfGi36ZHas2WUJPHD1VX6CvYMP8pMvAqrPh5qqkk1kLhmur87Xe\",\n \"properties\": {\n \"name\": \"test20\",\n \"email\": \"test20@dhiway.com\"\n }\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "localhost:5106/api/v1/cred/update", + "host": ["localhost"], + "port": "5106", + "path": ["api", "v1", "cred", "update"] + } + }, + "response": [] + }, + { + "name": "revokeCred", + "request": { + "auth": { + "type": "noauth" + }, + "method": "POST", + "header": [], + "url": { + "raw": "localhost:5106/api/v1/cred/revoke", + "host": ["localhost"], + "port": "5106", + "path": ["api", "v1", "cred", "revoke"] + } + }, + "response": [] + }, + { + "name": "docHash", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"name\": \"issuer-cord\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\",\n \"start\": \"nodemon src/index.ts\",\n \"dev\": \"tsc-watch --skipLibCheck --onSuccess \\\"node ./dist/index.js\\\"\",\n \"prod\": \"node ./dist/index.js\",\n \"build\": \"tsc\"\n },\n \"author\": \"\",\n \"license\": \"ISC\",\n \"dependencies\": {\n \"@cord.network/sdk\": \"0.9.3-1rc7\",\n \"@cord.network/vc-export\": \"0.9.3-1rc7\",\n \"body-parser\": \"^1.20.2\",\n \"dotenv\": \"^16.0.3\",\n \"express\": \"^4.18.2\",\n \"moment\": \"^2.30.1\",\n \"nodemon\": \"^2.0.21\",\n \"pg\": \"^8.10.0\",\n \"reflect-metadata\": \"^0.1.13\",\n \"swagger-ui-express\": \"^4.6.2\",\n \"ts-node\": \"^10.9.1\",\n \"typeorm\": \"^0.2.31\"\n },\n \"devDependencies\": {\n \"@types/express\": \"^4.17.17\",\n \"@types/node\": \"^20.11.0\",\n \"@types/swagger-ui-express\": \"^4.1.3\",\n \"@types/uuid\": \"^9.0.1\",\n \"typescript\": \"^4.9.2\"\n }\n}\n", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "localhost:5106/api/v1/docHash", + "host": ["localhost"], + "port": "5106", + "path": ["api", "v1", "docHash"] + } + }, + "response": [] + } + ], + "event": [ + { + "listen": "prerequest", + "script": { + "type": "text/javascript", + "packages": {}, + "exec": [""] + } + }, + { + "listen": "test", + "script": { + "type": "text/javascript", + "packages": {}, + "exec": [""] + } + } + ], + "variable": [ + { + "key": "schemaId", + "value": "", + "type": "string" + }, + { + "key": "identifier", + "value": "", + "type": "string" + }, + { + "key": "issuer_agent_base_url", + "value": "localhost:5106/api/v1", + "type": "string" + }, + { + "key": "issuer_agent_public_url", + "value": "https://issuer-agent.demo.dhiway.com/api/v1", + "type": "string" + } + ] +} diff --git a/src/controller/create_stash_account.ts b/src/controller/create_stash_account.ts new file mode 100644 index 0000000..bd25ffb --- /dev/null +++ b/src/controller/create_stash_account.ts @@ -0,0 +1,25 @@ +import { createAccount } from '@cord.network/vc-export'; +import { cryptoWaitReady } from '@polkadot/util-crypto'; + +async function main() { + console.log(' Creating new account...'); + await cryptoWaitReady(); + const { account, mnemonic } = createAccount(); + + console.log(`✅ New account created:`); + console.log(` Address: ${account.address}`); + console.log( + ` Public Key: 0x${Buffer.from(account.publicKey).toString('hex')}` + ); + console.log(` Mnemonic: ${mnemonic}`); + console.log( + ':warning: Save the mnemonic securely! It is required to recover the account.' + ); +} +main().catch((error) => { + console.error( + '❌ Unexpected error:', + error instanceof Error ? error.message : error + ); + process.exit(1); +}); diff --git a/src/controller/credential_controller.ts b/src/controller/credential_controller.ts index 8f4f787..2e6dca9 100644 --- a/src/controller/credential_controller.ts +++ b/src/controller/credential_controller.ts @@ -1,102 +1,78 @@ -import express from 'express'; +import { Request, Response } from 'express'; import * as Vc from '@cord.network/vc-export'; import * as Cord from '@cord.network/sdk'; +import { computeEntryDokenId } from 'doken-precomputer'; + +import { dataSource } from '../dbconfig'; import { validateCredential } from '../utils/CredentialValidationUtils'; -import { parseAndFormatDate } from '../utils/DateUtils'; import { - issuerDid, - authorIdentity, - addDelegateAsRegistryDelegate, - issuerKeysProperty, - delegateDid, - delegateSpaceAuth, - delegateKeysProperty, -} from '../init'; - + extractCredentialFields, + getVCValidity, +} from '../utils/CredentialUtils'; +import { Registry } from '../entity/Registry'; import { Cred } from '../entity/Cred'; -import { Schema } from '../entity/Schema'; -import { dataSource } from '../dbconfig'; -import { extractCredentialFields } from '../utils/CredentialUtils'; -const { CHAIN_SPACE_ID, CHAIN_SPACE_AUTH } = process.env; +import { getAccount } from '../helper'; -export async function issueVC(req: express.Request, res: express.Response) { - const authHeader = req.headers.authorization || ''; - const bearerToken = authHeader.startsWith('Bearer ') ? authHeader.slice(7) : null; +export async function issueVC(req: Request, res: Response) { try { + const api = Cord.ConfigService.get('api'); const data = req.body; + const validationError = validateCredential(data); if (validationError) { return res.status(400).json({ error: validationError }); } - if (!authorIdentity) { - await addDelegateAsRegistryDelegate(); - } - const processedData = extractCredentialFields(data); - const schema = await dataSource - .getRepository(Schema) - .findOne({ where: { identifier: processedData.schemaId } }); + const vcValidityObj = getVCValidity(processedData); - if (!schema?.cordSchema) { - return res.status(400).json({ error: 'Schema not found' }); + const { account: issuerAccount, profileId } = await getAccount( + processedData.address + ); + if (!issuerAccount) { + return res.status(400).json({ error: 'Invalid issuerAccount' }); } - const parsedSchema = JSON.parse(schema.cordSchema); - - const holder = - processedData.properties.holderDid || - processedData.properties.id || - issuerDid.uri; - - // Clean up properties object - delete processedData.properties.holderDid; - delete processedData.properties.id; - - const vcValidityObj: Record = {}; - if (processedData.validFrom) { - const formattedDate = parseAndFormatDate(processedData.validFrom); - vcValidityObj.validFrom = formattedDate - ? formattedDate.toISOString() - : ''; - } - if (processedData.validUntil) { - const formattedDate = parseAndFormatDate(processedData.validUntil); - vcValidityObj.validUntil = formattedDate - ? formattedDate.toISOString() - : ''; + const registry = await dataSource.getRepository(Registry).findOne({ + where: { address: issuerAccount.address }, + select: ['registryId'], + }); + if (!registry) { + return res.status(400).json({ + error: 'Registry not found for the provided address', + }); } + const issuerDid = 'did:web:did.myn.social:' + profileId; + const holderDid = processedData.holder ?? issuerDid; // Assuming holder is the same as issuer for this example + const newCredContent = await Vc.buildVcFromContent( - parsedSchema.schema, + processedData.schema as any, processedData.properties, issuerDid, - holder, + holderDid, { - spaceUri: CHAIN_SPACE_ID as `space:cord:${string}`, - schemaUri: schema.identifier, ...vcValidityObj, - metadata: {...data.metadata} + metadata: data.metadata ?? {}, } ); - - const vc: any = await Vc.addProof( + // let proofId = 'PAN-1234'; + const vc = await Vc.addProof( newCredContent, async (data) => ({ - signature: await issuerKeysProperty.assertionMethod.sign(data), - keyType: issuerKeysProperty.assertionMethod.type, - keyUri: `${issuerDid.uri}${issuerDid.assertionMethod![0].id - }` as Cord.DidResourceUri, + signature: issuerAccount.sign(data), + keyType: issuerAccount.type, + keyUri: issuerDid + '#' + issuerAccount.address, }), - issuerDid, - Cord.ConfigService.get('api'), + registry.registryId as string, + issuerAccount.address, + api, { - spaceUri: CHAIN_SPACE_ID as `space:cord:${string}`, - schemaUri: schema.identifier, needSDR: true, - needStatementProof: true, + needEntryProof: true, } + // proofId /* Optional proof-id, example PAN ID */ ); console.dir(vc, { @@ -104,37 +80,42 @@ export async function issueVC(req: express.Request, res: express.Response) { colors: true, }); - const statement = await Cord.Statement.dispatchRegisterToChain( - vc.proof[1], - issuerDid.uri, - authorIdentity, - CHAIN_SPACE_AUTH as `auth:cord:${string}`, - async ({ data }) => ({ - signature: issuerKeysProperty.authentication.sign(data), - keyType: issuerKeysProperty.authentication.type, - }) + // Dispatch the VC to the chain + const proof = Array.isArray(vc.proof) ? vc.proof[1] : vc.proof || {}; + + await Cord.Entry.dispatchCreateEntryToChain( + proof as unknown as Cord.IRegistryEntry, + issuerAccount ); - if (!statement) { - return res.status(400).json({ error: 'Credential not issued' }); - } + const entry = await computeEntryDokenId( + api, + (proof as any).tx_hash, + registry.registryId as string, + issuerAccount.address + ); - const cred = new Cred(); - cred.schemaId = processedData.schemaId; - cred.identifier = statement; - cred.active = true; - cred.fromDid = issuerDid.uri; - cred.credHash = newCredContent.credentialHash; - cred.vc = vc; - cred.token = typeof bearerToken === 'string' && bearerToken.length > 0 ? bearerToken : undefined; + if (entry) { + // Save to DB + const cred = await dataSource.getRepository(Cred).create({ + id: vc.id, + credId: entry, + address: issuerAccount.address, + profileId, + registryId: registry.registryId, + issuerDid, + holderDid, + vc, + }); - await dataSource.manager.save(cred); + await dataSource.manager.save(cred); - return res.status(200).json({ - result: 'success', - identifier: cred.identifier, - vc, - }); + return res.status(200).json({ + result: 'success', + credId: cred.credId, + vc, + }); + } } catch (err: any) { console.error('Error issuing VC:', err); return res.status(500).json({ @@ -171,11 +152,15 @@ export async function issueVC(req: express.Request, res: express.Response) { // return res.status(200).json({ result: 'SUCCESS' }); } -export async function getCredById(req: express.Request, res: express.Response) { +export async function getCredById(req: Request, res: Response) { try { + if (!req.params.id) { + return res.status(400).json({ error: 'Credential ID is required' }); + } + const cred = await dataSource .getRepository(Cred) - .findOne({ where: { identifier: req.params.id } }); + .findOne({ where: { credId: req.params.id } }); if (!cred) { return res.status(400).json({ error: 'Cred not found' }); @@ -188,49 +173,62 @@ export async function getCredById(req: express.Request, res: express.Response) { } } -export async function updateCred(req: express.Request, res: express.Response) { - const data = req.body; - const api = Cord.ConfigService.get('api'); - if (!data.properties || typeof data.properties !== 'object') { - return res.status(400).json({ - error: '"property" is a required field and should be an object', - }); - } - +export async function updateCred(req: Request, res: Response) { try { + const { credId, properties } = req.body; + + const api = Cord.ConfigService.get('api'); + if (!properties || typeof properties !== 'object') { + return res.status(400).json({ + error: '"property" is a required field and should be an object', + }); + } + const cred = await dataSource .getRepository(Cred) - .findOne({ where: { identifier: req.params.id } }); + .findOne({ where: { credId } }); if (!cred) { return res.status(400).json({ error: 'Cred not found' }); } + const { account: issuerAccount } = await getAccount(cred.address as string); + if (!issuerAccount) { + return res.status(400).json({ error: 'Invalid issuerAccount' }); + } + console.log(`\n❄️ Statement Updation `); const updatedCredContent = await Vc.updateVcFromContent( - data.properties, + properties, cred.vc, - undefined, - null + undefined, // validUntil takes from existing VC + { + metadata: req.body.metadata ?? {}, + } ); + const issuerDid = cred.issuerDid; + if (!issuerDid) { + return res + .status(400) + .json({ error: 'Issuer DID not found in credential' }); + } + let updatedVc: any = await Vc.updateAddProof( - cred.identifier as `stmt:cord:${string}`, + cred.registryId as string, + cred.credId as string, updatedCredContent, async (data) => ({ - signature: await issuerKeysProperty.assertionMethod.sign(data), - keyType: issuerKeysProperty.assertionMethod.type, - keyUri: `${issuerDid.uri}${issuerDid.assertionMethod![0].id - }` as Cord.DidResourceUri, + signature: await issuerAccount.sign(data), + keyType: issuerAccount.type, + keyUri: issuerDid + '#' + issuerAccount.address, }), - issuerDid, + issuerAccount.address, api, { - spaceUri: CHAIN_SPACE_ID as `space:cord:${string}`, - schemaUri: cred.schemaId, needSDR: true, - needStatementProof: true, + needEntryProof: true, } ); @@ -239,60 +237,57 @@ export async function updateCred(req: express.Request, res: express.Response) { colors: true, }); - const updatedStatement = await Cord.Statement.dispatchUpdateToChain( - updatedVc.proof[1], - issuerDid.uri, - authorIdentity, - CHAIN_SPACE_AUTH as `auth:cord:${string}`, - async ({ data }) => ({ - signature: issuerKeysProperty.authentication.sign(data), - keyType: issuerKeysProperty.authentication.type, - }) - ); - - console.log(`✅ UpdatedStatement element registered - ${updatedStatement}`); + const updatedProof = updatedVc.proof ? updatedVc.proof[1] : {}; + /* TODO: Check on ideal way to pass entry-id */ + // This is required to know which entry to update + updatedProof.registryEntryId = cred.credId; - if (updatedStatement) { - cred.identifier = updatedStatement; - cred.credHash = updatedCredContent.credentialHash; - cred.vc = updatedVc; + await Cord.Entry.dispatchUpdateEntryToChain(updatedProof, issuerAccount); - await dataSource.manager.save(cred); + // Update the credential in the database + await dataSource.getRepository(Cred).update( + { + credId: cred.credId, + }, + { + vc: updatedVc, + } + ); - console.log('\n✅ Statement updated!'); + console.log('\n✅ Statement updated!'); - return res.status(200).json({ - result: 'Updated successufully', - identifier: cred.identifier, - vc: updatedVc, - }); - } - return res.status(400).json({ error: 'Document not updated' }); + return res.status(200).json({ + result: 'Updated successufully', + credId: cred.credId, + vc: updatedVc, + }); } catch (error) { console.log('error: ', error); return res.status(500).json({ error: 'Error in updating document' }); } } -export async function revokeCred(req: express.Request, res: express.Response) { +export async function revokeCred(req: Request, res: Response) { try { + const { credId } = req.body; + const cred = await dataSource .getRepository(Cred) - .findOne({ where: { identifier: req.params.id } }); + .findOne({ where: { credId } }); if (!cred) { - return res.status(400).json({ error: 'Invalid identifier' }); + return res.status(400).json({ error: 'Cred not found' }); } - await Cord.Statement.dispatchRevokeToChain( - cred.vc.proof[1].elementUri as `stmt:cord:${string}`, - issuerDid.uri, - authorIdentity, - CHAIN_SPACE_AUTH as `auth:cord:${string}`, - async ({ data }) => ({ - signature: issuerKeysProperty.authentication.sign(data), - keyType: issuerKeysProperty.authentication.type, - }) + const { account: issuerAccount } = await getAccount(cred.address as string); + if (!issuerAccount) { + return res.status(400).json({ error: 'Invalid issuerAccount' }); + } + + await Cord.Entry.dispatchRevokeEntryToChain( + cred.registryId as string, + cred.credId as string, + issuerAccount ); console.log(`✅ Statement revoked!`); @@ -304,175 +299,175 @@ export async function revokeCred(req: express.Request, res: express.Response) { } } -export async function documentHashOnChain( - req: express.Request, - res: express.Response -) { - try { - const fileHash = req?.body.filehash; - if (!fileHash) { - return res.status(400).json({ err: 'No file uploaded' }); - } - const api = Cord.ConfigService.get('api'); - - const docProof = await Vc.getCordProofForDigest( - fileHash as `0x${string}`, - issuerDid, - api, - { - spaceUri: CHAIN_SPACE_ID as `space:cord:${string}`, - } - ); - - const statement1 = await Cord.Statement.dispatchRegisterToChain( - docProof, - issuerDid.uri, - authorIdentity, - CHAIN_SPACE_AUTH as `auth:cord:${string}`, - async ({ data }) => ({ - signature: issuerKeysProperty.authentication.sign(data), - keyType: issuerKeysProperty.authentication.type, - }) - ); - - const statementDetails = await api.query.statement.statements( - docProof.identifier - ); - return res.status(200).json({ - result: { - identifier: docProof.identifier, - blockHash: statementDetails.createdAtHash?.toString(), - }, - }); - } catch (error: any) { - console.log('errr: ', error); - return res.status(400).json({ err: error.message ? error.message : error }); - } -} - -export async function revokeDocumentHashOnChain( - req: express.Request, - res: express.Response -) { - try { - const fileHash = req?.body.filehash; - const identifierReq = req?.body.identifier; - let statementUri = ``; - const api = Cord.ConfigService.get('api'); - if (fileHash) { - const space = Cord.Identifier.uriToIdentifier(CHAIN_SPACE_ID); - const identifierencoded = await api.query.statement.identifierLookup( - fileHash as `0x${string}`, - space - ); - const identifier = identifierencoded.toHuman(); - const digest = fileHash.replace(/^0x/, ''); - statementUri = `stmt:cord:${identifier}:${digest}`; - } else if (identifierReq) { - const statementDetails = await Cord.Statement.getDetailsfromChain( - identifierReq - ); - const digest = statementDetails?.digest.replace(/^0x/, ''); - statementUri = `${statementDetails?.uri}:${digest}`; - } else { - return res - .status(400) - .json({ err: 'File hash or identifier is required for revoke' }); - } - const statementStatus = await Cord.Statement.fetchStatementDetailsfromChain( - statementUri as `stmt:cord:${string}` - ); - if (statementStatus?.revoked) { - return res - .status(400) - .json({ err: 'Document is already revoked on chain' }); - } - const revokeResponse = await Cord.Statement.dispatchRevokeToChain( - statementUri as `stmt:cord:${string}`, - issuerDid.uri, - authorIdentity, - CHAIN_SPACE_AUTH as `auth:cord:${string}`, - async ({ data }) => ({ - signature: issuerKeysProperty.authentication.sign(data), - keyType: issuerKeysProperty.authentication.type, - }) - ); - - const statementStatusRevoked = - await Cord.Statement.fetchStatementDetailsfromChain( - statementUri as `stmt:cord:${string}` - ); - if (statementStatusRevoked?.revoked) { - return res.status(200).json({ result: { msg: 'Successfully revoked' } }); - } else { - return res.status(400).json({ err: 'Document not revoked' }); - } - } catch (error: any) { - console.log('errr: ', error); - return res.status(400).json({ err: error.message ? error.message : error }); - } -} - -export async function updateDocumentHashOnChain( - req: express.Request, - res: express.Response -) { - try { - const fileHash = req?.body.filehash; - const identifierReq = req?.body.identifier; - if (!fileHash) { - return res.status(400).json({ err: 'Please enter valid document' }); - } - if (!identifierReq) { - return res.status(400).json({ err: 'Please enter valid identifier' }); - } - const api = Cord.ConfigService.get('api'); - if (!CHAIN_SPACE_ID) { - return res.status(400).json({ err: 'chain space id not' }); - } - const statementDetails = await Cord.Statement.getDetailsfromChain( - identifierReq - ); - if (statementDetails?.digest) { - const digest = statementDetails.digest.replace(/^0x/, ''); - const elementUri = `${statementDetails.uri}:{digest}`; - const updatedStatementEntry = Cord.Statement.buildFromUpdateProperties( - elementUri as `stmt:cord:${string}`, - fileHash, - CHAIN_SPACE_ID as `space:cord:${string}`, - issuerDid.uri - ); - console.dir(updatedStatementEntry, { - depth: null, - colors: true, - }); - - const updatedStatement = await Cord.Statement.dispatchUpdateToChain( - updatedStatementEntry, - issuerDid.uri, - authorIdentity, - CHAIN_SPACE_AUTH as `auth:cord:${string}`, - async ({ data }) => ({ - signature: issuerKeysProperty.authentication.sign(data), - keyType: issuerKeysProperty.authentication.type, - }) - ); - console.log(`✅ Statement element registered - ${updatedStatement}`); - - const updatedStatementDetails = await api.query.statement.statements( - updatedStatementEntry.elementUri - ); - return res.status(200).json({ - result: { - identifier: updatedStatementEntry.elementUri, - blockHash: updatedStatementDetails.createdAtHash?.toString(), - }, - }); - } else { - return res.status(400).json({ err: 'Unable to find the digest' }); - } - } catch (error: any) { - console.log('errr: ', error); - return res.status(400).json({ err: error.message ? error.message : error }); - } -} +// export async function documentHashOnChain( +// req: express.Request, +// res: express.Response +// ) { +// try { +// const fileHash = req?.body.filehash; +// if (!fileHash) { +// return res.status(400).json({ err: 'No file uploaded' }); +// } +// const api = Cord.ConfigService.get('api'); + +// const docProof = await Vc.getCordProofForDigest( +// fileHash as `0x${string}`, +// issuerDid, +// api, +// { +// spaceUri: CHAIN_SPACE_ID as `space:cord:${string}`, +// } +// ); + +// const statement1 = await Cord.Statement.dispatchRegisterToChain( +// docProof, +// issuerDid.uri, +// authorIdentity, +// CHAIN_SPACE_AUTH as `auth:cord:${string}`, +// async ({ data }) => ({ +// signature: issuerKeysProperty.authentication.sign(data), +// keyType: issuerKeysProperty.authentication.type, +// }) +// ); + +// const statementDetails = await api.query.statement.statements( +// docProof.identifier +// ); +// return res.status(200).json({ +// result: { +// identifier: docProof.identifier, +// blockHash: statementDetails.createdAtHash?.toString(), +// }, +// }); +// } catch (error: any) { +// console.log('errr: ', error); +// return res.status(400).json({ err: error.message ? error.message : error }); +// } +// } + +// export async function revokeDocumentHashOnChain( +// req: express.Request, +// res: express.Response +// ) { +// try { +// const fileHash = req?.body.filehash; +// const identifierReq = req?.body.identifier; +// let statementUri = ``; +// const api = Cord.ConfigService.get('api'); +// if (fileHash) { +// const space = Cord.Identifier.uriToIdentifier(CHAIN_SPACE_ID); +// const identifierencoded = await api.query.statement.identifierLookup( +// fileHash as `0x${string}`, +// space +// ); +// const identifier = identifierencoded.toHuman(); +// const digest = fileHash.replace(/^0x/, ''); +// statementUri = `stmt:cord:${identifier}:${digest}`; +// } else if (identifierReq) { +// const statementDetails = await Cord.Statement.getDetailsfromChain( +// identifierReq +// ); +// const digest = statementDetails?.digest.replace(/^0x/, ''); +// statementUri = `${statementDetails?.uri}:${digest}`; +// } else { +// return res +// .status(400) +// .json({ err: 'File hash or identifier is required for revoke' }); +// } +// const statementStatus = await Cord.Statement.fetchStatementDetailsfromChain( +// statementUri as `stmt:cord:${string}` +// ); +// if (statementStatus?.revoked) { +// return res +// .status(400) +// .json({ err: 'Document is already revoked on chain' }); +// } +// const revokeResponse = await Cord.Statement.dispatchRevokeToChain( +// statementUri as `stmt:cord:${string}`, +// issuerDid.uri, +// authorIdentity, +// CHAIN_SPACE_AUTH as `auth:cord:${string}`, +// async ({ data }) => ({ +// signature: issuerKeysProperty.authentication.sign(data), +// keyType: issuerKeysProperty.authentication.type, +// }) +// ); + +// const statementStatusRevoked = +// await Cord.Statement.fetchStatementDetailsfromChain( +// statementUri as `stmt:cord:${string}` +// ); +// if (statementStatusRevoked?.revoked) { +// return res.status(200).json({ result: { msg: 'Successfully revoked' } }); +// } else { +// return res.status(400).json({ err: 'Document not revoked' }); +// } +// } catch (error: any) { +// console.log('errr: ', error); +// return res.status(400).json({ err: error.message ? error.message : error }); +// } +// } + +// export async function updateDocumentHashOnChain( +// req: express.Request, +// res: express.Response +// ) { +// try { +// const fileHash = req?.body.filehash; +// const identifierReq = req?.body.identifier; +// if (!fileHash) { +// return res.status(400).json({ err: 'Please enter valid document' }); +// } +// if (!identifierReq) { +// return res.status(400).json({ err: 'Please enter valid identifier' }); +// } +// const api = Cord.ConfigService.get('api'); +// if (!CHAIN_SPACE_ID) { +// return res.status(400).json({ err: 'chain space id not' }); +// } +// const statementDetails = await Cord.Statement.getDetailsfromChain( +// identifierReq +// ); +// if (statementDetails?.digest) { +// const digest = statementDetails.digest.replace(/^0x/, ''); +// const elementUri = `${statementDetails.uri}:{digest}`; +// const updatedStatementEntry = Cord.Statement.buildFromUpdateProperties( +// elementUri as `stmt:cord:${string}`, +// fileHash, +// CHAIN_SPACE_ID as `space:cord:${string}`, +// issuerDid.uri +// ); +// console.dir(updatedStatementEntry, { +// depth: null, +// colors: true, +// }); + +// const updatedStatement = await Cord.Statement.dispatchUpdateToChain( +// updatedStatementEntry, +// issuerDid.uri, +// authorIdentity, +// CHAIN_SPACE_AUTH as `auth:cord:${string}`, +// async ({ data }) => ({ +// signature: issuerKeysProperty.authentication.sign(data), +// keyType: issuerKeysProperty.authentication.type, +// }) +// ); +// console.log(`✅ Statement element registered - ${updatedStatement}`); + +// const updatedStatementDetails = await api.query.statement.statements( +// updatedStatementEntry.elementUri +// ); +// return res.status(200).json({ +// result: { +// identifier: updatedStatementEntry.elementUri, +// blockHash: updatedStatementDetails.createdAtHash?.toString(), +// }, +// }); +// } else { +// return res.status(400).json({ err: 'Unable to find the digest' }); +// } +// } catch (error: any) { +// console.log('errr: ', error); +// return res.status(400).json({ err: error.message ? error.message : error }); +// } +// } diff --git a/src/controller/did_controller.ts b/src/controller/did_controller.ts deleted file mode 100644 index 0326b22..0000000 --- a/src/controller/did_controller.ts +++ /dev/null @@ -1,134 +0,0 @@ -import * as Cord from '@cord.network/sdk'; -import { encodeAddress } from '@polkadot/util-crypto'; -import { Request, Response } from 'express'; -import express from 'express'; -import 'reflect-metadata'; - -import { processServiceData } from '../utils/DidValidationUtils'; -import { - addDelegateAsRegistryDelegate, - authorIdentity, - createDid, -} from '../init'; - -const { WEB_URL } = process.env; - -export async function generateDid(req: express.Request, res: express.Response) { - try { - if (!authorIdentity) { - await addDelegateAsRegistryDelegate(); - } - const serviceData = req.body.services[0]; - const processedService = processServiceData(serviceData); - const { mnemonic, delegateKeys, document } = await createDid( - authorIdentity, - processedService - ); - - return res.status(200).json({ mnemonic, delegateKeys, document }); - } catch (error) { - console.log('err: ', error); - return res.status(500).json({ error: 'Did not created' }); - } -} - -export async function resolveDid(req: Request, res: Response) { - try { - const didUri = `did:cord:${req.params.id}`; - const didDoc = await resolve2Did(didUri); - - if (!didDoc) { - return res.status(404).json({ error: 'DID document not found' }); - } - - const webDid = didDoc.uri.replace('did:cord', `did:web:${WEB_URL}`); - const context = [ - 'https://www.w3.org/ns/did/v1', - 'https://w3id.org/security/suites/ed25519-2020/v1', - ]; - - const { authentication, assertionMethod } = didDoc; - const verificationMethod = []; - - // Process authentication method - if (authentication?.[0]) { - const [authMethod] = authentication; - delete authMethod.publicKey; - const authEntry = createVerificationMethod(authMethod, webDid, 'auth'); - verificationMethod.push(authEntry); - didDoc.authentication = [authEntry.id]; - } - - // Process assertion method - if (assertionMethod?.[0]) { - const [assertMethod] = assertionMethod; - delete assertMethod.publicKey; - const assertEntry = createVerificationMethod( - assertMethod, - webDid, - 'assert' - ); - verificationMethod.push(assertEntry); - didDoc.assertionMethod = [assertEntry.id]; - } - - const resolvedDocument = { - '@context': context, - ...didDoc, - id: webDid, - verificationMethod, - }; - - // Remove unwanted properties - const { - uri, - service, - capabilityDelegation, - keyAgreement, - ...cleanDocument - } = resolvedDocument; - - return res.status(200).json(cleanDocument); - } catch (error) { - console.error('DID resolution error:', error); - return res.status(500).json({ error: 'DID resolution failed' }); - } -} - -export async function resolve2Did(didUri: string) { - try { - const resolved = await Cord.Did.resolve(didUri as `did:cord:3${string}`); - if (!resolved?.document) return null; - - const processKey = (method: any) => { - const publicKeyHex = Cord.u8aToHex(method.publicKey); - return { - ...method, - publicKeyHex, - publicKeyMultibase: `z${encodeAddress(publicKeyHex)}`, - }; - }; - - return { - ...resolved.document, - authentication: resolved.document.authentication?.map(processKey), - assertionMethod: resolved.document.assertionMethod?.map(processKey), - }; - } catch (error) { - console.error('DID processing error:', error); - return null; - } -} - -function createVerificationMethod( - method: any, - controller: string, - type: 'auth' | 'assert' -) { - return { - ...method, - type: 'Ed25519VerificationKey2020', - id: `${controller}#${type}-key`, - controller, - }; -} diff --git a/src/controller/profile_controller.ts b/src/controller/profile_controller.ts new file mode 100644 index 0000000..d88835c --- /dev/null +++ b/src/controller/profile_controller.ts @@ -0,0 +1,351 @@ +import * as Cord from '@cord.network/sdk'; +import { createAccount } from '@cord.network/vc-export'; +import { Request, Response } from 'express'; +import { blake2AsHex } from '@polkadot/util-crypto'; +import { computeProfileDokenId } from 'doken-precomputer'; + +import { cacheUserData } from './redis_controller'; +import { Profile } from '../entity/Profile'; +import { dataSource } from '../dbconfig'; +import { studio_encrypt } from '../identity/org'; + +const { STASH_ACC_MNEMONIC } = process.env; +const TRANSFER_AMOUNT = 100 * 10 ** 12; // 100 WAY for transactions + +interface CreateProfileResponse { + message: string; + profileId: string; + address: string; + mnemonic: string; + publicKey: string; + createdAt?: number; +} + +interface GetProfileResponse { + profileId: string; + address: string; + exists: boolean; + cachedAt?: number; + source?: 'chain' | 'database' | 'cache'; +} + +interface RawProfileData { + pub_name: string; +} + +async function getExistingProfile(address: string): Promise { + return await cacheUserData(`profile_${address}`, async () => { + console.log(`🔍 Fetching profile from chain for ${address}...`); + const api = Cord.ConfigService.get('api'); + const profileDokenId = await computeProfileDokenId(api, address); + + if (!profileDokenId) { + return null; + } + + console.log(`✅ Profile found: ${profileDokenId}`); + return profileDokenId; + }); +} + +async function getProfileFromDatabase(address: string): Promise { + try { + console.log(`🔍 Fetching profile from database for ${address}...`); + const profile = await dataSource.manager.findOne(Profile, { + where: { address }, + }); + + if (profile) { + console.log(`✅ Profile found in database: ${profile.profileId}`); + return profile.profileId as string; + } + + console.log(`❌ No profile found in database for ${address}`); + return null; + } catch (error) { + console.error(`❌ Database query failed for ${address}:`, error); + throw error; + } +} + +async function getProfileWithFallback(address: string): Promise<{ + profileId: string | null; + source: 'chain' | 'database' | 'cache'; +}> { + // First, try to get from chain (which includes Redis cache) + try { + const profileId = await getExistingProfile(address); + + if (profileId) { + return { + profileId, + source: 'chain', // This could be cache or chain, but chain is the primary source + }; + } + + // If no profile found on chain, try database fallback + console.log( + `⚠️ No profile found on chain for ${address}, trying database fallback...` + ); + + const dbProfileId = await getProfileFromDatabase(address); + return { + profileId: dbProfileId, + source: 'database', + }; + } catch (dbError) { + console.error(`❌ Both chain and database fetch failed for ${address}:`, { + dbError: dbError instanceof Error ? dbError.message : dbError, + }); + + return { + profileId: null, + source: 'database', + }; + } +} + +async function fundAccount( + api: any, + accountAddress: string, + amount: number +): Promise { + console.log(`💸 Funding account ${accountAddress}...`); + + const stashAccount = createAccount(STASH_ACC_MNEMONIC); + if (!stashAccount || !stashAccount.account) { + throw new Error('Failed to create stash account'); + } + + return new Promise((resolve, reject) => { + let resolved = false; + + const timeout = setTimeout(() => { + if (!resolved) { + resolved = true; + reject(new Error('Transaction timeout after 30 seconds')); + } + }, 30000); + + api.tx.balances + .transferKeepAlive(accountAddress, amount) + .signAndSend(stashAccount.account, async (result: any) => { + try { + if (resolved) return; + + if (result.status.isInBlock) { + resolved = true; + clearTimeout(timeout); + console.log( + `✅ Account ${accountAddress} funded with ${ + amount / 10 ** 12 + } WAY (in block)` + ); + resolve(); + } + + if (result.isError) { + resolved = true; + clearTimeout(timeout); + reject(new Error(`Transaction failed: ${result.toString()}`)); + } + } catch (error) { + if (!resolved) { + resolved = true; + clearTimeout(timeout); + reject(error); + } + } + }) + .catch((error: Error) => { + if (!resolved) { + resolved = true; + clearTimeout(timeout); + console.error(`❌ Failed to fund account ${accountAddress}`); + reject(error); + } + }); + }); +} + +async function createProfileOnChain( + account: any, + profileData: RawProfileData +): Promise { + console.log(`📝 Creating profile for ${account.address}...`); + + // Hash profile data + const hashedProfileData: [string, string][] = Object.entries(profileData).map( + ([key, value]) => [key, blake2AsHex(value)] as [string, string] + ); + + // Create profile on chain + await Cord.Profile.dispatchSetProfileToChain(hashedProfileData, account); + console.log('✅ Profile created successfully'); + + // Query for profile with retry for profile ID + let retries = 5; + while (retries > 0) { + try { + const profileId = await getExistingProfile(account.address); + + if (profileId) { + console.log(`✅ Profile ID confirmed: ${profileId}`); + return profileId; + } + + // Wait before retry + await new Promise((resolve) => setTimeout(resolve, 2000)); + retries--; + } catch (error) { + retries--; + if (retries === 0) { + throw error; + } + await new Promise((resolve) => setTimeout(resolve, 2000)); + } + } + + throw new Error( + `No profile found for account ${account.address} after retries` + ); +} + +export async function getProfile( + req: Request, + res: Response +): Promise { + try { + const { address } = req.params; + + if (!address) { + return res.status(400).json({ + error: 'Address parameter is required', + }); + } + + // Use fallback strategy to get profile + const { profileId, source } = await getProfileWithFallback(address); + + if (profileId) { + return res.status(200).json({ + profileId, + address, + exists: true, + cachedAt: Date.now(), + source, + } as GetProfileResponse); + } else { + return res.status(404).json({ + profileId: null, + address, + exists: false, + message: 'No profile found for this address in chain or database', + source, + }); + } + } catch (error) { + console.error('❌ Failed to get profile:', error); + return res.status(500).json({ + error: 'Failed to get profile', + details: error instanceof Error ? error.message : 'Unknown error', + }); + } +} + +export async function createProfile( + req: Request, + res: Response +): Promise { + try { + const api = Cord.ConfigService.get('api'); + if (!api) { + return res.status(500).json({ + error: 'Failed to initialize Cord API', + }); + } + + // Create new account + const { account, mnemonic } = createAccount(); + if (!account || !mnemonic) { + return res.status(500).json({ + error: 'Failed to create account. Please try again.', + }); + } + + const encryptedMnemonic = JSON.stringify(await studio_encrypt(mnemonic)); + console.log(`🚀 Creating new profile for ${account.address}`); + + // Fund account + await fundAccount(api, account.address, TRANSFER_AMOUNT); + + const rawProfileData: RawProfileData = { + pub_name: 'Issuer', + }; + + // Create profile + const profileId = await createProfileOnChain(account, rawProfileData); + console.log(`✅ Profile created with ID: ${profileId}`); + + // Save profile to database + const profile = await dataSource.getRepository(Profile).create({ + profileId, + address: account.address, + publicKey: `0x${Buffer.from(account.publicKey).toString('hex')}`, + mnemonic: encryptedMnemonic, + }); + + await dataSource.manager.save(profile); + console.log(`✅ Profile saved to database with ID: ${profileId}`); + + const profileResponse: CreateProfileResponse = { + message: 'Profile created successfully', + profileId, + address: account.address, + mnemonic, + publicKey: `0x${Buffer.from(account.publicKey).toString('hex')}`, + createdAt: Date.now(), + }; + + return res.status(201).json(profileResponse); + } catch (error) { + console.error( + '❌ Profile creation failed:', + error instanceof Error ? error.message : error + ); + + return res.status(500).json({ + error: 'Profile creation failed', + details: + error instanceof Error ? error.message : 'Unknown error occurred', + }); + } +} + +export async function getCacheStats( + req: Request, + res: Response +): Promise { + try { + const client = (await import('../redis_client')).default; + + const hits = (await client.get('cache_hits')) || '0'; + const misses = (await client.get('cache_misses')) || '0'; + const totalRequests = parseInt(hits) + parseInt(misses); + const hitRate = + totalRequests > 0 ? (parseInt(hits) / totalRequests) * 100 : 0; + + return res.status(200).json({ + cacheHits: parseInt(hits), + cacheMisses: parseInt(misses), + totalRequests, + hitRate: `${hitRate.toFixed(2)}%`, + timestamp: Date.now(), + }); + } catch (error) { + return res.status(500).json({ + error: 'Failed to get cache stats', + details: error instanceof Error ? error.message : 'Unknown error', + }); + } +} diff --git a/src/controller/redis_controller.ts b/src/controller/redis_controller.ts new file mode 100644 index 0000000..f046512 --- /dev/null +++ b/src/controller/redis_controller.ts @@ -0,0 +1,51 @@ +import client from "../redis_client"; + +const { REDIS_TIMEOUT } = process.env; + +export async function getOrSetCache( + key: string, + cb: () => Promise, + expiresInSeconds: number +) { + try { + // Check if data is in cache + const cachedData = await client.get(key); + if (cachedData) { + console.log(`Using chached data for ${key}`); + await client.incr('cache_hits'); + return JSON.parse(cachedData); + } + + await client.incr('cache_misses'); + // Fetch fresh data if not in cache + console.log(`Fetching fresh data for ${key}`); + const freshData = await cb(); + await client.setEx(key, expiresInSeconds, JSON.stringify(freshData)); + return freshData; + } catch (error) { + console.error('Error accessing Redis cache:', error); + throw error; + } +} + +export async function cacheUserData( + key: string, + fetchFunction: () => Promise, + expiresInSeconds?: number +) { + const expiration = expiresInSeconds ?? parseInt(REDIS_TIMEOUT || '1800', 10); + return await getOrSetCache(`key:${key}`, fetchFunction, expiration); +} + +export async function updateRedisCache(key: string, data: T) { + try { + await client.setEx( + `key:${key}`, + REDIS_TIMEOUT as any, + JSON.stringify(data) + ); + console.log(`Redis cache updated for key: ${key}`); + } catch (error) { + console.error(`Failed to update Redis cache for key: ${key}`, error); + } +} diff --git a/src/controller/registry_controller.ts b/src/controller/registry_controller.ts new file mode 100644 index 0000000..2486bc3 --- /dev/null +++ b/src/controller/registry_controller.ts @@ -0,0 +1,91 @@ +import * as Cord from '@cord.network/sdk'; +import { Request, Response } from 'express'; +import { CordKeyringPair } from '@cord.network/types'; +import { computeRegistryDokenId } from 'doken-precomputer'; + +import { dataSource } from '../dbconfig'; +import { Registry } from '../entity/Registry'; +import { getAccount } from '../helper'; + +export async function createRegistry(req: Request, res: Response) { + try { + const { schema, address } = req.body; + const api = Cord.ConfigService.get('api'); + + console.log('\n🔄 Creating registry...'); + + const { account: issuerAccount } = await getAccount(address); + if (!issuerAccount) { + return res.status(400).json({ error: 'Invalid issuer account' }); + } + + const registryBlob = { + title: 'Issuer_agent registry', + schema: JSON.stringify(schema), + date: new Date().toISOString(), + }; + + const registryStringifiedBlob = JSON.stringify(registryBlob); + const registryTxHash = await Cord.Registry.getDigestFromRawData( + registryStringifiedBlob + ); + + const registryProperties = await Cord.Registry.registryCreateProperties( + registryTxHash, + null // no blob + ); + + const registryDokenId = await computeRegistryDokenId( + api, + registryTxHash, + issuerAccount.address + ); + if (!registryDokenId) { + return res.status(400).json({ error: 'Failed to create registry' }); + } + + await Cord.Registry.dispatchCreateToChain( + registryProperties, + issuerAccount as CordKeyringPair + ); + + const registryRepository = dataSource.getRepository(Registry); + const registry = await registryRepository.create({ + registryId: registryDokenId, + schema: JSON.stringify(schema), + address: issuerAccount.address, + }); + + await dataSource.manager.save(registry); + console.log(`✅ Registry created with URI: ${registry.registryId}`); + + return res.status(201).json({ + message: 'Registry created successfully', + registryId: registry.registryId, + schema: registry.schema, + }); + } catch (error) { + console.error('Error creating registry:', error); + res.status(500).json({ error: 'Failed to create registry' }); + } +} + +export async function getRegistry(req: Request, res: Response) { + try { + if (!req.params.id) { + return res.status(400).json({ error: 'Registry ID is required' }); + } + const registry = await dataSource + .getRepository(Registry) + .findOne({ where: { registryId: req.params.id } }); + + if (!registry) { + return res.status(404).json({ error: 'Registry not found' }); + } + + return res.status(200).json(registry); + } catch (error) { + console.error('Error fetching registry:', error); + return res.status(500).json({ error: 'Failed to fetch registry' }); + } +} diff --git a/src/controller/schema_controller.ts b/src/controller/schema_controller.ts deleted file mode 100644 index 44829df..0000000 --- a/src/controller/schema_controller.ts +++ /dev/null @@ -1,103 +0,0 @@ -import 'reflect-metadata'; -import * as Cord from '@cord.network/sdk'; -import express from 'express'; - -import { validateSchema } from '../utils/SchemaValidationUtils'; -import { extractSchemaFields } from '../utils/SchemaUtils'; -import { Schema } from '../entity/Schema'; - -import { - addDelegateAsRegistryDelegate, - authorIdentity, - issuerDid, - issuerKeysProperty, -} from '../init'; -import { dataSource } from '../dbconfig'; - -const { CHAIN_SPACE_ID, CHAIN_SPACE_AUTH } = process.env; - -export async function createSchema( - req: express.Request, - res: express.Response -) { - try { - if (!authorIdentity) { - await addDelegateAsRegistryDelegate(); - } - - let data = req.body.schema?.schema || req.body.schema || null; - - const validationError = validateSchema(data); - if (validationError) { - return res.status(400).json({ error: validationError }); - } - - data = extractSchemaFields(data); - - let newSchemaName = data.title + ':' + Cord.Utils.UUID.generate(); - data.title = newSchemaName; - - let schemaDetails = await Cord.Schema.buildFromProperties( - data, - CHAIN_SPACE_ID as `space:cord:${string}`, - issuerDid.uri - ); - - console.dir(schemaDetails, { - depth: null, - colors: true, - }); - - const schemaUri = await Cord.Schema.dispatchToChain( - schemaDetails.schema, - issuerDid.uri, - authorIdentity, - CHAIN_SPACE_AUTH as `auth:cord:${string}`, - async ({ data }) => ({ - signature: issuerKeysProperty.authentication.sign(data), - keyType: issuerKeysProperty.authentication.type, - }) - ); - console.log(`✅ Schema - ${schemaUri} - added!`); - - if (schemaDetails) { - const schemaData = new Schema(); - schemaData.identifier = schemaUri; - schemaData.title = data.title ? data.title : ''; - schemaData.description = data.description ? data.description : ''; - schemaData.schemaProperties = data.properties; - schemaData.cordSchema = JSON.stringify(schemaDetails); - schemaData.requiredFields = data.required; - - await dataSource.manager.save(schemaData); - return res.status(200).json({ - result: 'SUCCESS', - schemaId: schemaData.identifier, - }); - } - return res.status(400).json({ error: 'SchemaDetails not created' }); - } catch (error) { - console.log('err: ', error); - return res.status(500).json({ error: 'Schema not created' }); - } -} - -export async function getSchemaById( - req: express.Request, - res: express.Response -) { - try { - const schema = await dataSource - .getRepository(Schema) - .findOne({ where: { identifier: req.params.id } }); - - if (!schema) { - return res.status(400).json({ error: 'Schema not found' }); - } - - return res.status(200).json({ schema: schema }); - } catch (error) { - console.log('err: ', error); - return res.status(500).json({ error: 'Error Fetching Schema' }); - } -} diff --git a/src/cord.ts b/src/cord.ts new file mode 100644 index 0000000..f61c1f4 --- /dev/null +++ b/src/cord.ts @@ -0,0 +1,16 @@ +import * as Cord from '@cord.network/sdk'; + +const { NETWORK_ADDRESS } = process.env; + +export async function checkDidAndIdentities() { + const networkAddress = NETWORK_ADDRESS || 'ws://127.0.0.1:9944'; + if (!networkAddress) { + throw new Error( + 'Network address is not defined. Please set NETWORK_ADDRESS.' + ); + } + Cord.ConfigService.set({ submitTxResolveOn: Cord.Chain.IS_IN_BLOCK }); + await Cord.connect(networkAddress); + console.log(`✅ Connected to CORD at ${networkAddress}`); + return; +} diff --git a/src/entity/Cred.ts b/src/entity/Cred.ts index f1b9560..ff64dd5 100644 --- a/src/entity/Cred.ts +++ b/src/entity/Cred.ts @@ -10,7 +10,7 @@ import { import { v4 as uuidv4 } from 'uuid'; @Entity() -@Unique(['identifier', 'credHash']) +@Unique(['credId']) export class Cred { @BeforeInsert() generateId() { @@ -23,19 +23,25 @@ export class Cred { id?: string; @Column() - active?: boolean; + credId?: string; + + @Column() + address?: string; @Column() - schemaId?: string; + profileId?: string; @Column() - identifier?: string; + registryId?: string; + + @Column({ default: true }) + active?: boolean; @Column() - fromDid?: string; + issuerDid?: string; @Column() - credHash?: string; + holderDid?: string; @Column('simple-json', { nullable: true, default: null }) vc?: any; diff --git a/src/entity/Profile.ts b/src/entity/Profile.ts new file mode 100644 index 0000000..517fcc2 --- /dev/null +++ b/src/entity/Profile.ts @@ -0,0 +1,42 @@ +import { + Entity, + PrimaryColumn, + Column, + BeforeInsert, + CreateDateColumn, + UpdateDateColumn, + Unique, +} from 'typeorm'; +import 'reflect-metadata'; +import { v4 as uuidv4 } from 'uuid'; + +@Entity() +@Unique(['profileId', 'mnemonic']) +export class Profile { + @BeforeInsert() + generateId() { + if (!this.id) { + this.id = 'p' + uuidv4(); + } + } + @PrimaryColumn() + id?: string; + + @Column() + profileId?: string; + + @Column() + address?: string; + + @Column() + publicKey?: string; + + @Column() + mnemonic?: string; + + @CreateDateColumn({ name: 'created_at' }) + createdAt?: Date; + + @UpdateDateColumn({ name: 'updated_at' }) + updatedAt?: Date; +} diff --git a/src/entity/Registry.ts b/src/entity/Registry.ts new file mode 100644 index 0000000..4886a85 --- /dev/null +++ b/src/entity/Registry.ts @@ -0,0 +1,39 @@ +import { + Entity, + PrimaryColumn, + Column, + BeforeInsert, + CreateDateColumn, + UpdateDateColumn, + Unique, +} from 'typeorm'; +import 'reflect-metadata'; +import { v4 as uuidv4 } from 'uuid'; + +@Entity() +@Unique(['registryId']) +export class Registry { + @BeforeInsert() + generateId() { + if (!this.id) { + this.id = 'r' + uuidv4(); + } + } + @PrimaryColumn() + id?: string; + + @Column() + registryId?: string; + + @Column() + address?: string; + + @Column('simple-json', { nullable: true, default: null }) + schema?: any; + + @CreateDateColumn({ name: 'created_at' }) + createdAt?: Date; + + @UpdateDateColumn({ name: 'updated_at' }) + updatedAt?: Date; +} diff --git a/src/entity/Schema.ts b/src/entity/Schema.ts deleted file mode 100644 index 1f64bef..0000000 --- a/src/entity/Schema.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Entity, PrimaryColumn, Column, BeforeInsert, Unique } from "typeorm"; -import "reflect-metadata"; -import { v4 as uuidv4 } from "uuid"; - -@Entity() -export class Schema { - @BeforeInsert() - generateId() { - if (!this.id) { - this.id = "s" + uuidv4(); - } - } - @PrimaryColumn() - id?: string; - - @Column({ nullable: true }) - identifier?: string; - - @Column() - title?: string; - - @Column() - description?: string; - - @Column() - cordSchema?: string; - - @Column() - schemaProperties?: string; - - @Column({ default: null, nullable: true }) - requiredFields?: string -} diff --git a/src/helper.ts b/src/helper.ts new file mode 100644 index 0000000..e21cd82 --- /dev/null +++ b/src/helper.ts @@ -0,0 +1,36 @@ +import { createAccount } from '@cord.network/vc-export'; +import { dataSource } from './dbconfig'; +import { Profile } from './entity/Profile'; +import { cacheUserData } from './controller/redis_controller'; +import { studio_decrypt } from './identity/org'; + +export async function getAccount(address: string) { + const profile = await dataSource.getRepository(Profile).findOne({ + where: { address }, + }); + if (!profile) { + throw new Error('Profile not found for the provided address'); + } + + const mnemonicEncrypted = profile.mnemonic as string; + const issuerAccountMnemonic = await cacheUserData( + mnemonicEncrypted, + async () => { + const decryptedMnemonic = await studio_decrypt( + JSON.parse(mnemonicEncrypted) + ); + if (!decryptedMnemonic) { + throw new Error('Failed to decrypt issuer account mnemonic'); + } + return decryptedMnemonic; + } + ); + + // Found out that accessing account directly is faster compared to destructuring + const account = createAccount(issuerAccountMnemonic).account; + if (!account) { + throw new Error('Failed to create account. Please try again.'); + } + + return { account, profileId: profile.profileId }; +} diff --git a/src/identity/SDKErrors.ts b/src/identity/SDKErrors.ts new file mode 100644 index 0000000..9e9f779 --- /dev/null +++ b/src/identity/SDKErrors.ts @@ -0,0 +1,26 @@ +export class SDKError extends Error { + public errorCode: ErrorCode; + + public constructor(errorCode: ErrorCode, message: string) { + super(message); + this.errorCode = errorCode; + } +} +export enum ErrorCode { + /* eslint-disable no-unused-vars */ + ERROR_MNEMONIC_PHRASE_MALFORMED = 20012, + ERROR_MNEMONIC_PHRASE_INVALID = 30008, +} +export const ERROR_MNEMONIC_PHRASE_MALFORMED: () => SDKError = () => { + return new SDKError( + ErrorCode.ERROR_MNEMONIC_PHRASE_MALFORMED, + 'Mnemonic phrase malformed or too short' + ); +}; + +export const ERROR_MNEMONIC_PHRASE_INVALID: () => SDKError = () => { + return new SDKError( + ErrorCode.ERROR_MNEMONIC_PHRASE_INVALID, + 'Mnemonic phrase invalid' + ); +}; diff --git a/src/identity/org.ts b/src/identity/org.ts new file mode 100644 index 0000000..867009f --- /dev/null +++ b/src/identity/org.ts @@ -0,0 +1,103 @@ +import { cryptoWaitReady } from '@polkadot/util-crypto'; +import { Keyring } from '@polkadot/keyring'; +import { KeyringInstance, KeyringPair } from '@polkadot/keyring/types'; +import { + mnemonicToMiniSecret, + mnemonicGenerate, + naclDecrypt, + naclEncrypt, +} from '@polkadot/util-crypto'; +import { stringToU8a, u8aToString, u8aToHex, hexToU8a } from '@polkadot/util'; +import nacl, { BoxKeyPair } from 'tweetnacl'; + +const { AGENT_MNEMONIC } = process.env; + +export type Identity = { + key: KeyringPair; + boxPair: BoxKeyPair; +}; + +export type EncryptedString = { + encrypt: string; + nonce: string; +}; + +let studio_identity: Identity; + +let keyring: KeyringInstance; + +studio_identity_init(AGENT_MNEMONIC!); + +async function keyringInit() { + await cryptoWaitReady(); + + keyring = new Keyring({ type: 'sr25519', ss58Format: 29 }); +} + +async function generateNewKey(phrase: string) { + if (!keyring) { + await keyringInit(); + } + const seed = mnemonicToMiniSecret(phrase); + return { + key: keyring.addFromSeed(seed), + boxPair: nacl.box.keyPair.fromSecretKey(seed), + }; +} + +export async function studio_identity_init(mnemonic: string) { + studio_identity = await generateNewKey(mnemonic); +} + +export async function org_identity_create() { + const mnemonic = mnemonicGenerate(); + const org: [string, Identity] = [mnemonic, await generateNewKey(mnemonic)]; + return org; +} + +export async function encrypt(key: Identity, u8data: Buffer) { + //const u8data = stringToU8a(data); + const { encrypted, nonce } = naclEncrypt(u8data, key.boxPair.secretKey); + return { encrypt: u8aToHex(encrypted), nonce: u8aToHex(nonce) }; +} + +export async function decrypt(key: Identity, encrypted: EncryptedString) { + const decrypt = naclDecrypt( + hexToU8a(encrypted.encrypt), + hexToU8a(encrypted.nonce), + key.boxPair.secretKey + ); + return decrypt; +} + +export async function studio_encrypt(mnemonic: string) { + const u8data = stringToU8a(mnemonic); + const { encrypted, nonce } = naclEncrypt( + u8data, + studio_identity.boxPair.secretKey + ); + return { encrypt: u8aToHex(encrypted), nonce: u8aToHex(nonce) }; +} + +export async function studio_decrypt(encrypted: EncryptedString) { + const decrypt = naclDecrypt( + hexToU8a(encrypted.encrypt), + hexToU8a(encrypted.nonce), + studio_identity.boxPair.secretKey + ); + return u8aToString(decrypt); +} + +export async function org_identity_from_mnemonic(mnemonic: string) { + return await generateNewKey(mnemonic); +} + +export async function org_identity_from_encrypted_mnemonic( + encrypted: EncryptedString +) { + const mnemonic = await studio_decrypt(encrypted); + if (mnemonic) { + return await generateNewKey(mnemonic); + } + return null; +} diff --git a/src/identity/util/jsonabc.d.ts b/src/identity/util/jsonabc.d.ts new file mode 100644 index 0000000..4b8074c --- /dev/null +++ b/src/identity/util/jsonabc.d.ts @@ -0,0 +1,21 @@ +// Type definitions for jsonabc 2.3 +// Project: http://novicelab.org/jsonabc +// Definitions by: Florian Keller +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.2 +/* eslint-disable */ + +/** + * Sort the JSON (clean, parse, sort, stringify). + * @param noArray Sort or don't sort arrays + */ +export function sort(inputStr: string, noArray?: boolean): string; + +/** + * Sort the JSON (clean, parse, sort, stringify). + * @param noArray Sort or don't sort arrays + */ +export function sortObj(input: T, noArray?: boolean): T; + +/** Remove trailing commas */ +export function cleanJSON(input: string): string; diff --git a/src/identity/util/jsonabc.js b/src/identity/util/jsonabc.js new file mode 100644 index 0000000..01d67ee --- /dev/null +++ b/src/identity/util/jsonabc.js @@ -0,0 +1,94 @@ +// Taken from https://github.com/ShivrajRath/jsonabc/blob/2ccf15f967f0e44e48fb7b163aebef43c0047166/index.js +// Copied here, because the package defines a browser compatible script, but doesn't create it, +// which leads to it failing in react-native. See https://github.com/ShivrajRath/jsonabc/issues/18 +/* eslint-disable */ + +/*! + JSON ABC | License: MIT. +*/ + +module.exports = { + sort: sort, + sortObj: sortObj, + cleanJSON: cleanJSON, +}; + +// Is a value an array? +function isArray(val) { + return Object.prototype.toString.call(val) === '[object Array]'; +} + +// Is a value an Object? +function isPlainObject(val) { + return Object.prototype.toString.call(val) === '[object Object]'; +} + +// Sorting Logic +function sortObj(un, noarray) { + noarray = noarray || false; + + var or = {}; + + if (isArray(un)) { + // Sort or don't sort arrays + if (noarray) { + or = un; + } else { + or = un.sort(); + } + + or.forEach(function (v, i) { + or[i] = sortObj(v, noarray); + }); + + if (!noarray) { + or = or.sort(function (a, b) { + a = JSON.stringify(a); + b = JSON.stringify(b); + return a < b ? -1 : a > b ? 1 : 0; + }); + } + } else if (isPlainObject(un)) { + or = {}; + Object.keys(un) + .sort(function (a, b) { + if (a.toLowerCase() < b.toLowerCase()) return -1; + if (a.toLowerCase() > b.toLowerCase()) return 1; + return 0; + }) + .forEach(function (key) { + or[key] = sortObj(un[key], noarray); + }); + } else { + or = un; + } + + return or; +} + +// Remove trailing commas +function cleanJSON(input) { + input = input.replace(/,[ \t\r\n]+}/g, '}'); + input = input.replace(/,[ \t\r\n]+\]/g, ']'); + return input; +} + +// Sort the JSON (clean, parse, sort, stringify). +function sort(inputStr, noarray) { + var output, obj, r; + + if (inputStr) { + try { + inputStr = cleanJSON(inputStr); + obj = JSON.parse(inputStr); + r = sortObj(obj, noarray); + output = JSON.stringify(r, null, 4); + } catch (ex) { + console.error('jsonabc: Incorrect JSON object.', [], ex); + throw ex; + } + } + return output; +} + +// End. diff --git a/src/index.ts b/src/index.ts index 79b29b4..f14817c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,96 +1,102 @@ import express from 'express'; import { dataSource } from './dbconfig'; -import { addDelegateAsRegistryDelegate } from './init'; -import { createSchema, getSchemaById } from './controller/schema_controller'; +import app from './server'; +import os from 'os'; +import cluster from 'cluster'; + +import { + createProfile, + getCacheStats, + getProfile, +} from './controller/profile_controller'; +import { checkDidAndIdentities } from './cord'; +import { createRegistry, getRegistry } from './controller/registry_controller'; import { - getCredById, issueVC, - revokeCred, + getCredById, updateCred, - documentHashOnChain, - updateDocumentHashOnChain, - revokeDocumentHashOnChain, + revokeCred, } from './controller/credential_controller'; -import { generateDid, resolveDid } from './controller/did_controller'; -import app from './server'; -import { authMiddleware } from './controller/auth_controller'; const { PORT } = process.env; -app.use(authMiddleware); +const numCPUs = os.cpus().length; -const credentialRouter = express.Router({ mergeParams: true }); -const schemaRouter = express.Router({ mergeParams: true }); -const didRouter = express.Router({ mergeParams: true }); -const docRouter = express.Router({ mergeParams: true }); +if (cluster.isMaster) { + console.log(`Master process ${process.pid} is running`); -credentialRouter.post('/', async (req, res) => { - return await issueVC(req, res); -}); + for (let i = 0; i < numCPUs; i++) { + cluster.fork(); + } -credentialRouter.get('/:id', async (req, res) => { - return await getCredById(req, res); -}); + cluster.on('exit', (worker, code, signal) => { + console.log(`Worker process ${worker.process.pid} died. Restarting...`); + cluster.fork(); + }); +} else { + const profileRouter = express.Router({ mergeParams: true }); + const registryRouter = express.Router({ mergeParams: true }); + const credentialRouter = express.Router({ mergeParams: true }); -credentialRouter.put('/update/:id', async (req, res) => { - return await updateCred(req, res); -}); + credentialRouter.post('/', async (req, res) => { + return await issueVC(req, res); + }); -credentialRouter.post('/revoke/:id', async (req, res) => { - return await revokeCred(req, res); -}); + credentialRouter.get('/:id', async (req, res) => { + return await getCredById(req, res); + }); -schemaRouter.post('/', async (req, res) => { - return await createSchema(req, res); -}); + credentialRouter.put('/update', async (req, res) => { + return await updateCred(req, res); + }); -schemaRouter.get('/:id', async (req, res) => { - return await getSchemaById(req, res); -}); + credentialRouter.post('/revoke', async (req, res) => { + return await revokeCred(req, res); + }); -didRouter.post('/create', async (req, res) => { - return await generateDid(req, res); -}); + profileRouter.post('/create', async (req, res) => { + return await createProfile(req, res); + }); -docRouter.post('/issue', async (req, res) => { - return await documentHashOnChain(req, res); -}); + profileRouter.get('/:address', async (req, res) => { + return await getProfile(req, res); + }); -docRouter.post('/revoke', async (req, res) => { - return await revokeDocumentHashOnChain(req, res); -}); + profileRouter.get('/cache/stats', async (req, res) => { + return await getCacheStats(req, res); + }); -docRouter.put('/update', async (req, res) => { - return await updateDocumentHashOnChain(req, res); -}); + registryRouter.post('/create', async (req, res) => { + return await createRegistry(req, res); + }); -app.use('/api/v1/schema', schemaRouter); -app.use('/api/v1/cred', credentialRouter); -app.use('/api/v1/did', didRouter); -app.use('/api/v1/doc-hash', docRouter); + registryRouter.get('/:id', async (req, res) => { + return await getRegistry(req, res); + }); -app.get('/:id/did.json', async (req, res) => { - return await resolveDid(req, res); -}); + app.use('/api/v1/profile', profileRouter); + app.use('/api/v1/registry', registryRouter); + app.use('/api/v1/cred', credentialRouter); -app.get('/*', async (req, res) => { - return res.json({ - message: 'check https://docs.dhiway.com/api for details of the APIs', + app.use((_req, res) => { + return res.json({ + message: 'check https://docs.dhiway.com/api for details of the APIs', + }); }); -}); - -async function main() { - try { - await dataSource.initialize(); - addDelegateAsRegistryDelegate(); - } catch (error) { - console.log('error: ', error); - throw new Error('Main error'); + + async function main() { + try { + await dataSource.initialize(); + checkDidAndIdentities(); + } catch (error) { + console.log('error: ', error); + throw new Error('Main error'); + } + + app.listen(PORT || 3000, () => { + console.log(`Dhiway gateway is running at http://localhost:${PORT}`); + }); } - app.listen(PORT, () => { - console.log(`Dhiway gateway is running at http://localhost:${PORT}`); - }); + main().catch((e) => console.log(e)); } - -main().catch((e) => console.log(e)); diff --git a/src/init.ts b/src/init.ts deleted file mode 100644 index 0b3c41b..0000000 --- a/src/init.ts +++ /dev/null @@ -1,196 +0,0 @@ -import * as Cord from '@cord.network/sdk'; - -import { mnemonicGenerate } from '@polkadot/util-crypto'; - -const { - CORD_WSS_URL, - AUTHOR_URI, - DESIGNER_DID_NAME, - CHAIN_SPACE_ID, - MNEMONIC, - CHAIN_SPACE_AUTH, -} = process.env; - -export let authorIdentity: any = undefined; -export let issuerDid: any = undefined; -export let issuerKeysProperty: any = undefined; -export let delegateDid: any = undefined; -export let delegateKeysProperty: any = undefined; -export let delegateSpaceAuth: any = undefined; - -export async function createDidName( - did: Cord.DidUri, - submitterAccount: Cord.CordKeyringPair, - name: Cord.Did.DidName, - signCallback: Cord.SignExtrinsicCallback -): Promise { - const api = Cord.ConfigService.get('api'); - const didNameClaimTx = await api.tx.didNames.register(name); - const authorizedDidNameClaimTx = await Cord.Did.authorizeTx( - did, - didNameClaimTx, - signCallback, - submitterAccount.address - ); - await Cord.Chain.signAndSubmitTx(authorizedDidNameClaimTx, submitterAccount); -} - -export async function createDid( - submitterAccount: Cord.CordKeyringPair, - service?: Cord.DidServiceEndpoint[], - didName?: string | undefined -): Promise<{ - mnemonic: string; - delegateKeys: any; - document: Cord.DidDocument; -}> { - try { - const api = Cord.ConfigService.get('api'); - const mnemonic = mnemonicGenerate(24); - - const delegateKeys = Cord.Utils.Keys.generateKeypairs(mnemonic, 'sr25519'); - const { - authentication, - keyAgreement, - assertionMethod, - capabilityDelegation, - } = delegateKeys; - - const didUri = Cord.Did.getDidUriFromKey(authentication); - - // Get tx that will create the DID on chain and DID-URI that can be used to resolve the DID Document. - const didCreationTx = await Cord.Did.getStoreTx( - { - authentication: [authentication], - keyAgreement: [keyAgreement], - assertionMethod: [assertionMethod], - capabilityDelegation: [capabilityDelegation], - service: - Array.isArray(service) && service.length > 0 - ? service - : [ - { - id: '#my-service', - type: ['service-type'], - serviceEndpoint: ['https://www.example.com'], - }, - ], - }, - submitterAccount.address, - async ({ data }) => ({ - signature: authentication.sign(data), - keyType: authentication.type, - }) - ); - - await Cord.Chain.signAndSubmitTx(didCreationTx, submitterAccount); - - if (didName) { - try { - await createDidName( - didUri, - submitterAccount, - didName, - async ({ data }) => ({ - signature: authentication.sign(data), - keyType: authentication.type, - }) - ); - } catch (err: any) { - console.log('Error to interact with chain', err); - } - } - - const encodedDid = await api.call.didApi.query(Cord.Did.toChain(didUri)); - const { document } = Cord.Did.linkedInfoFromChain(encodedDid); - - if (!document) { - throw new Error('DID was not successfully created.'); - } - delegateDid = document; - delegateKeysProperty = delegateKeys; - return { mnemonic, delegateKeys, document }; - } catch (err) { - console.log('Error: ', err); - throw new Error('Failed to create delegate DID'); - } -} - -export async function checkDidAndIdentities(mnemonic: string): Promise { - if (!mnemonic) return null; - - if (!authorIdentity) { - Cord.ConfigService.set({ submitTxResolveOn: Cord.Chain.IS_IN_BLOCK }); - await Cord.connect(CORD_WSS_URL ?? 'ws://localhost:9944'); - - authorIdentity = Cord.Utils.Crypto.makeKeypairFromUri( - AUTHOR_URI ?? '//Alice', - 'sr25519' - ); - } - - const issuerKeys = Cord.Utils.Keys.generateKeypairs(mnemonic, 'sr25519'); - const { authentication } = issuerKeys; - - const api = Cord.ConfigService.get('api'); - const didUri = Cord.Did.getDidUriFromKey(authentication); - const encodedDid = await api.call.didApi.query(Cord.Did.toChain(didUri)); - const { document } = Cord.Did.linkedInfoFromChain(encodedDid); - - if (!document) { - throw new Error('DID was not successfully created.'); - } - - issuerDid = document; - issuerKeysProperty = issuerKeys; - - return { issuerKeys, document }; -} - -export async function addDelegateAsRegistryDelegate() { - try { - /* Fetching Issuer DID and keys from given mnemonic */ - const { issuerKeys, document } = await checkDidAndIdentities( - MNEMONIC as string - ); - - /* Creating delegate from authorIdentity. */ - // const { mnemonic: delegateMnemonic, document: delegateDid } = - // await createDid(authorIdentity); - - if (!document || !issuerKeys) { - throw new Error('Failed to create DID'); - } - - // console.log(`\n❄️ Space Delegate Authorization `); - // const permission: Cord.PermissionType = Cord.Permission.ASSERT; - - // const spaceAuthProperties = - // await Cord.ChainSpace.buildFromAuthorizationProperties( - // CHAIN_SPACE_ID as `space:cord:${string}`, - // delegateDid.uri, - // permission, - // document.uri - // ); - - // console.log(`\n❄️ Space Delegation To Chain `); - // const delegateAuth = await Cord.ChainSpace.dispatchDelegateAuthorization( - // spaceAuthProperties, - // authorIdentity, - // CHAIN_SPACE_AUTH as `auth:cord:${string}`, - // async ({ data }) => ({ - // signature: issuerKeys.capabilityDelegation.sign(data), - // keyType: issuerKeys.capabilityDelegation.type, - // }) - // ); - - // delegateSpaceAuth = delegateAuth; - - // console.log(`✅ Space Authorization added!`); - // return { delegateMnemonic }; - return; - } catch (error) { - console.log('err: ', error); - throw new Error('Failed to create Delegate Registry'); - } -} diff --git a/src/redis_client.ts b/src/redis_client.ts new file mode 100644 index 0000000..1c5f4a3 --- /dev/null +++ b/src/redis_client.ts @@ -0,0 +1,22 @@ +import { createClient } from 'redis'; + +const { REDIS_URL } = process.env; + +console.log(`Connecting to Redis at ${REDIS_URL}`); + +const client = createClient({ url: REDIS_URL }); + +client.on('error', (err: any) => { + console.error('Redis error:', err); +}); + +(async () => { + try { + await client.connect(); + console.log('✅ Connected to Redis'); + } catch (e) { + console.error('❌ Failed to connect to Redis:', e); + } +})(); + +export default client; diff --git a/src/server.ts b/src/server.ts index 76192ef..012d92e 100644 --- a/src/server.ts +++ b/src/server.ts @@ -1,13 +1,28 @@ import express from 'express'; import bodyParser from 'body-parser'; import cors from 'cors'; -import * as swaggerUi from 'swagger-ui-express'; -import * as YAML from 'yamljs'; const app = express(); -export const { PORT } = process.env; +export const PORT = process.env.PORT || '3000'; app.use(bodyParser.json({ limit: '5mb' })); +app.use( + ( + err: any, + req: express.Request, + res: express.Response, + next: express.NextFunction + ) => { + if (err.message === 'Invalid JSON payload') { + return res.status(400).send({ error: 'Invalid JSON format' }); + } + if (err.toString().includes('SyntaxError')) { + return res.status(400).send({ error: 'Invalid JSON' }); + } + next(err); + } +); + app.use(express.json()); const allowedOrigins = [ @@ -17,7 +32,7 @@ const allowedOrigins = [ 'https://studio.dhiway.com', 'https://markdemo.dhiway.com', 'https://studiodemo.dhiway.com', - 'https://issuer-agent-api.demo.dhiway.net' + 'https://issuer-agent-api.demo.dhiway.net', ]; const allowedDomains = [ @@ -25,31 +40,27 @@ const allowedDomains = [ 'dhiway.com', 'dway.io', 'cord.network', - 'amplifyapp.com' /* For supporting quick hosting of UI */, + 'amplifyapp.com', ]; app.use( cors({ - origin: function (origin, callback) { + origin(origin, callback) { if (!origin) return callback(null, true); - let tmpOrigin = origin; - - if (origin.slice(-1) === '/') { - tmpOrigin = origin.substring(0, origin.length - 1); - } - if (allowedOrigins.indexOf(tmpOrigin) === -1) { - /* Check if we should allow star/asterisk */ - const b = tmpOrigin.split('/')[2].split('.'); - const domain = `${b[b.length - 2]}.${b[b.length - 1]}`; - if (allowedDomains.indexOf(domain) === -1) { - console.log(tmpOrigin, domain); - const msg = `The CORS policy for this site (${origin}) does not allow access from the specified Origin.`; - return callback(new Error(msg), false); + let tmp = origin.endsWith('/') ? origin.slice(0, -1) : origin; + if (!allowedOrigins.includes(tmp)) { + const parts = tmp.split('/')[2]?.split('.') || []; + const domain = parts.slice(-2).join('.'); + if (!allowedDomains.includes(domain)) { + return callback( + new Error(`CORS policy disallows origin ${origin}`), + false + ); } } - return callback(null, true); + callback(null, true); }, - optionsSuccessStatus: 200, // For legacy browser support + optionsSuccessStatus: 200, credentials: true, preflightContinue: true, methods: ['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS', 'HEAD', 'PATCH'], @@ -71,36 +82,32 @@ app.use( }) ); -// Manually handle OPTIONS requests -app.options('*', (req, res) => { - const origin = req.headers.origin; - let tmpOrigin = origin; +// CORS preflight handler (no path so covers all OPTIONS) +app.use( + (req: express.Request, res: express.Response, next: express.NextFunction) => { + if (req.method !== 'OPTIONS') return next(); - if (origin && origin.slice(-1) === '/') { - tmpOrigin = origin.substring(0, origin.length - 1); - } + const origin = req.headers.origin as string | undefined; + let tmp = origin?.endsWith('/') ? origin.slice(0, -1) : origin; - // Validate origin - if (tmpOrigin) { - const b = tmpOrigin.split('/')[2].split('.'); - const domain = `${b[b.length - 2]}.${b[b.length - 1]}`; - if (!allowedDomains.includes(domain) && !allowedDomains.includes(tmpOrigin)) { - return res.status(403).send('CORS policy: Origin not allowed'); + if (tmp) { + const parts = tmp.split('/')[2]?.split('.') || []; + const domain = parts.slice(-2).join('.'); + if (!allowedDomains.includes(domain) && !allowedOrigins.includes(tmp)) { + return res.status(403).send('CORS policy: Origin not allowed'); + } } - } - res.set({ - 'Access-Control-Allow-Origin': origin || '*', - 'Access-Control-Allow-Methods': 'GET, PUT, POST, DELETE, OPTIONS, HEAD, PATCH', - 'Access-Control-Allow-Headers': - 'Content-Type, X-UserId, Accept, Authorization, user-agent, Host, X-Forwarded-For, Upgrade, Connection, X-Content-Type-Options, Content-Security-Policy, X-Frame-Options, Strict-Transport-Security', - 'Access-Control-Allow-Credentials': 'true', - }); - res.sendStatus(204); // No content -}); - -const openApiDocumentation = YAML.load('./apis.yaml'); - -app.use('/docs', swaggerUi.serve, swaggerUi.setup(openApiDocumentation)); + res.set({ + 'Access-Control-Allow-Origin': origin || '*', + 'Access-Control-Allow-Methods': + 'GET, PUT, POST, DELETE, OPTIONS, HEAD, PATCH', + 'Access-Control-Allow-Headers': + 'Content-Type, X-UserId, Accept, Authorization, user-agent, Host, X-Forwarded-For, Upgrade, Connection, X-Content-Type-Options, Content-Security-Policy, X-Frame-Options, Strict-Transport-Security', + 'Access-Control-Allow-Credentials': 'true', + }); + res.sendStatus(204); + } +); export default app; diff --git a/src/types/Schema.interface.ts b/src/types/Schema.interface.ts deleted file mode 100644 index 698469a..0000000 --- a/src/types/Schema.interface.ts +++ /dev/null @@ -1,38 +0,0 @@ -export type PropertyType = - | StringProperty - | NumberProperty - | BooleanProperty - | ArrayProperty - | ObjectProperty; - -export interface StringProperty { - type: 'string'; - enum?: string[]; - format?: 'date' | 'time' | 'uri'; - minLength?: number; - maxLength?: number; -} - -export interface NumberProperty { - type: 'integer' | 'number'; - enum?: number[]; - minimum?: number; - maximum?: number; -} - -export interface BooleanProperty { - type: 'boolean'; -} - -export interface ArrayProperty { - type: 'array'; - items: PropertyType; - minItems?: number; - maxItems?: number; -} - -export interface ObjectProperty { - type: 'object'; - properties: Record; - required?: string[]; -} diff --git a/src/types/swagger-ui-express.d.ts b/src/types/swagger-ui-express.d.ts deleted file mode 100644 index 304cb91..0000000 --- a/src/types/swagger-ui-express.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -// src/types/swagger-ui-express.d.ts -declare module 'swagger-ui-express' { - import { RequestHandler } from 'express'; - - export const serve: RequestHandler; - export function setup( - spec: any, - options?: any, - customCss?: any - ): RequestHandler; -} diff --git a/src/utils/CredentialUtils.ts b/src/utils/CredentialUtils.ts index 2ccd87f..72ff850 100644 --- a/src/utils/CredentialUtils.ts +++ b/src/utils/CredentialUtils.ts @@ -1,14 +1,34 @@ +import { parseAndFormatDate } from '../utils/DateUtils'; + + export function extractCredentialFields(data: any): { - schemaId: string; + schema: object; properties: any; + address: string; + holder?: string; validFrom: string; validUntil: string; } { const cred = data.credential || data; return { - schemaId: cred.schemaId, + schema: cred.schema, properties: cred.credentialSubject || cred.properties, + address: cred.address, + holder: cred.holder, validFrom: cred.validFrom, validUntil: cred.expirationDate || cred.validUntil, }; } + +export function getVCValidity(data: any): Record { + const validity: Record = {}; + if (data.validFrom) { + const from = parseAndFormatDate(data.validFrom); + if (from) validity.validFrom = from.toISOString(); + } + if (data.validUntil) { + const until = parseAndFormatDate(data.validUntil); + if (until) validity.validUntil = until.toISOString(); + } + return validity; +} \ No newline at end of file diff --git a/src/utils/CredentialValidationUtils.ts b/src/utils/CredentialValidationUtils.ts index a8a5568..f0b46c3 100644 --- a/src/utils/CredentialValidationUtils.ts +++ b/src/utils/CredentialValidationUtils.ts @@ -21,14 +21,18 @@ export function validateCredential(data: any): string | null { } } else { // If 'credential' is not present, validate the 'schemaId' and 'properties' directly - if (!data.schemaId || typeof data.schemaId !== 'string') { - return "'schemaId' is required and must be a string."; + if (!data.schema || typeof data.schema !== 'object') { + return "'schema' is required and must be an object."; } if (!data.properties || typeof data.properties !== 'object') { return "'properties' is required and must be an object."; } + if (!data.address || typeof data.address !== 'string') { + return "'address' is required and must be a string."; + } + if (Object.keys(data.properties).length === 0) { return "'properties' must contain at least one key-value pair."; } diff --git a/src/utils/DidValidationUtils.ts b/src/utils/DidValidationUtils.ts deleted file mode 100644 index 5c0bb5a..0000000 --- a/src/utils/DidValidationUtils.ts +++ /dev/null @@ -1,11 +0,0 @@ -export function processServiceData(serviceData: any) { - const { id, type, serviceEndpoint } = serviceData; - - return [ - { - id: id || 'default-id', - type: Array.isArray(type) ? type : [type], - serviceEndpoint: serviceEndpoint?.instance || [], - }, - ]; -} diff --git a/src/utils/SchemaUtils.ts b/src/utils/SchemaUtils.ts deleted file mode 100644 index 079d45a..0000000 --- a/src/utils/SchemaUtils.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { PropertyType ,ObjectProperty} from "../types/Schema.interface"; - - -export function extractSchemaFields(schema: any) { - if (!schema || typeof schema !== 'object') { - throw new Error("Invalid schema: Schema must be a valid object."); - } - - - const extractProperty = (property: any): PropertyType => { - switch (property.type) { - case 'string': { - const { type, enum: enumValues, format, minLength, maxLength } = property; - return { - type, - ...(enumValues && { enum: enumValues }), - ...(format && { format }), - ...(minLength && { minLength }), - ...(maxLength && { maxLength }) - }; - } - case 'integer': - case 'number': { - const { type, enum: enumValues, minimum, maximum } = property; - return { - type, - ...(enumValues && { enum: enumValues }), - ...(minimum && { minimum }), - ...(maximum && { maximum }) - }; - } - case 'array': { - const { type, items, minItems, maxItems } = property; - return { - type, - items: extractProperty(items), - ...(minItems && { minItems }), - ...(maxItems && { maxItems }) - }; - } - case 'object': { - const { type, properties, required } = property; - return { - type, - properties: Object.keys(properties).reduce((acc, key) => { - acc[key] = extractProperty(properties[key]); - return acc; - }, {} as ObjectProperty['properties']), - ...(required && { required }) - }; - } - case 'boolean': - return { type: 'boolean' }; - default: - throw new Error(`Unsupported property type: ${property.type}`); - } - }; - - - const properties = Object.keys(schema.properties || {}).reduce((acc, key) => { - acc[key] = extractProperty(schema.properties[key]); - return acc; - }, {} as Record); - - - return { - title: schema.title || schema.$id, - properties, - required: schema.required || [], - type: 'object', - }; -} diff --git a/src/utils/SchemaValidationUtils.ts b/src/utils/SchemaValidationUtils.ts deleted file mode 100644 index 6ac3624..0000000 --- a/src/utils/SchemaValidationUtils.ts +++ /dev/null @@ -1,11 +0,0 @@ - -export function validateSchema(data:any) { - - if (!data) return "'schema' is required."; - if (!data.title && !data.$id) return "'title' or '$id' is required."; - if (!data.description) return "'description' is required."; - if (!data.properties) return "'properties' is required."; - if (Object.keys(data.properties).length === 0) return "'properties' must contain at least one property."; - return null; - } - \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index b2e0df8..afe815f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -32,241 +32,150 @@ resolved "https://registry.yarnpkg.com/@cbor-extract/cbor-extract-win32-x64/-/cbor-extract-win32-x64-2.2.0.tgz#4b3f07af047f984c082de34b116e765cb9af975f" integrity sha512-l2M+Z8DO2vbvADOBNLbbh9y5ST1RY5sqkWOg/58GkUPBYou/cuNZ68SGQ644f1CvZ8kcOxyZtw06+dxWHIoN/w== -"@cord.network/asset@0.9.5-rc1": - version "0.9.5-rc1" - resolved "https://registry.yarnpkg.com/@cord.network/asset/-/asset-0.9.5-rc1.tgz#fbb57689efdaea7860012f07b39d7e47305e9dbf" - integrity sha512-uhDfM0aI6tZvSbRQwMqotsX2n0h44e3f6leOOGY9SJIT9VWhYlGEHIJepWQM7+zObgVipokWwbOqE1bt/Grlig== - dependencies: - "@cord.network/config" "0.9.5-rc1" - "@cord.network/did" "0.9.5-rc1" - "@cord.network/identifier" "0.9.5-rc1" - "@cord.network/network" "0.9.5-rc1" - "@cord.network/types" "0.9.5-rc1" - "@cord.network/utils" "0.9.5-rc1" - -"@cord.network/augment-api@0.9.5-rc1": - version "0.9.5-rc1" - resolved "https://registry.yarnpkg.com/@cord.network/augment-api/-/augment-api-0.9.5-rc1.tgz#8253ec9b0a3a65ddf9a515d6cda8e9dd340986e1" - integrity sha512-V/kAihR6Lg0WTSivFAfkLdfAEaocKsQKmEk1xY0NrVkSh7WN8DEkiIibB0cF3STXUnCeHBAzd8P7CwYgt+mQIA== - dependencies: - "@cord.network/type-definitions" "0.9.5-rc1" - "@polkadot/rpc-augment" "^10.12.2" - "@polkadot/rpc-core" "^10.12.2" - "@polkadot/rpc-provider" "^10.12.2" - -"@cord.network/chain-space@0.9.5-rc1": - version "0.9.5-rc1" - resolved "https://registry.yarnpkg.com/@cord.network/chain-space/-/chain-space-0.9.5-rc1.tgz#4ca5997b9dea8edd232bab0a4a89ccdbfe09746c" - integrity sha512-mH/bKxvB38g0CnNzFvv7lIORM1x52E2jU6P9LbpdaBt+lQXEmmAmdW12dpqu7evO6LXpXVMfcD2fxwAQti9HKw== - dependencies: - "@cord.network/config" "0.9.5-rc1" - "@cord.network/did" "0.9.5-rc1" - "@cord.network/identifier" "0.9.5-rc1" - "@cord.network/network" "0.9.5-rc1" - "@cord.network/types" "0.9.5-rc1" - "@cord.network/utils" "0.9.5-rc1" - -"@cord.network/config@0.9.5-rc1": - version "0.9.5-rc1" - resolved "https://registry.yarnpkg.com/@cord.network/config/-/config-0.9.5-rc1.tgz#9b4d9dec8fc3f9e95037697a058db55118ab2263" - integrity sha512-zXgHCNBMx00Tf7YSjym1zzTnsftKf9WGlTBK1akLxT7jNAg+3zTv970lIR7lnEDbmaBYgdA4LN8o0EnyO2Rg7g== - dependencies: - "@cord.network/type-definitions" "0.9.5-rc1" - "@cord.network/types" "0.9.5-rc1" - "@cord.network/utils" "0.9.5-rc1" - -"@cord.network/did@0.9.5-rc1": - version "0.9.5-rc1" - resolved "https://registry.yarnpkg.com/@cord.network/did/-/did-0.9.5-rc1.tgz#7353e252767cc05f1cf56b4b9312f010052e4282" - integrity sha512-P6rfrKJrsSXKWYYfJqaQZFY86DrnRx7gDGiV9+9+0S85Luj28OohF3r5+EkQ5wDinrbNcm/0O5hytN6aQB9vVg== - dependencies: - "@cord.network/augment-api" "0.9.5-rc1" - "@cord.network/config" "0.9.5-rc1" - "@cord.network/network" "0.9.5-rc1" - "@cord.network/types" "0.9.5-rc1" - "@cord.network/utils" "0.9.5-rc1" - "@digitalbazaar/security-context" "^1.0.1" - "@polkadot/api" "^10.12.2" - "@polkadot/keyring" "^12.6.2" - "@polkadot/types" "^10.12.2" - "@polkadot/types-codec" "^10.12.2" - "@polkadot/util" "^12.6.2" - "@polkadot/util-crypto" "^12.6.2" - -"@cord.network/entries@0.9.5-rc1": - version "0.9.5-rc1" - resolved "https://registry.yarnpkg.com/@cord.network/entries/-/entries-0.9.5-rc1.tgz#ab4c05f63f7b0446315dd3fb3fba568533bf4d5f" - integrity sha512-s44Cdk38Ow8r38G0GYHwfIEfaUJv82Vfx+I9u2A9vR0jjD0zS6yarUNCdmXx+xZK4X9vhUx81NJiXexo5Jqrdg== - dependencies: - "@cord.network/config" "0.9.5-rc1" - "@cord.network/identifier" "0.9.5-rc1" - "@cord.network/network" "0.9.5-rc1" - "@cord.network/registries" "0.9.5-rc1" - "@cord.network/types" "0.9.5-rc1" - "@cord.network/utils" "0.9.5-rc1" - -"@cord.network/identifier@0.9.5-rc1": - version "0.9.5-rc1" - resolved "https://registry.yarnpkg.com/@cord.network/identifier/-/identifier-0.9.5-rc1.tgz#9c6864ed06b57ff2c97ceebbd838b8d341f56ca1" - integrity sha512-ETGcPOS8d2l73IrfgbORKJ5KujwjyndE5+dUe+gWI0nrkvVNcK+c2vRDfeXepAqFhdoIzhXneu+SpwgXxmrBuQ== - dependencies: - "@cord.network/types" "0.9.5-rc1" - "@cord.network/utils" "0.9.5-rc1" - -"@cord.network/namespace@0.9.5-rc1": - version "0.9.5-rc1" - resolved "https://registry.yarnpkg.com/@cord.network/namespace/-/namespace-0.9.5-rc1.tgz#22feef267d03b62dabe82fe2a66a7bc3b564ee1d" - integrity sha512-s0r6dBxhRvyFvtqPRQo8lIcQljOaYfnpokhCSwIQ8vtp+oPP+AJCEEf4kxXh9bkKIzIbCpRHX9dyD4P9J96VQQ== - dependencies: - "@cord.network/config" "0.9.5-rc1" - "@cord.network/identifier" "0.9.5-rc1" - "@cord.network/network" "0.9.5-rc1" - "@cord.network/types" "0.9.5-rc1" - "@cord.network/utils" "0.9.5-rc1" - -"@cord.network/network-score@0.9.5-rc1": - version "0.9.5-rc1" - resolved "https://registry.yarnpkg.com/@cord.network/network-score/-/network-score-0.9.5-rc1.tgz#f492643eeadd83c5151431388b853d018e7e7eb0" - integrity sha512-uRjr2UkoIdXG6raD2Y5OgE69LW4+iqdeT1NHNYNq1kUCsXMGWc9i0zLkARoqc9/C+v7y3NV+qDKKCMnpQnbnRw== - dependencies: - "@cord.network/config" "0.9.5-rc1" - "@cord.network/did" "0.9.5-rc1" - "@cord.network/identifier" "0.9.5-rc1" - "@cord.network/network" "0.9.5-rc1" - "@cord.network/types" "0.9.5-rc1" - "@cord.network/utils" "0.9.5-rc1" - -"@cord.network/network@0.9.5-rc1": - version "0.9.5-rc1" - resolved "https://registry.yarnpkg.com/@cord.network/network/-/network-0.9.5-rc1.tgz#962da827d184072e8854221f6a2a1240897d3699" - integrity sha512-ulHWyKSOFh+eVS7A43rCB56TfCvb22AQUiStcJ+BHlfoNojKapv+gR5q/pr2UBcxGyCiqk7mxTBIM5NaA7xLnA== - dependencies: - "@cord.network/config" "0.9.5-rc1" - "@cord.network/types" "0.9.5-rc1" - "@cord.network/utils" "0.9.5-rc1" - "@polkadot/api" "^10.12.2" - "@polkadot/types" "^10.12.2" - -"@cord.network/registries@0.9.5-rc1": - version "0.9.5-rc1" - resolved "https://registry.yarnpkg.com/@cord.network/registries/-/registries-0.9.5-rc1.tgz#beb6f0ff06c6f53eb0e4341abae8c3f07353062c" - integrity sha512-da7/RD35Owfxjw92X9H1W9Fehc3nikzffVEWJhufxospW4rPw+AyPM8vS3J6CLLZQkXAGWrcELPFON3nrs0UFg== - dependencies: - "@cord.network/config" "0.9.5-rc1" - "@cord.network/identifier" "0.9.5-rc1" - "@cord.network/network" "0.9.5-rc1" - "@cord.network/schema-accounts" "0.9.5-rc1" - "@cord.network/types" "0.9.5-rc1" - "@cord.network/utils" "0.9.5-rc1" - -"@cord.network/schema-accounts@0.9.5-rc1": - version "0.9.5-rc1" - resolved "https://registry.yarnpkg.com/@cord.network/schema-accounts/-/schema-accounts-0.9.5-rc1.tgz#527337bb9340191779c9054cac501758d20b74ce" - integrity sha512-18WKdIKaxnrhc73yfJYh0dwSs+8VyPuMn2q8iul+QdWv3GHnhk1JE9bmRKQeVmAGVbapRiqbwxBrHVsF+Ftl4g== - dependencies: - "@cord.network/augment-api" "0.9.5-rc1" - "@cord.network/config" "0.9.5-rc1" - "@cord.network/did" "0.9.5-rc1" - "@cord.network/identifier" "0.9.5-rc1" - "@cord.network/network" "0.9.5-rc1" - "@cord.network/types" "0.9.5-rc1" - "@cord.network/utils" "0.9.5-rc1" - -"@cord.network/schema@0.9.5-rc1": - version "0.9.5-rc1" - resolved "https://registry.yarnpkg.com/@cord.network/schema/-/schema-0.9.5-rc1.tgz#851ddd510226b9518f6b3fa04b270d6cac6fce36" - integrity sha512-pHMZxDvnSC0tagJyNAjHtjSe/1QjeGFH8FuLEW0nt93BGIrwHrZCa7b6nUM+FY8x9vPm13iJVZDDZVCPJvwBbQ== - dependencies: - "@cord.network/augment-api" "0.9.5-rc1" - "@cord.network/chain-space" "0.9.5-rc1" - "@cord.network/config" "0.9.5-rc1" - "@cord.network/did" "0.9.5-rc1" - "@cord.network/identifier" "0.9.5-rc1" - "@cord.network/network" "0.9.5-rc1" - "@cord.network/types" "0.9.5-rc1" - "@cord.network/utils" "0.9.5-rc1" - -"@cord.network/sdk@0.9.5-rc1": - version "0.9.5-rc1" - resolved "https://registry.yarnpkg.com/@cord.network/sdk/-/sdk-0.9.5-rc1.tgz#b2181f68a5e9dfb0a7dcb5259db8efc35f3a79d6" - integrity sha512-KBk7lg5dcY2S0EejaJhcrV5STYubi6fedGAKTDgnSwxgyTdC1SrXOVL/6lkWC5b0AbvbKrMVFWNKM0fMdgqRnA== - dependencies: - "@cord.network/asset" "0.9.5-rc1" - "@cord.network/chain-space" "0.9.5-rc1" - "@cord.network/config" "0.9.5-rc1" - "@cord.network/did" "0.9.5-rc1" - "@cord.network/entries" "0.9.5-rc1" - "@cord.network/identifier" "0.9.5-rc1" - "@cord.network/namespace" "0.9.5-rc1" - "@cord.network/network" "0.9.5-rc1" - "@cord.network/network-score" "0.9.5-rc1" - "@cord.network/registries" "0.9.5-rc1" - "@cord.network/schema" "0.9.5-rc1" - "@cord.network/schema-accounts" "0.9.5-rc1" - "@cord.network/statement" "0.9.5-rc1" - "@cord.network/types" "0.9.5-rc1" - "@cord.network/utils" "0.9.5-rc1" - -"@cord.network/statement@0.9.5-rc1": - version "0.9.5-rc1" - resolved "https://registry.yarnpkg.com/@cord.network/statement/-/statement-0.9.5-rc1.tgz#08ec5e69b33132b9a385b7a357764a844b2ec95a" - integrity sha512-iEbj+h+d/Ap19jBlrhG1vcsQfJyHLsyFgOKdfm8UvR3Yc8XeMmTYQcj6r0dTDX0aBKUNPvNL1LFnFglhRDFNXQ== - dependencies: - "@cord.network/config" "0.9.5-rc1" - "@cord.network/did" "0.9.5-rc1" - "@cord.network/identifier" "0.9.5-rc1" - "@cord.network/network" "0.9.5-rc1" - "@cord.network/types" "0.9.5-rc1" - "@cord.network/utils" "0.9.5-rc1" - -"@cord.network/type-definitions@0.9.5-rc1": - version "0.9.5-rc1" - resolved "https://registry.yarnpkg.com/@cord.network/type-definitions/-/type-definitions-0.9.5-rc1.tgz#47e2082102138e9e6a40d91c60144305e2e10bad" - integrity sha512-uC87adNgh+ACCZUtC4kNOn4+0HXVjCc4u6/PqZho/tKoVXjc9DVNtj7PSEAgEuR8JbehizRJAzAWo37u6HwMvg== - dependencies: - "@polkadot/types" "^10.12.2" - -"@cord.network/types@0.9.5-rc1": - version "0.9.5-rc1" - resolved "https://registry.yarnpkg.com/@cord.network/types/-/types-0.9.5-rc1.tgz#4185b9931e46581bcdce1759a6a3327c61071ea0" - integrity sha512-e2sumdp9SnLLgXg2fASGZezqxKze/Lq/YFRsmSj8JlVB92MtJpPVCdi6lFoFZ3COdCgD1ULw7syYXWahkfrpqg== - dependencies: - "@polkadot/api" "^10.12.2" - "@polkadot/keyring" "^12.6.2" - "@polkadot/types" "^10.12.2" - "@polkadot/util" "^12.6.2" - "@polkadot/util-crypto" "^12.6.2" - -"@cord.network/utils@0.9.5-rc1": - version "0.9.5-rc1" - resolved "https://registry.yarnpkg.com/@cord.network/utils/-/utils-0.9.5-rc1.tgz#31a02d0f9429384cb7b20890e21e5d981896abc4" - integrity sha512-xLK5yPXhP4EoKtk2WFIb7OXt4VOCrh1i0C4Ai9RKYb0avZMrpiTvw9fPdnGlDlV2i6utb7a96NnamN3lZZaFXg== - dependencies: - "@cord.network/types" "0.9.5-rc1" - "@polkadot/api" "^10.12.2" - "@polkadot/keyring" "^12.6.2" - "@polkadot/util" "^12.6.2" - "@polkadot/util-crypto" "^12.6.2" +"@cord.network/augment-api@0.9.6-6": + version "0.9.6-6" + resolved "https://registry.yarnpkg.com/@cord.network/augment-api/-/augment-api-0.9.6-6.tgz#497021f408cc80255c0b397362e227ccfa4012ff" + integrity sha512-NFamWSbzhY7ze0qk32K1whk0m+xQNHUETccOVwXjC4Rmkf7bkef8gJaMRS5T5Y7VETaLSBLlheVirLYlcZKaeA== + dependencies: + "@cord.network/type-definitions" "0.9.6-6" + "@polkadot/rpc-augment" "^15.9.1" + "@polkadot/rpc-core" "^15.9.1" + "@polkadot/rpc-provider" "^15.9.1" + +"@cord.network/config@0.9.6-6": + version "0.9.6-6" + resolved "https://registry.yarnpkg.com/@cord.network/config/-/config-0.9.6-6.tgz#9b9a79df94f926ac5d74b222c8bb054a98df63f9" + integrity sha512-DVCxq/2zhlmWVzl7rk1CJb7vfrV7ITnuAE6npSIOwtvsKjPexGRLeP4mUWq4oyOHS6O8TWXJChdk3i50Z7qS7w== + dependencies: + "@cord.network/type-definitions" "0.9.6-6" + "@cord.network/types" "0.9.6-6" + "@cord.network/utils" "0.9.6-6" + +"@cord.network/entry@0.9.6-6": + version "0.9.6-6" + resolved "https://registry.yarnpkg.com/@cord.network/entry/-/entry-0.9.6-6.tgz#e01ff4d48728542fd1754ed74ff4703d056f22de" + integrity sha512-k3czo5cGidrWfG5d0bEbr1B6C/RofFHPHEEvq1eGkgu6iwMnst/bfaJ3wNffTVuOVvQYgapIZkRlhkjPtvClmQ== + dependencies: + "@cord.network/config" "0.9.6-6" + "@cord.network/identifier" "0.9.6-6" + "@cord.network/network" "0.9.6-6" + "@cord.network/profile" "0.9.6-6" + "@cord.network/registry" "0.9.6-6" + "@cord.network/types" "0.9.6-6" + "@cord.network/utils" "0.9.6-6" + +"@cord.network/identifier@0.9.6-6": + version "0.9.6-6" + resolved "https://registry.yarnpkg.com/@cord.network/identifier/-/identifier-0.9.6-6.tgz#31b444dafc73653bfde5c47b8a3d527ab89bb001" + integrity sha512-nbgVFUJ5GJsd/VPSyrNgjM4pQ6GI9dabhni952EBOAjBw6K7g0QT1SzNwWspeM2kEWzo8m1dXiPtT2aM0zjNgw== + dependencies: + "@cord.network/types" "0.9.6-6" + "@cord.network/utils" "0.9.6-6" + +"@cord.network/network@0.9.6-6": + version "0.9.6-6" + resolved "https://registry.yarnpkg.com/@cord.network/network/-/network-0.9.6-6.tgz#704fb94574b5736f5252610aead489e62aa4b68e" + integrity sha512-AOBzi7LEDUcvl11SwkmsDJRmEsSj2GmcU5RCyiAeNFDpUICu7Ci2KtIfkd8IhWAT+CxegKuu/kSBcM3M1QokXQ== + dependencies: + "@cord.network/config" "0.9.6-6" + "@cord.network/types" "0.9.6-6" + "@cord.network/utils" "0.9.6-6" + "@polkadot/api" "^15.9.1" + "@polkadot/types" "^15.9.1" + +"@cord.network/profile@0.9.6-6": + version "0.9.6-6" + resolved "https://registry.yarnpkg.com/@cord.network/profile/-/profile-0.9.6-6.tgz#e04ec207b87461a5e4c976a140400111e896041f" + integrity sha512-2zBkTI6I0/5z9BVSiROnMsIramOQR4HReolYHc6RI6FaZLL01/6w/Rocv2Pp/2mi/d78xbW7lGvtdPw2RQHeWg== + dependencies: + "@cord.network/config" "0.9.6-6" + "@cord.network/identifier" "0.9.6-6" + "@cord.network/network" "0.9.6-6" + "@cord.network/types" "0.9.6-6" + "@cord.network/utils" "0.9.6-6" + +"@cord.network/registry@0.9.6-6": + version "0.9.6-6" + resolved "https://registry.yarnpkg.com/@cord.network/registry/-/registry-0.9.6-6.tgz#77022e7c4678a7662b42f32413c2ca74267a9728" + integrity sha512-RfLs0fpolkRZGpoh6yrcYFYnzl/3Q3fjL6Gfh59d3mNl3s2WGQpowS5eG1G1V3Ja51RG8bq27lYWKtW2jEADkg== + dependencies: + "@cord.network/config" "0.9.6-6" + "@cord.network/identifier" "0.9.6-6" + "@cord.network/network" "0.9.6-6" + "@cord.network/types" "0.9.6-6" + "@cord.network/utils" "0.9.6-6" + +"@cord.network/sdk@0.9.6-6": + version "0.9.6-6" + resolved "https://registry.yarnpkg.com/@cord.network/sdk/-/sdk-0.9.6-6.tgz#069f9862637870c1876835c077dcc68c359973cf" + integrity sha512-owIM5AGpSt2jUUvVFaGJLkFrHy4HEtd0H+EgMrGFUAOPWlXOnwbTF6Ty8aj93HqIcnp1NLNkG+Jq0VtyUVF5zw== + dependencies: + "@cord.network/config" "0.9.6-6" + "@cord.network/entry" "0.9.6-6" + "@cord.network/identifier" "0.9.6-6" + "@cord.network/network" "0.9.6-6" + "@cord.network/profile" "0.9.6-6" + "@cord.network/registry" "0.9.6-6" + "@cord.network/types" "0.9.6-6" + "@cord.network/utils" "0.9.6-6" + +"@cord.network/type-definitions@0.9.6-6": + version "0.9.6-6" + resolved "https://registry.yarnpkg.com/@cord.network/type-definitions/-/type-definitions-0.9.6-6.tgz#e3dfb4991b82e3be4b99c3a6c883be00b29d515a" + integrity sha512-NRsvJicEDz7vEUtZuQLwJDYnNUmcuFvwLyxT0v/I/uTuxxJxiKoicbzziGe1R+OuNkGHjR37nT5M2cm0RVHopg== + dependencies: + "@polkadot/types" "^15.9.1" + +"@cord.network/types@0.9.6-4": + version "0.9.6-4" + resolved "https://registry.yarnpkg.com/@cord.network/types/-/types-0.9.6-4.tgz#0630559d5d42b4e8f195f51e09b1fbb093a83d09" + integrity sha512-bFEapca1V7mKFt1IvmtZ5HwFBEAHPQ+81jH8GWpPBMi69TzJ3ogfr4lwCWKsuyoEBIjj60aV2Zkq6ZrRfolwcw== + dependencies: + "@polkadot/api" "^15.9.1" + "@polkadot/keyring" "^13.4.3" + "@polkadot/types" "^15.9.1" + "@polkadot/util" "^13.4.3" + "@polkadot/util-crypto" "^13.4.3" + +"@cord.network/types@0.9.6-6": + version "0.9.6-6" + resolved "https://registry.yarnpkg.com/@cord.network/types/-/types-0.9.6-6.tgz#9896655e11655a8fa1c3c1c9568825b346b9dc87" + integrity sha512-B0dv5GLkDWAEBXXhPiOwQm4vfmTSWtMBZR50wNsKgnKn4J75Mj5Zf8efPDdCY3Fp/Va+og7CCjUgBMKgOByCjw== + dependencies: + "@polkadot/api" "^15.9.1" + "@polkadot/keyring" "^13.4.3" + "@polkadot/types" "^15.9.1" + "@polkadot/util" "^13.4.3" + "@polkadot/util-crypto" "^13.4.3" + +"@cord.network/utils@0.9.6-6": + version "0.9.6-6" + resolved "https://registry.yarnpkg.com/@cord.network/utils/-/utils-0.9.6-6.tgz#f9865af0c6936dec2edd6027df89a6987452af89" + integrity sha512-txfQdmgKPwItzbPRaVkpFC/LTglWjlvxQ5Tp2qcQXsSFDZz3LphDuruWTa1hbxKuiYQCWcRyWqzoFIjBR+USuA== + dependencies: + "@cord.network/augment-api" "0.9.6-6" + "@cord.network/types" "0.9.6-6" + "@polkadot/api" "^15.9.1" + "@polkadot/keyring" "^13.4.3" + "@polkadot/util" "^13.4.3" + "@polkadot/util-crypto" "^13.4.3" cbor-x "^1.5.8" + multiformats "^9.0.0" tweetnacl "^1.0.3" uuid "^9.0.1" -"@cord.network/vc-export@0.9.5-rc1": - version "0.9.5-rc1" - resolved "https://registry.yarnpkg.com/@cord.network/vc-export/-/vc-export-0.9.5-rc1.tgz#e753dc46b6114efd074f7cb7b49300de19512111" - integrity sha512-II5VKegi0MLL7rq/nQWo0N5kTOQDsE1pE3aEl7GmXb6ahyNSTR+Q8IMKx6KgvxzmRQAN6/wyerQtlczRJHU/mQ== +"@cord.network/vc-export@0.9.6-6": + version "0.9.6-6" + resolved "https://registry.yarnpkg.com/@cord.network/vc-export/-/vc-export-0.9.6-6.tgz#2e77e0dac273cdc77e44bf4609136d2fcb433cae" + integrity sha512-j2ijqcQQwMaDj82q/JBj0EFjg4UHxWuW3zQAE2dA6rBvpbINId8eUITIyzftElmnQyiuBC0oGa047TY2FDlg0w== dependencies: - "@cord.network/sdk" "0.9.5-rc1" - "@digitalcredentials/ed25519-signature-2020" "^6.0.0" - "@digitalcredentials/ed25519-verification-key-2020" "^4.0.0" - "@transmute/did-key-ed25519" "^0.3.0-unstable.10" + "@cord.network/sdk" "0.9.6-6" bs58 "^6.0.0" - ethereum-cryptography "^3.0.0" express "^4.21.1" jsonld "^8.3.2" - jsonld-signatures "^11.5.0" moment "^2.29.4" ts-node "^10.9.1" + uuid "^11.1.0" "@cspotcode/source-map-support@^0.8.0": version "0.8.1" @@ -275,30 +184,6 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@did-core/data-model@^0.1.1-unstable.13": - version "0.1.1-unstable.15" - resolved "https://registry.yarnpkg.com/@did-core/data-model/-/data-model-0.1.1-unstable.15.tgz#51ef2e99adebdf2d8ba8c43ed537f33916d6b8a8" - integrity sha512-l7gxLxegcXW7389G+j6o+S24lS8uasmJx5txWpW3QadNvOawKwvWn8bV59SdHSK806xNzIZaCLKmXKxebs8yAQ== - dependencies: - factory.ts "^0.5.1" - -"@did-core/did-ld-json@^0.1.1-unstable.13": - version "0.1.1-unstable.15" - resolved "https://registry.yarnpkg.com/@did-core/did-ld-json/-/did-ld-json-0.1.1-unstable.15.tgz#009a97491f7a897197a7373258bdf089602155db" - integrity sha512-p2jKRxSU+eJJqd+ewCklYp/XZ6ysISk8VU2/kANCoB/WwUy/kVgw2rUNScRDXw2utr9Qj36P8EZTYi4aj7vRCQ== - dependencies: - "@transmute/did-context" "^0.6.1-unstable.25" - jsonld-checker "^0.1.6" - -"@digitalbazaar/http-client@^1.1.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@digitalbazaar/http-client/-/http-client-1.2.0.tgz#1ea3661e77000a15bd892a294f20dc6cc5d1c93b" - integrity sha512-W9KQQ5pUJcaR0I4c2HPJC0a7kRbZApIorZgPnEDwMBgj16iQzutGLrCXYaZOmxqVLVNqqlQ4aUJh+HBQZy4W6Q== - dependencies: - esm "^3.2.22" - ky "^0.25.1" - ky-universal "^0.8.2" - "@digitalbazaar/http-client@^3.4.1": version "3.4.1" resolved "https://registry.yarnpkg.com/@digitalbazaar/http-client/-/http-client-3.4.1.tgz#5116fc44290d647cfe4b615d1f3fad9d6005e44d" @@ -308,79 +193,6 @@ ky-universal "^0.11.0" undici "^5.21.2" -"@digitalbazaar/security-context@^1.0.0", "@digitalbazaar/security-context@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@digitalbazaar/security-context/-/security-context-1.0.1.tgz#badc4b8da03411a32d4e7321ce7c4b355776b410" - integrity sha512-0WZa6tPiTZZF8leBtQgYAfXQePFQp2z5ivpCEN/iZguYYZ0TB9qRmWtan5XH6mNFuusHtMcyIzAcReyE6rZPhA== - -"@digitalcredentials/base58-universal@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@digitalcredentials/base58-universal/-/base58-universal-1.0.1.tgz#41b5a16cdeaac9cf01b23f1e564c560c2599b607" - integrity sha512-1xKdJnfITMvrF/sCgwBx2C4p7qcNAARyIvrAOZGqIHmBaT/hAenpC8bf44qVY+UIMuCYP23kqpIfJQebQDThDQ== - -"@digitalcredentials/ed25519-signature-2020@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@digitalcredentials/ed25519-signature-2020/-/ed25519-signature-2020-6.0.0.tgz#f2d3e76182bd3fddf692525930af1ad109d0c481" - integrity sha512-ncjJxGxMRtm7ooR1XdUT2dgXrGnFa4oAG1WMShBi93N5I1OUdUlNUtKrMiMzp6PlhVD+4x7VMuOA4oRM8adEgw== - dependencies: - "@digitalcredentials/base58-universal" "^1.0.1" - "@digitalcredentials/ed25519-verification-key-2020" "^3.1.1" - "@digitalcredentials/jsonld-signatures" "^12.0.0" - ed25519-signature-2018-context "^1.1.0" - ed25519-signature-2020-context "^1.0.1" - -"@digitalcredentials/ed25519-verification-key-2020@^3.1.1": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@digitalcredentials/ed25519-verification-key-2020/-/ed25519-verification-key-2020-3.2.2.tgz#cdf271bf4bb44dd2c417dcde6d7a0436e31d84ca" - integrity sha512-ZfxNFZlA379MZpf+gV2tUYyiZ15eGVgjtCQLWlyu3frWxsumUgv++o0OJlMnrDsWGwzFMRrsXcosd5+752rLOA== - dependencies: - "@digitalcredentials/base58-universal" "^1.0.1" - "@stablelib/ed25519" "^1.0.1" - base64url-universal "^1.1.0" - crypto-ld "^6.0.0" - -"@digitalcredentials/ed25519-verification-key-2020@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@digitalcredentials/ed25519-verification-key-2020/-/ed25519-verification-key-2020-4.0.0.tgz#f532be3de0f7bf813510103a4a32685fba17baf6" - integrity sha512-GrfITgp1guFbExZckj2q6LOxxm08PFSScr0lBYtDRezJa6CTpA9XQ8yXSSXE3LvpEi5/2uOMFxxIfKAtL1J2ww== - dependencies: - "@digitalcredentials/keypair" "^1.0.5" - "@noble/ed25519" "^1.7.1" - base-x "^4.0.0" - -"@digitalcredentials/http-client@^5.0.1": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@digitalcredentials/http-client/-/http-client-5.0.4.tgz#44e73ea1133d24bab720c0515f92df9126912fe7" - integrity sha512-TbbfFauhd5fUAcZ/6TDenTuYqkzqdEhxYk1Rqicxcz33B9rzvJcmT+/81KF9DrUXmu6gpoqCranT2UkZftsxZA== - dependencies: - ky "^1.0.1" - undici "^6.6.2" - -"@digitalcredentials/jsonld-signatures@^12.0.0": - version "12.0.1" - resolved "https://registry.yarnpkg.com/@digitalcredentials/jsonld-signatures/-/jsonld-signatures-12.0.1.tgz#af0c0018f84721218463bab203ecbec85606f6ff" - integrity sha512-KdyE7Bex+boqKRbvxofRyuI09BD6/8hQGSC5qbrXEmHd0oSLqePqKBM2pu9UZnzjxMZrN9sB3RqHxpijYEFh/w== - dependencies: - "@digitalbazaar/security-context" "^1.0.0" - "@digitalcredentials/jsonld" "^9.0.0" - fast-text-encoding "^1.0.3" - serialize-error "^8.0.1" - -"@digitalcredentials/jsonld@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@digitalcredentials/jsonld/-/jsonld-9.0.0.tgz#545abb40fd87caaa5ba95ec41b9ff84cb0d2696a" - integrity sha512-lWVpg65xQbi4lvXWs3BezCwPrGDAllFjHwTBUWJCoKsfGzxtxTwbRNXpfhii5psQ2vvpjPXSI+y0uyRNOzr4cw== - dependencies: - "@digitalcredentials/http-client" "^5.0.1" - canonicalize "^1.0.1" - lru-cache "^6.0.0" - rdf-canonize "^3.4.0" - -"@digitalcredentials/keypair@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@digitalcredentials/keypair/-/keypair-1.0.5.tgz#7d6c540beb89c2915bbf8aa189e6c025b8f23015" - integrity sha512-g0QvhJMTSFCoUkEvSeggwVTJa2jFkQXjf/mpTn9sePkz+5OouMEDfXUWL61juTaxK5JWPEFc0PKlolXzHaHHHQ== - "@fastify/busboy@^2.0.0": version "2.1.1" resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" @@ -404,9 +216,9 @@ integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/sourcemap-codec@^1.4.10": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + version "1.5.4" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz#7358043433b2e5da569aa02cbc4c121da3af27d7" + integrity sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" @@ -416,295 +228,287 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@noble/ciphers@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@noble/ciphers/-/ciphers-1.2.1.tgz#3812b72c057a28b44ff0ad4aff5ca846e5b9cdc9" - integrity sha512-rONPWMC7PeExE077uLE4oqWrZ1IvAfz3oH9LibVAcVCopJiA9R62uavnbEzdkVmJYI6M6Zgkbeb07+tWjlq2XA== - -"@noble/curves@1.8.1", "@noble/curves@^1.3.0", "@noble/curves@~1.8.1": - version "1.8.1" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.1.tgz#19bc3970e205c99e4bdb1c64a4785706bce497ff" - integrity sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ== +"@noble/curves@^1.3.0": + version "1.9.6" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.6.tgz#b45ebedca85bb75782f6be7e7f120f0c423c99e0" + integrity sha512-GIKz/j99FRthB8icyJQA51E8Uk5hXmdyThjgQXRKiv9h0zeRlzSCLIzFw6K1LotZ3XuB7yzlf76qk7uBmTdFqA== dependencies: - "@noble/hashes" "1.7.1" + "@noble/hashes" "1.8.0" -"@noble/ed25519@^1.7.1": - version "1.7.3" - resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.3.tgz#57e1677bf6885354b466c38e2b620c62f45a7123" - integrity sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ== - -"@noble/hashes@1.7.1", "@noble/hashes@^1.3.1", "@noble/hashes@^1.3.3", "@noble/hashes@~1.7.1": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f" - integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ== +"@noble/hashes@1.8.0", "@noble/hashes@^1.3.1", "@noble/hashes@^1.3.3": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" + integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@polkadot-api/client@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0": - version "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - resolved "https://registry.yarnpkg.com/@polkadot-api/client/-/client-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz#5d6b863f63f5c6ecd4183fcf0c5c84dd349f7627" - integrity sha512-0fqK6pUKcGHSG2pBvY+gfSS+1mMdjd/qRygAcKI5d05tKsnZLRnmhb9laDguKmGEIB0Bz9vQqNK3gIN/cfvVwg== - dependencies: - "@polkadot-api/metadata-builders" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - "@polkadot-api/substrate-bindings" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - "@polkadot-api/substrate-client" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - "@polkadot-api/utils" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" +"@polkadot-api/json-rpc-provider-proxy@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.1.0.tgz#6e191f28e7d0fbbe8b540fc51d12a0adaeba297e" + integrity sha512-8GSFE5+EF73MCuLQm8tjrbCqlgclcHBSRaswvXziJ0ZW7iw3UEMsKkkKvELayWyBuOPa2T5i1nj6gFOeIsqvrg== -"@polkadot-api/json-rpc-provider-proxy@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0": - version "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - resolved "https://registry.yarnpkg.com/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz#cc28fb801db6a47824261a709ab924ec6951eb96" - integrity sha512-0hZ8vtjcsyCX8AyqP2sqUHa1TFFfxGWmlXJkit0Nqp9b32MwZqn5eaUAiV2rNuEpoglKOdKnkGtUF8t5MoodKw== +"@polkadot-api/json-rpc-provider@0.0.1", "@polkadot-api/json-rpc-provider@^0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1.tgz#333645d40ccd9bccfd1f32503f17e4e63e76e297" + integrity sha512-/SMC/l7foRjpykLTUTacIH05H3mr9ip8b5xxfwXlVezXrNVLp3Cv0GX6uItkKd+ZjzVPf3PFrDF2B2/HLSNESA== -"@polkadot-api/json-rpc-provider@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0": - version "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - resolved "https://registry.yarnpkg.com/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz#2f71bfb192d28dd4c400ef8b1c5f934c676950f3" - integrity sha512-EaUS9Fc3wsiUr6ZS43PQqaRScW7kM6DYbuM/ou0aYjm8N9MBqgDbGm2oL6RE1vAVmOfEuHcXZuZkhzWtyvQUtA== +"@polkadot-api/metadata-builders@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@polkadot-api/metadata-builders/-/metadata-builders-0.3.2.tgz#007f158c9e0546cf79ba440befc0c753ab1a6629" + integrity sha512-TKpfoT6vTb+513KDzMBTfCb/ORdgRnsS3TDFpOhAhZ08ikvK+hjHMt5plPiAX/OWkm1Wc9I3+K6W0hX5Ab7MVg== + dependencies: + "@polkadot-api/substrate-bindings" "0.6.0" + "@polkadot-api/utils" "0.1.0" -"@polkadot-api/metadata-builders@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0": - version "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - resolved "https://registry.yarnpkg.com/@polkadot-api/metadata-builders/-/metadata-builders-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz#085db2a3c7b100626b2fae3be35a32a24ea7714f" - integrity sha512-BD7rruxChL1VXt0icC2gD45OtT9ofJlql0qIllHSRYgama1CR2Owt+ApInQxB+lWqM+xNOznZRpj8CXNDvKIMg== +"@polkadot-api/observable-client@^0.3.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@polkadot-api/observable-client/-/observable-client-0.3.2.tgz#fd91efee350595a6e0ecfd3f294cc80de86c0cf7" + integrity sha512-HGgqWgEutVyOBXoGOPp4+IAq6CNdK/3MfQJmhCJb8YaJiaK4W6aRGrdQuQSTPHfERHCARt9BrOmEvTXAT257Ug== dependencies: - "@polkadot-api/substrate-bindings" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - "@polkadot-api/utils" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" + "@polkadot-api/metadata-builders" "0.3.2" + "@polkadot-api/substrate-bindings" "0.6.0" + "@polkadot-api/utils" "0.1.0" -"@polkadot-api/substrate-bindings@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0": - version "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - resolved "https://registry.yarnpkg.com/@polkadot-api/substrate-bindings/-/substrate-bindings-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz#f836a554a9ead6fb6356079c725cd53f87238932" - integrity sha512-N4vdrZopbsw8k57uG58ofO7nLXM4Ai7835XqakN27MkjXMp5H830A1KJE0L9sGQR7ukOCDEIHHcwXVrzmJ/PBg== +"@polkadot-api/substrate-bindings@0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@polkadot-api/substrate-bindings/-/substrate-bindings-0.6.0.tgz#889b0c3ba19dc95282286506bf6e370a43ce119a" + integrity sha512-lGuhE74NA1/PqdN7fKFdE5C1gNYX357j1tWzdlPXI0kQ7h3kN0zfxNOpPUN7dIrPcOFZ6C0tRRVrBylXkI6xPw== dependencies: "@noble/hashes" "^1.3.1" - "@polkadot-api/utils" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" + "@polkadot-api/utils" "0.1.0" "@scure/base" "^1.1.1" scale-ts "^1.6.0" -"@polkadot-api/substrate-client@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0": - version "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - resolved "https://registry.yarnpkg.com/@polkadot-api/substrate-client/-/substrate-client-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz#55ae463f4143495e328465dd16b03e71663ef4c4" - integrity sha512-lcdvd2ssUmB1CPzF8s2dnNOqbrDa+nxaaGbuts+Vo8yjgSKwds2Lo7Oq+imZN4VKW7t9+uaVcKFLMF7PdH0RWw== - -"@polkadot-api/utils@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0": - version "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - resolved "https://registry.yarnpkg.com/@polkadot-api/utils/-/utils-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz#759698dcf948745ea37cc5ab6abd49a00f1b0c31" - integrity sha512-0CYaCjfLQJTCRCiYvZ81OncHXEKPzAexCMoVloR+v2nl/O2JRya/361MtPkeNLC6XBoaEgLAG9pWQpH3WePzsw== - -"@polkadot/api-augment@10.13.1": - version "10.13.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-augment/-/api-augment-10.13.1.tgz#dd3670a2f1a581c38b857ad3b0805b6581099c63" - integrity sha512-IAKaCp19QxgOG4HKk9RAgUgC/VNVqymZ2GXfMNOZWImZhxRIbrK+raH5vN2MbWwtVHpjxyXvGsd1RRhnohI33A== - dependencies: - "@polkadot/api-base" "10.13.1" - "@polkadot/rpc-augment" "10.13.1" - "@polkadot/types" "10.13.1" - "@polkadot/types-augment" "10.13.1" - "@polkadot/types-codec" "10.13.1" - "@polkadot/util" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/api-base@10.13.1": - version "10.13.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-base/-/api-base-10.13.1.tgz#efed5bb31e38244b6a68ce56138b97ad82101426" - integrity sha512-Okrw5hjtEjqSMOG08J6qqEwlUQujTVClvY1/eZkzKwNzPelWrtV6vqfyJklB7zVhenlxfxqhZKKcY7zWSW/q5Q== - dependencies: - "@polkadot/rpc-core" "10.13.1" - "@polkadot/types" "10.13.1" - "@polkadot/util" "^12.6.2" +"@polkadot-api/substrate-client@^0.1.2": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@polkadot-api/substrate-client/-/substrate-client-0.1.4.tgz#7a808e5cb85ecb9fa2b3a43945090a6c807430ce" + integrity sha512-MljrPobN0ZWTpn++da9vOvt+Ex+NlqTlr/XT7zi9sqPtDJiQcYl+d29hFAgpaeTqbeQKZwz3WDE9xcEfLE8c5A== + dependencies: + "@polkadot-api/json-rpc-provider" "0.0.1" + "@polkadot-api/utils" "0.1.0" + +"@polkadot-api/utils@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@polkadot-api/utils/-/utils-0.1.0.tgz#d36937cdc465c2ea302f3278cf53157340ab33a0" + integrity sha512-MXzWZeuGxKizPx2Xf/47wx9sr/uxKw39bVJUptTJdsaQn/TGq+z310mHzf1RCGvC1diHM8f593KrnDgc9oNbJA== + +"@polkadot/api-augment@15.10.2": + version "15.10.2" + resolved "https://registry.yarnpkg.com/@polkadot/api-augment/-/api-augment-15.10.2.tgz#421e0f786af588d46bf061181b57681ed7ffe191" + integrity sha512-CCli5ltPiJEyQF/8DmTRpTfYKHY4W0B+xQDmzKgFmd+Q64Qot0fGpsaZXZftef1Tuoh0Uqak9qM+6B4APXIPkQ== + dependencies: + "@polkadot/api-base" "15.10.2" + "@polkadot/rpc-augment" "15.10.2" + "@polkadot/types" "15.10.2" + "@polkadot/types-augment" "15.10.2" + "@polkadot/types-codec" "15.10.2" + "@polkadot/util" "^13.4.4" + tslib "^2.8.1" + +"@polkadot/api-base@15.10.2": + version "15.10.2" + resolved "https://registry.yarnpkg.com/@polkadot/api-base/-/api-base-15.10.2.tgz#c6e19d3ac707912a9f56538afb838709829cdeaa" + integrity sha512-7DJw++5IbPrsLPGcTlIZbMOretfvQJG80CW8+A+t2BLxbbv+I2neWNQ9QV9O28XsbOHzNgKHXuRyirdaG/dvrg== + dependencies: + "@polkadot/rpc-core" "15.10.2" + "@polkadot/types" "15.10.2" + "@polkadot/util" "^13.4.4" rxjs "^7.8.1" - tslib "^2.6.2" - -"@polkadot/api-derive@10.13.1": - version "10.13.1" - resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-10.13.1.tgz#d8827ee83124f3b3f664c415cdde9c6b909e5145" - integrity sha512-ef0H0GeCZ4q5Om+c61eLLLL29UxFC2/u/k8V1K2JOIU+2wD5LF7sjAoV09CBMKKHfkLenRckVk2ukm4rBqFRpg== - dependencies: - "@polkadot/api" "10.13.1" - "@polkadot/api-augment" "10.13.1" - "@polkadot/api-base" "10.13.1" - "@polkadot/rpc-core" "10.13.1" - "@polkadot/types" "10.13.1" - "@polkadot/types-codec" "10.13.1" - "@polkadot/util" "^12.6.2" - "@polkadot/util-crypto" "^12.6.2" + tslib "^2.8.1" + +"@polkadot/api-derive@15.10.2": + version "15.10.2" + resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-15.10.2.tgz#1f30208c98d0452a1d7592deabd529e67f1d5375" + integrity sha512-tF9DZvdm7hkRIJ1HtJzu73vdqQWBr8935YSN/RNsRb4FhJK5cHaC2uB4NLdRMnyUjmH0JRSnvWFq+HHcVxFJZw== + dependencies: + "@polkadot/api" "15.10.2" + "@polkadot/api-augment" "15.10.2" + "@polkadot/api-base" "15.10.2" + "@polkadot/rpc-core" "15.10.2" + "@polkadot/types" "15.10.2" + "@polkadot/types-codec" "15.10.2" + "@polkadot/util" "^13.4.4" + "@polkadot/util-crypto" "^13.4.4" rxjs "^7.8.1" - tslib "^2.6.2" - -"@polkadot/api@10.13.1", "@polkadot/api@^10.12.2": - version "10.13.1" - resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-10.13.1.tgz#47586c070d3fe13a0acc93a8aa9c3a53791284fb" - integrity sha512-YrKWR4TQR5CDyGkF0mloEUo7OsUA+bdtENpJGOtNavzOQUDEbxFE0PVzokzZfVfHhHX2CojPVmtzmmLxztyJkg== - dependencies: - "@polkadot/api-augment" "10.13.1" - "@polkadot/api-base" "10.13.1" - "@polkadot/api-derive" "10.13.1" - "@polkadot/keyring" "^12.6.2" - "@polkadot/rpc-augment" "10.13.1" - "@polkadot/rpc-core" "10.13.1" - "@polkadot/rpc-provider" "10.13.1" - "@polkadot/types" "10.13.1" - "@polkadot/types-augment" "10.13.1" - "@polkadot/types-codec" "10.13.1" - "@polkadot/types-create" "10.13.1" - "@polkadot/types-known" "10.13.1" - "@polkadot/util" "^12.6.2" - "@polkadot/util-crypto" "^12.6.2" + tslib "^2.8.1" + +"@polkadot/api@15.10.2", "@polkadot/api@^15.9.1": + version "15.10.2" + resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-15.10.2.tgz#2a883b135d4f5bfcf7c7039d74f47c60c1bf59b2" + integrity sha512-UM/510TwdugPjMpfyhhMNOZJ3M2ftRk0Ftxe+WSWev3o1u0dxqGuIN6fN0c224CHXIr58uWXUoMRHi6Cnfaxhw== + dependencies: + "@polkadot/api-augment" "15.10.2" + "@polkadot/api-base" "15.10.2" + "@polkadot/api-derive" "15.10.2" + "@polkadot/keyring" "^13.4.4" + "@polkadot/rpc-augment" "15.10.2" + "@polkadot/rpc-core" "15.10.2" + "@polkadot/rpc-provider" "15.10.2" + "@polkadot/types" "15.10.2" + "@polkadot/types-augment" "15.10.2" + "@polkadot/types-codec" "15.10.2" + "@polkadot/types-create" "15.10.2" + "@polkadot/types-known" "15.10.2" + "@polkadot/util" "^13.4.4" + "@polkadot/util-crypto" "^13.4.4" eventemitter3 "^5.0.1" rxjs "^7.8.1" - tslib "^2.6.2" - -"@polkadot/keyring@^12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-12.6.2.tgz#6067e6294fee23728b008ac116e7e9db05cecb9b" - integrity sha512-O3Q7GVmRYm8q7HuB3S0+Yf/q/EB2egKRRU3fv9b3B7V+A52tKzA+vIwEmNVaD1g5FKW9oB97rmpggs0zaKFqHw== - dependencies: - "@polkadot/util" "12.6.2" - "@polkadot/util-crypto" "12.6.2" - tslib "^2.6.2" - -"@polkadot/networks@12.6.2", "@polkadot/networks@^12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-12.6.2.tgz#791779fee1d86cc5b6cd371858eea9b7c3f8720d" - integrity sha512-1oWtZm1IvPWqvMrldVH6NI2gBoCndl5GEwx7lAuQWGr7eNL+6Bdc5K3Z9T0MzFvDGoi2/CBqjX9dRKo39pDC/w== - dependencies: - "@polkadot/util" "12.6.2" - "@substrate/ss58-registry" "^1.44.0" - tslib "^2.6.2" - -"@polkadot/rpc-augment@10.13.1", "@polkadot/rpc-augment@^10.12.2": - version "10.13.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-augment/-/rpc-augment-10.13.1.tgz#83317b46c5ab86104cca2bdc336199db0c25b798" - integrity sha512-iLsWUW4Jcx3DOdVrSHtN0biwxlHuTs4QN2hjJV0gd0jo7W08SXhWabZIf9mDmvUJIbR7Vk+9amzvegjRyIf5+A== - dependencies: - "@polkadot/rpc-core" "10.13.1" - "@polkadot/types" "10.13.1" - "@polkadot/types-codec" "10.13.1" - "@polkadot/util" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/rpc-core@10.13.1", "@polkadot/rpc-core@^10.12.2": - version "10.13.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-10.13.1.tgz#a7ea9db8997b68aa6724f28ba76125a73e925575" - integrity sha512-eoejSHa+/tzHm0vwic62/aptTGbph8vaBpbvLIK7gd00+rT813ROz5ckB1CqQBFB23nHRLuzzX/toY8ID3xrKw== - dependencies: - "@polkadot/rpc-augment" "10.13.1" - "@polkadot/rpc-provider" "10.13.1" - "@polkadot/types" "10.13.1" - "@polkadot/util" "^12.6.2" + tslib "^2.8.1" + +"@polkadot/keyring@^13.4.3", "@polkadot/keyring@^13.4.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-13.5.4.tgz#7feb053dc627f3cf0511d89ef850023d32041441" + integrity sha512-dQ/yq2OAl6jvjH+drxyqcfprsU2J9h74GSy5X4499W6YNwCt/2pxAJbmsM3lDWUlGOV1Wnp/aNHHs9kjb8GaJw== + dependencies: + "@polkadot/util" "13.5.4" + "@polkadot/util-crypto" "13.5.4" + tslib "^2.8.0" + +"@polkadot/networks@13.5.4", "@polkadot/networks@^13.4.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-13.5.4.tgz#704ebec54f43029285247fdaeb19ac4b370ba7a1" + integrity sha512-JD7brNZsWTWbT3bDnEsAYkJfESvmn1XcoFMLoivVrg8dPXqYxoWcYveKPORjPyMPP6wgJ498vJGq7Ce0ihZ8ig== + dependencies: + "@polkadot/util" "13.5.4" + "@substrate/ss58-registry" "^1.51.0" + tslib "^2.8.0" + +"@polkadot/rpc-augment@15.10.2", "@polkadot/rpc-augment@^15.9.1": + version "15.10.2" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-augment/-/rpc-augment-15.10.2.tgz#2ac6bb008e5d015625720ba5b5b0e754f2f12f4f" + integrity sha512-9QQ8utyAEdEl7iScteIN59EBu8eNZjZa8AfKBitbdq1Hezd+WPil5LdoYi+wmJOMhZHeDT1s7/j2+kY1Z2Vymg== + dependencies: + "@polkadot/rpc-core" "15.10.2" + "@polkadot/types" "15.10.2" + "@polkadot/types-codec" "15.10.2" + "@polkadot/util" "^13.4.4" + tslib "^2.8.1" + +"@polkadot/rpc-core@15.10.2", "@polkadot/rpc-core@^15.9.1": + version "15.10.2" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-15.10.2.tgz#3dc886c6e600f1ce098bcf1fa14a9f9a2a8c149c" + integrity sha512-vqDvr1WcHH3WPzDV4WTlf2S5cDmIoFPciynJ8eNcKqR3mG7Cqd0iL+MG6s0KFXdSY2Qvtl+0C6yZN0xr4Ha6BQ== + dependencies: + "@polkadot/rpc-augment" "15.10.2" + "@polkadot/rpc-provider" "15.10.2" + "@polkadot/types" "15.10.2" + "@polkadot/util" "^13.4.4" rxjs "^7.8.1" - tslib "^2.6.2" - -"@polkadot/rpc-provider@10.13.1", "@polkadot/rpc-provider@^10.12.2": - version "10.13.1" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-10.13.1.tgz#7e17f7be7d9a104b797d8f5aa8f1ed69f800f841" - integrity sha512-oJ7tatVXYJ0L7NpNiGd69D558HG5y5ZDmH2Bp9Dd4kFTQIiV8A39SlWwWUPCjSsen9lqSvvprNLnG/VHTpenbw== - dependencies: - "@polkadot/keyring" "^12.6.2" - "@polkadot/types" "10.13.1" - "@polkadot/types-support" "10.13.1" - "@polkadot/util" "^12.6.2" - "@polkadot/util-crypto" "^12.6.2" - "@polkadot/x-fetch" "^12.6.2" - "@polkadot/x-global" "^12.6.2" - "@polkadot/x-ws" "^12.6.2" + tslib "^2.8.1" + +"@polkadot/rpc-provider@15.10.2", "@polkadot/rpc-provider@^15.9.1": + version "15.10.2" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-15.10.2.tgz#bf40e7a9ee4fef1a698a07b30998fb479a3212ad" + integrity sha512-kqpPW8U0stVW+uOZP8g5d87Xb8rbXJR5PUub6xgGG6AOMbbvvuCU3GSohu/iozo4p9uD7TGH90jvbxj1rjJVMA== + dependencies: + "@polkadot/keyring" "^13.4.4" + "@polkadot/types" "15.10.2" + "@polkadot/types-support" "15.10.2" + "@polkadot/util" "^13.4.4" + "@polkadot/util-crypto" "^13.4.4" + "@polkadot/x-fetch" "^13.4.4" + "@polkadot/x-global" "^13.4.4" + "@polkadot/x-ws" "^13.4.4" eventemitter3 "^5.0.1" mock-socket "^9.3.1" - nock "^13.5.0" - tslib "^2.6.2" + nock "^13.5.5" + tslib "^2.8.1" optionalDependencies: - "@substrate/connect" "0.8.8" - -"@polkadot/types-augment@10.13.1": - version "10.13.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-augment/-/types-augment-10.13.1.tgz#8f39a46a1a3e100be03cbae06f43a043cb25c337" - integrity sha512-TcrLhf95FNFin61qmVgOgayzQB/RqVsSg9thAso1Fh6pX4HSbvI35aGPBAn3SkA6R+9/TmtECirpSNLtIGFn0g== - dependencies: - "@polkadot/types" "10.13.1" - "@polkadot/types-codec" "10.13.1" - "@polkadot/util" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/types-codec@10.13.1", "@polkadot/types-codec@^10.12.2": - version "10.13.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-codec/-/types-codec-10.13.1.tgz#f70cd617160b467685ef3ce5195a04142255ba7b" - integrity sha512-AiQ2Vv2lbZVxEdRCN8XSERiWlOWa2cTDLnpAId78EnCtx4HLKYQSd+Jk9Y4BgO35R79mchK4iG+w6gZ+ukG2bg== - dependencies: - "@polkadot/util" "^12.6.2" - "@polkadot/x-bigint" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/types-create@10.13.1": - version "10.13.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-create/-/types-create-10.13.1.tgz#99470816d0d2ca32a6a5ce6d701b4199e8700f66" - integrity sha512-Usn1jqrz35SXgCDAqSXy7mnD6j4RvB4wyzTAZipFA6DGmhwyxxIgOzlWQWDb+1PtPKo9vtMzen5IJ+7w5chIeA== - dependencies: - "@polkadot/types-codec" "10.13.1" - "@polkadot/util" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/types-known@10.13.1": - version "10.13.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-10.13.1.tgz#8cca2d3f2c4ef67849f66ba4a35856063ec61f5f" - integrity sha512-uHjDW05EavOT5JeU8RbiFWTgPilZ+odsCcuEYIJGmK+es3lk/Qsdns9Zb7U7NJl7eJ6OWmRtyrWsLs+bU+jjIQ== - dependencies: - "@polkadot/networks" "^12.6.2" - "@polkadot/types" "10.13.1" - "@polkadot/types-codec" "10.13.1" - "@polkadot/types-create" "10.13.1" - "@polkadot/util" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/types-support@10.13.1": - version "10.13.1" - resolved "https://registry.yarnpkg.com/@polkadot/types-support/-/types-support-10.13.1.tgz#d4b58c8d9bcbb8e897a255d9a66c217dcaa6ead4" - integrity sha512-4gEPfz36XRQIY7inKq0HXNVVhR6HvXtm7yrEmuBuhM86LE0lQQBkISUSgR358bdn2OFSLMxMoRNoh3kcDvdGDQ== - dependencies: - "@polkadot/util" "^12.6.2" - tslib "^2.6.2" - -"@polkadot/types@10.13.1", "@polkadot/types@^10.12.2": - version "10.13.1" - resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-10.13.1.tgz#979d652dc11af9cb8b32e7a55839e9762532755d" - integrity sha512-Hfvg1ZgJlYyzGSAVrDIpp3vullgxrjOlh/CSThd/PI4TTN1qHoPSFm2hs77k3mKkOzg+LrWsLE0P/LP2XddYcw== - dependencies: - "@polkadot/keyring" "^12.6.2" - "@polkadot/types-augment" "10.13.1" - "@polkadot/types-codec" "10.13.1" - "@polkadot/types-create" "10.13.1" - "@polkadot/util" "^12.6.2" - "@polkadot/util-crypto" "^12.6.2" + "@substrate/connect" "0.8.11" + +"@polkadot/types-augment@15.10.2": + version "15.10.2" + resolved "https://registry.yarnpkg.com/@polkadot/types-augment/-/types-augment-15.10.2.tgz#4a9c20406cf930b73ae969218bb5f52e8c069bbe" + integrity sha512-X/xh+Dzud6OIyr7q8xttAwn+Fb5hKImIWEO1oG8WcInqv+P0vRyu7Tds+2ut9t64sJi3ydJ7I+T+WxZYheCU7g== + dependencies: + "@polkadot/types" "15.10.2" + "@polkadot/types-codec" "15.10.2" + "@polkadot/util" "^13.4.4" + tslib "^2.8.1" + +"@polkadot/types-codec@15.10.2": + version "15.10.2" + resolved "https://registry.yarnpkg.com/@polkadot/types-codec/-/types-codec-15.10.2.tgz#44644dc75da4f0fb0cea3e5813e052f19a0873d4" + integrity sha512-dhwbaukUZiYDW3QAAnLAFThYE5hQGdwBMWOVTt9+aBWxEKovLK93j0V30tEzMUtrZy8xaRWdhdDeQ3DSmxEP6w== + dependencies: + "@polkadot/util" "^13.4.4" + "@polkadot/x-bigint" "^13.4.4" + tslib "^2.8.1" + +"@polkadot/types-create@15.10.2": + version "15.10.2" + resolved "https://registry.yarnpkg.com/@polkadot/types-create/-/types-create-15.10.2.tgz#b29ba936802ab088ee5dfc0c0513498c4969a461" + integrity sha512-vqXwPUSgx/By31qSkhOR5GN6zMbF1MkiX3F1g5KKHaRE8p/DdTry4LhufxhtK1mr9eBWvVGXxCOZdwjQco2M1A== + dependencies: + "@polkadot/types-codec" "15.10.2" + "@polkadot/util" "^13.4.4" + tslib "^2.8.1" + +"@polkadot/types-known@15.10.2": + version "15.10.2" + resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-15.10.2.tgz#728aefaf57120c5edcb3fe72eb2d4741dd8a6b1a" + integrity sha512-vs02WiIlLualrrh/EuA5qzK6QzatVPqBBNqa66dUtmyhJy48OEelBK+QLfOIQvZKU0ModEunoVrnxuY+O1DCmA== + dependencies: + "@polkadot/networks" "^13.4.4" + "@polkadot/types" "15.10.2" + "@polkadot/types-codec" "15.10.2" + "@polkadot/types-create" "15.10.2" + "@polkadot/util" "^13.4.4" + tslib "^2.8.1" + +"@polkadot/types-support@15.10.2": + version "15.10.2" + resolved "https://registry.yarnpkg.com/@polkadot/types-support/-/types-support-15.10.2.tgz#948627b4fd32ab4ab8f3177924f1da4015838388" + integrity sha512-sHamH6MehJa7aGZ/DHTB6vJAhSN5VrJx5lpDpb3xgBFTr0cVc5IsociqgJ/mgvyEIdLF3laraPxREqxCmuxTaQ== + dependencies: + "@polkadot/util" "^13.4.4" + tslib "^2.8.1" + +"@polkadot/types@15.10.2", "@polkadot/types@^15.9.1": + version "15.10.2" + resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-15.10.2.tgz#3ae5a40b3a02c4c48c6433519923d5685f3b4751" + integrity sha512-/wDwKdDijxSXyNk5YezhVitdFxoQaTSSG9KXa7dEWujtmS/51UHmt9+P3W8b8D8kKaCvumahf/ww3GJI6s0Eqw== + dependencies: + "@polkadot/keyring" "^13.4.4" + "@polkadot/types-augment" "15.10.2" + "@polkadot/types-codec" "15.10.2" + "@polkadot/types-create" "15.10.2" + "@polkadot/util" "^13.4.4" + "@polkadot/util-crypto" "^13.4.4" rxjs "^7.8.1" - tslib "^2.6.2" + tslib "^2.8.1" -"@polkadot/util-crypto@12.6.2", "@polkadot/util-crypto@^12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-12.6.2.tgz#d2d51010e8e8ca88951b7d864add797dad18bbfc" - integrity sha512-FEWI/dJ7wDMNN1WOzZAjQoIcCP/3vz3wvAp5QQm+lOrzOLj0iDmaIGIcBkz8HVm3ErfSe/uKP0KS4jgV/ib+Mg== +"@polkadot/util-crypto@13.5.4", "@polkadot/util-crypto@^13.4.3", "@polkadot/util-crypto@^13.4.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-13.5.4.tgz#32846e67c910bbc24beffb72c16da88d39238176" + integrity sha512-XkKtiUi6I60DxT0dblGajZsqX4jWTnMpj4Pqxddz61KbpmvyybtAUqgmXOmO/Mob6TgGTutPuFeE7uMNEdFdJw== dependencies: "@noble/curves" "^1.3.0" "@noble/hashes" "^1.3.3" - "@polkadot/networks" "12.6.2" - "@polkadot/util" "12.6.2" - "@polkadot/wasm-crypto" "^7.3.2" - "@polkadot/wasm-util" "^7.3.2" - "@polkadot/x-bigint" "12.6.2" - "@polkadot/x-randomvalues" "12.6.2" - "@scure/base" "^1.1.5" - tslib "^2.6.2" - -"@polkadot/util@12.6.2", "@polkadot/util@^12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-12.6.2.tgz#9396eff491221e1f0fd28feac55fc16ecd61a8dc" - integrity sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw== - dependencies: - "@polkadot/x-bigint" "12.6.2" - "@polkadot/x-global" "12.6.2" - "@polkadot/x-textdecoder" "12.6.2" - "@polkadot/x-textencoder" "12.6.2" - "@types/bn.js" "^5.1.5" + "@polkadot/networks" "13.5.4" + "@polkadot/util" "13.5.4" + "@polkadot/wasm-crypto" "^7.4.1" + "@polkadot/wasm-util" "^7.4.1" + "@polkadot/x-bigint" "13.5.4" + "@polkadot/x-randomvalues" "13.5.4" + "@scure/base" "^1.1.7" + tslib "^2.8.0" + +"@polkadot/util@13.5.4", "@polkadot/util@^13.4.3", "@polkadot/util@^13.4.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-13.5.4.tgz#dd10518dddc2d2bf2600ef06c34bd66cd36589ab" + integrity sha512-w/D7tqfx5a+yHcVBTb+CWGwpJTwcFRNJaVIBxl/MjF3x8JUZCtcKNwklpWJH5HtwaXT1Mt2aBKjoxlNdnd6FYg== + dependencies: + "@polkadot/x-bigint" "13.5.4" + "@polkadot/x-global" "13.5.4" + "@polkadot/x-textdecoder" "13.5.4" + "@polkadot/x-textencoder" "13.5.4" + "@types/bn.js" "^5.1.6" bn.js "^5.2.1" - tslib "^2.6.2" + tslib "^2.8.0" "@polkadot/wasm-bridge@7.4.1": version "7.4.1" @@ -740,7 +544,7 @@ "@polkadot/wasm-util" "7.4.1" tslib "^2.7.0" -"@polkadot/wasm-crypto@^7.3.2": +"@polkadot/wasm-crypto@^7.4.1": version "7.4.1" resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-7.4.1.tgz#6d5f94d28bf92ef234b94d55b0d1f4299cbbb7b7" integrity sha512-kHN/kF7hYxm1y0WeFLWeWir6oTzvcFmR4N8fJJokR+ajYbdmrafPN+6iLgQVbhZnDdxyv9jWDuRRsDnBx8tPMQ== @@ -752,260 +556,145 @@ "@polkadot/wasm-util" "7.4.1" tslib "^2.7.0" -"@polkadot/wasm-util@7.4.1", "@polkadot/wasm-util@^7.3.2": +"@polkadot/wasm-util@7.4.1", "@polkadot/wasm-util@^7.4.1": version "7.4.1" resolved "https://registry.yarnpkg.com/@polkadot/wasm-util/-/wasm-util-7.4.1.tgz#e8cea38a3b752efdef55080bb1da795ac71c5136" integrity sha512-RAcxNFf3zzpkr+LX/ItAsvj+QyM56TomJ0xjUMo4wKkHjwsxkz4dWJtx5knIgQz/OthqSDMR59VNEycQeNuXzA== dependencies: tslib "^2.7.0" -"@polkadot/x-bigint@12.6.2", "@polkadot/x-bigint@^12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-12.6.2.tgz#59b7a615f205ae65e1ac67194aefde94d3344580" - integrity sha512-HSIk60uFPX4GOFZSnIF7VYJz7WZA7tpFJsne7SzxOooRwMTWEtw3fUpFy5cYYOeLh17/kHH1Y7SVcuxzVLc74Q== +"@polkadot/x-bigint@13.5.4", "@polkadot/x-bigint@^13.4.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/x-bigint/-/x-bigint-13.5.4.tgz#6b44bef61fb46f57938142800a72c6faa5a5873f" + integrity sha512-vA4vjHWDUAnoAxzp1kSQMCzaArdagGXCNlooI2EOZ0pcFnEf4NkKCVjYg8i5L1QOYRAeJjgoKjKwCFBx63vtRw== dependencies: - "@polkadot/x-global" "12.6.2" - tslib "^2.6.2" + "@polkadot/x-global" "13.5.4" + tslib "^2.8.0" -"@polkadot/x-fetch@^12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-12.6.2.tgz#b1bca028db90263bafbad2636c18d838d842d439" - integrity sha512-8wM/Z9JJPWN1pzSpU7XxTI1ldj/AfC8hKioBlUahZ8gUiJaOF7K9XEFCrCDLis/A1BoOu7Ne6WMx/vsJJIbDWw== +"@polkadot/x-fetch@^13.4.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-13.5.4.tgz#d5cf5537da371182d91469c5232b2f9a72e96094" + integrity sha512-VVhmfPaQwFVopgtMUCNhodyZXBy9P4wkQwwYWpkQv2KqYOEQVck/Hhq8IVhGdbtPJxCAWsj/EyYTzUIHZ9aBlw== dependencies: - "@polkadot/x-global" "12.6.2" + "@polkadot/x-global" "13.5.4" node-fetch "^3.3.2" - tslib "^2.6.2" + tslib "^2.8.0" -"@polkadot/x-global@12.6.2", "@polkadot/x-global@^12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-12.6.2.tgz#31d4de1c3d4c44e4be3219555a6d91091decc4ec" - integrity sha512-a8d6m+PW98jmsYDtAWp88qS4dl8DyqUBsd0S+WgyfSMtpEXu6v9nXDgPZgwF5xdDvXhm+P0ZfVkVTnIGrScb5g== +"@polkadot/x-global@13.5.4", "@polkadot/x-global@^13.4.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-13.5.4.tgz#070c8c69118db758a679304bd216adfc2c405f73" + integrity sha512-oRUdO8/uKOEmLoPUFYgGascE/nyjT2ObRdf7jgwXOd9f+uUHPiE3K/MNAEi9t9sRKs8dbqgyaGWLTRYCDyzMag== dependencies: - tslib "^2.6.2" + tslib "^2.8.0" -"@polkadot/x-randomvalues@12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-12.6.2.tgz#13fe3619368b8bf5cb73781554859b5ff9d900a2" - integrity sha512-Vr8uG7rH2IcNJwtyf5ebdODMcr0XjoCpUbI91Zv6AlKVYOGKZlKLYJHIwpTaKKB+7KPWyQrk4Mlym/rS7v9feg== +"@polkadot/x-randomvalues@13.5.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-13.5.4.tgz#638e88f3421f29ace61fb44608cf16dacb017c54" + integrity sha512-jKVEj+wVO83drbFFGGxhHJqwsOZCzyy6HVwQ/M9G6zhNXHrT46OWK+myd3dB4KbHoxWuH03Nvh540vMC3ah8Fw== dependencies: - "@polkadot/x-global" "12.6.2" - tslib "^2.6.2" + "@polkadot/x-global" "13.5.4" + tslib "^2.8.0" -"@polkadot/x-textdecoder@12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz#b86da0f8e8178f1ca31a7158257e92aea90b10e4" - integrity sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w== +"@polkadot/x-textdecoder@13.5.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-13.5.4.tgz#8400fc8c248ac0782926eced85e014df81bdee44" + integrity sha512-+5rWIs+mhvBR2D7+/gWQyKKDoQzyHRIUrygphxdpBsFSvsJkTTGeGXLiD/ls0gTTE31Kb6StQJi1b9h6ywOvfg== dependencies: - "@polkadot/x-global" "12.6.2" - tslib "^2.6.2" + "@polkadot/x-global" "13.5.4" + tslib "^2.8.0" -"@polkadot/x-textencoder@12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz#81d23bd904a2c36137a395c865c5fefa21abfb44" - integrity sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw== +"@polkadot/x-textencoder@13.5.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-13.5.4.tgz#177d1cb0c9d6e0bd6fd54baee7cb0aa1fe923200" + integrity sha512-GQ4kVJLtiirjI3NAKCnXCSIRudpTKog5SFPqouImV4X5rSsxnLf2xOqLwgYobdv3SIpTHBA1vy2RpQqUQUF6vw== dependencies: - "@polkadot/x-global" "12.6.2" - tslib "^2.6.2" + "@polkadot/x-global" "13.5.4" + tslib "^2.8.0" -"@polkadot/x-ws@^12.6.2": - version "12.6.2" - resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-12.6.2.tgz#b99094d8e53a03be1de903d13ba59adaaabc767a" - integrity sha512-cGZWo7K5eRRQCRl2LrcyCYsrc3lRbTlixZh3AzgU8uX4wASVGRlNWi/Hf4TtHNe1ExCDmxabJzdIsABIfrr7xw== +"@polkadot/x-ws@^13.4.4": + version "13.5.4" + resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-13.5.4.tgz#b3dbc365ec53bf48b6ba699ab050480ef58ec5be" + integrity sha512-tznbRjPnb3QW8v6+7zUoJINL84DW2dHJjwd0rkU0dtwzc9Y92faxz3bgOrCpgC2oVDpyUUg2PsyjokVBQHqLSA== dependencies: - "@polkadot/x-global" "12.6.2" - tslib "^2.6.2" - ws "^8.15.1" + "@polkadot/x-global" "13.5.4" + tslib "^2.8.0" + ws "^8.18.0" -"@scarf/scarf@=1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@scarf/scarf/-/scarf-1.4.0.tgz#3bbb984085dbd6d982494538b523be1ce6562972" - integrity sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ== - -"@scure/base@^1.1.1", "@scure/base@^1.1.5", "@scure/base@~1.2.2", "@scure/base@~1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.4.tgz#002eb571a35d69bdb4c214d0995dff76a8dcd2a9" - integrity sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ== +"@redis/bloom@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@redis/bloom/-/bloom-5.8.0.tgz#bfd910f4c5361a98c93226731d420358c09eb660" + integrity sha512-kpKZzAAjGiGYn88Bqq6+ozxPg6kGYWRZH9vnOwGcoSCbrW14SZpZVMYMFSio8FH9ZJUdUcmT/RLGlA1W1t0UWQ== -"@scure/bip32@1.6.2": - version "1.6.2" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.6.2.tgz#093caa94961619927659ed0e711a6e4bf35bffd0" - integrity sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw== +"@redis/client@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@redis/client/-/client-5.8.0.tgz#16963d9211faac13c62e7d9dbf1672dec5ba6d4d" + integrity sha512-ywZjKGoSSAECGYOd9bJpws6d4867SN686obUWT/sRmo1c/Q8V+jWyInvlqwKa0BOvTHHwYeB2WFUEvd6PADeOQ== dependencies: - "@noble/curves" "~1.8.1" - "@noble/hashes" "~1.7.1" - "@scure/base" "~1.2.2" + cluster-key-slot "1.1.2" -"@scure/bip39@1.5.4": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.5.4.tgz#07fd920423aa671be4540d59bdd344cc1461db51" - integrity sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA== - dependencies: - "@noble/hashes" "~1.7.1" - "@scure/base" "~1.2.4" +"@redis/json@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@redis/json/-/json-5.8.0.tgz#802bb3280ab662ea9215433669d5c49b6d0e7c92" + integrity sha512-xPBpwY6aKoRzMSu67MpwrBiSliON9bfHo9Y/pSPBjW8/KoOm1MzGqwJUO20qdjXpFoKJsDWwxIE1LHdBNzcImw== + +"@redis/search@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@redis/search/-/search-5.8.0.tgz#54d996a1f6f14f35d55e2b5eaa57e6ba2a511003" + integrity sha512-lF9pNv9vySmirm1EzCH6YeRjhvH6lLT7tvebYHEM7WTkEQ/7kZWb4athliKESHpxzTQ36U9UbzuedSywHV6OhQ== + +"@redis/time-series@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@redis/time-series/-/time-series-5.8.0.tgz#7dc4f2c08c0482bac1f845d8e949c465e42fe60f" + integrity sha512-kPTlW2ACXokjQNXjCD8Pw9mHDoB94AHUlHFahyjxz9lUJUVwiva2Dgfrd2k3JxHhSBqyY2PREIj9YwIUSTSSqQ== + +"@scure/base@^1.1.1", "@scure/base@^1.1.7": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.6.tgz#ca917184b8231394dd8847509c67a0be522e59f6" + integrity sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg== "@sqltools/formatter@^1.2.5": version "1.2.5" resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.5.tgz#3abc203c79b8c3e90fd6c156a0c62d5403520e12" integrity sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw== -"@stablelib/binary@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/binary/-/binary-1.0.1.tgz#c5900b94368baf00f811da5bdb1610963dfddf7f" - integrity sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q== - dependencies: - "@stablelib/int" "^1.0.1" - -"@stablelib/bytes@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/bytes/-/bytes-1.0.1.tgz#0f4aa7b03df3080b878c7dea927d01f42d6a20d8" - integrity sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ== - -"@stablelib/ed25519@^1.0.1": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@stablelib/ed25519/-/ed25519-1.0.3.tgz#f8fdeb6f77114897c887bb6a3138d659d3f35996" - integrity sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg== - dependencies: - "@stablelib/random" "^1.0.2" - "@stablelib/sha512" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/hash@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/hash/-/hash-1.0.1.tgz#3c944403ff2239fad8ebb9015e33e98444058bc5" - 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" - integrity sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w== - -"@stablelib/keyagreement@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz#4612efb0a30989deb437cd352cee637ca41fc50f" - integrity sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg== - dependencies: - "@stablelib/bytes" "^1.0.1" - -"@stablelib/random@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@stablelib/random/-/random-1.0.2.tgz#2dece393636489bf7e19c51229dd7900eddf742c" - integrity sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w== - dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/sha512@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/sha512/-/sha512-1.0.1.tgz#6da700c901c2c0ceacbd3ae122a38ac57c72145f" - integrity sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw== - dependencies: - "@stablelib/binary" "^1.0.1" - "@stablelib/hash" "^1.0.1" - "@stablelib/wipe" "^1.0.1" - -"@stablelib/wipe@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@stablelib/wipe/-/wipe-1.0.1.tgz#d21401f1d59ade56a62e139462a97f104ed19a36" - integrity sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg== - -"@stablelib/x25519@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@stablelib/x25519/-/x25519-1.0.3.tgz#13c8174f774ea9f3e5e42213cbf9fc68a3c7b7fd" - integrity sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw== - dependencies: - "@stablelib/keyagreement" "^1.0.1" - "@stablelib/random" "^1.0.2" - "@stablelib/wipe" "^1.0.1" - "@substrate/connect-extension-protocol@^2.0.0": version "2.2.2" resolved "https://registry.yarnpkg.com/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.2.2.tgz#2cf8f2eaf1879308d307a1a08df83cd5db918fe0" integrity sha512-t66jwrXA0s5Goq82ZtjagLNd7DPGCNjHeehRlE/gcJmJ+G56C0W+2plqOMRicJ8XGR1/YFnUSEqUFiSNbjGrAA== -"@substrate/connect-known-chains@^1.1.1": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@substrate/connect-known-chains/-/connect-known-chains-1.9.2.tgz#9cbed20cf03091f28fc4319fe2419f735729ce52" - integrity sha512-uEmm+rKJQQhhbforvmcg74TsDHKFVBkstjPwblGT1RdHMxUKR7Gq7F8vbkGnr5ce9tMK2Ylil760Z7vtX013hw== +"@substrate/connect-known-chains@^1.1.5": + version "1.10.3" + resolved "https://registry.yarnpkg.com/@substrate/connect-known-chains/-/connect-known-chains-1.10.3.tgz#71a89864f13626c412fa0a9d0ffc4f6ca39fdcec" + integrity sha512-OJEZO1Pagtb6bNE3wCikc2wrmvEU5x7GxFFLqqbz1AJYYxSlrPCGu4N2og5YTExo4IcloNMQYFRkBGue0BKZ4w== -"@substrate/connect@0.8.8": - version "0.8.8" - resolved "https://registry.yarnpkg.com/@substrate/connect/-/connect-0.8.8.tgz#80879f2241e2bd4f24a9aa25d7997fd91a5e68e3" - integrity sha512-zwaxuNEVI9bGt0rT8PEJiXOyebLIo6QN1SyiAHRPBOl6g3Sy0KKdSN8Jmyn++oXhVRD8aIe75/V8ZkS81T+BPQ== +"@substrate/connect@0.8.11": + version "0.8.11" + resolved "https://registry.yarnpkg.com/@substrate/connect/-/connect-0.8.11.tgz#983ec69a05231636e217b573b8130a6b942af69f" + integrity sha512-ofLs1PAO9AtDdPbdyTYj217Pe+lBfTLltdHDs3ds8no0BseoLeAGxpz1mHfi7zB4IxI3YyAiLjH6U8cw4pj4Nw== dependencies: "@substrate/connect-extension-protocol" "^2.0.0" - "@substrate/connect-known-chains" "^1.1.1" - "@substrate/light-client-extension-helpers" "^0.0.4" - smoldot "2.0.22" + "@substrate/connect-known-chains" "^1.1.5" + "@substrate/light-client-extension-helpers" "^1.0.0" + smoldot "2.0.26" -"@substrate/light-client-extension-helpers@^0.0.4": - version "0.0.4" - resolved "https://registry.yarnpkg.com/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-0.0.4.tgz#a5958d5c1aac7df69f55bd90991aa935500f8124" - integrity sha512-vfKcigzL0SpiK+u9sX6dq2lQSDtuFLOxIJx2CKPouPEHIs8C+fpsufn52r19GQn+qDhU8POMPHOVoqLktj8UEA== +"@substrate/light-client-extension-helpers@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-1.0.0.tgz#7b60368c57e06e5cf798c6557422d12e6d81f1ff" + integrity sha512-TdKlni1mBBZptOaeVrKnusMg/UBpWUORNDv5fdCaJklP4RJiFOzBCrzC+CyVI5kQzsXBisZ+2pXm+rIjS38kHg== dependencies: - "@polkadot-api/client" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - "@polkadot-api/json-rpc-provider" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - "@polkadot-api/json-rpc-provider-proxy" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - "@polkadot-api/substrate-client" "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" + "@polkadot-api/json-rpc-provider" "^0.0.1" + "@polkadot-api/json-rpc-provider-proxy" "^0.1.0" + "@polkadot-api/observable-client" "^0.3.0" + "@polkadot-api/substrate-client" "^0.1.2" "@substrate/connect-extension-protocol" "^2.0.0" - "@substrate/connect-known-chains" "^1.1.1" + "@substrate/connect-known-chains" "^1.1.5" rxjs "^7.8.1" -"@substrate/ss58-registry@^1.44.0": +"@substrate/ss58-registry@^1.51.0": version "1.51.0" resolved "https://registry.yarnpkg.com/@substrate/ss58-registry/-/ss58-registry-1.51.0.tgz#39e0341eb4069c2d3e684b93f0d8cb0bec572383" integrity sha512-TWDurLiPxndFgKjVavCniytBIw+t4ViOi7TYp9h/D0NMmkEc9klFTo+827eyEJ0lELpqO207Ey7uGxUa+BS1jQ== -"@transmute/did-context@^0.6.1-unstable.25", "@transmute/did-context@^0.6.1-unstable.36": - version "0.6.1-unstable.37" - resolved "https://registry.yarnpkg.com/@transmute/did-context/-/did-context-0.6.1-unstable.37.tgz#12ad065e142bc688460090d0ce338948e513c262" - integrity sha512-p/QnG3QKS4218hjIDgdvJOFATCXsAnZKgy4egqRrJLlo3Y6OaDBg7cA73dixOwUPoEKob0K6rLIGcsCI/L1acw== - -"@transmute/did-key-common@^0.3.0-unstable.10": - version "0.3.0-unstable.10" - resolved "https://registry.yarnpkg.com/@transmute/did-key-common/-/did-key-common-0.3.0-unstable.10.tgz#a72df1c6bd0d2981130e5dc0d5486d7a7d2df33b" - integrity sha512-Iryh/HcGIvmTtWFTRaG/JEgbUsqI5OqKqkR2676yQWK4ajLMsyNattz5n0ZfFQk/4U7Ee6pJvvKRduFDAqqV0Q== - dependencies: - "@did-core/data-model" "^0.1.1-unstable.13" - "@did-core/did-ld-json" "^0.1.1-unstable.13" - "@transmute/did-context" "^0.6.1-unstable.36" - "@transmute/ld-key-pair" "^0.6.1-unstable.36" - "@transmute/security-context" "^0.6.1-unstable.36" - -"@transmute/did-key-ed25519@^0.3.0-unstable.10": - version "0.3.0-unstable.10" - resolved "https://registry.yarnpkg.com/@transmute/did-key-ed25519/-/did-key-ed25519-0.3.0-unstable.10.tgz#177f747b6f804af92d94373e2bbd43a58b91508e" - integrity sha512-9QdXl58DjwqBuOJBx6DtvaNW2bZLmVBxMSq2En4RAQcGIz1GGulyEQ1NB7PLIAgnam3LIFxiK6RiQGQTfJmmJg== - dependencies: - "@transmute/did-key-common" "^0.3.0-unstable.10" - "@transmute/ed25519-key-pair" "^0.6.1-unstable.37" - -"@transmute/ed25519-key-pair@^0.6.1-unstable.37": - version "0.6.1-unstable.37" - resolved "https://registry.yarnpkg.com/@transmute/ed25519-key-pair/-/ed25519-key-pair-0.6.1-unstable.37.tgz#115a3c9ca0495e9b9d1f6059c6241f5dfc16d073" - integrity sha512-l34yzE/QnQwmdk5xY9g2kD55e4XPp/jTZQzPu7I6J4Ar+bMaL/0RLL/pgvwyI7qUpsddxRf4WPZCCcZveqPcdA== - dependencies: - "@stablelib/ed25519" "^1.0.1" - "@transmute/ld-key-pair" "^0.6.1-unstable.37" - "@transmute/x25519-key-pair" "^0.6.1-unstable.37" - -"@transmute/ld-key-pair@^0.6.1-unstable.36", "@transmute/ld-key-pair@^0.6.1-unstable.37": - version "0.6.1-unstable.37" - resolved "https://registry.yarnpkg.com/@transmute/ld-key-pair/-/ld-key-pair-0.6.1-unstable.37.tgz#ffe8af071b4ea991a49c795724b93999f4e6c8af" - integrity sha512-DcTpEruAQBfOd2laZkg3uCQ+67Y7dw2hsvo42NAQ5tItCIx5AClP7zccri7T2JUcfDUFaE32z/BLTMEKYt3XZQ== - -"@transmute/security-context@^0.6.1-unstable.36": - version "0.6.1-unstable.37" - resolved "https://registry.yarnpkg.com/@transmute/security-context/-/security-context-0.6.1-unstable.37.tgz#532b9238efd80dbaaa3e7dd663107cd925afadcc" - integrity sha512-GtLmG65qlORrz/2S4I74DT+vA4+qXsFxrMr0cNOXjUqZBd/AW1PTrFnryLF9907BfoiD58HC9qb1WVGWjSlBYw== - -"@transmute/x25519-key-pair@^0.6.1-unstable.37": - version "0.6.1-unstable.37" - resolved "https://registry.yarnpkg.com/@transmute/x25519-key-pair/-/x25519-key-pair-0.6.1-unstable.37.tgz#d51fe84d2a8079781e1dfbc2c032e8c37c5c2d9a" - integrity sha512-j6zR9IoJmgVhUCVH8YVGpsgQf99SxPKZ00LGnUheBAQzgj2lULGBQ44G+GqBCdzfT0qweptTfp1RjqqHEpizeA== - dependencies: - "@stablelib/x25519" "^1.0.0" - "@transmute/ld-key-pair" "^0.6.1-unstable.37" - "@tsconfig/node10@^1.0.7": version "1.0.11" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" @@ -1026,17 +715,17 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -"@types/bn.js@^5.1.5": - version "5.1.6" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.6.tgz#9ba818eec0c85e4d3c679518428afdf611d03203" - integrity sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w== +"@types/bn.js@^5.1.6": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.2.0.tgz#4349b9710e98f9ab3cdc50f1c5e4dcbd8ef29c80" + integrity sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q== dependencies: "@types/node" "*" "@types/body-parser@*": - version "1.19.5" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" - integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== + version "1.19.6" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.6.tgz#1859bebb8fd7dac9918a45d54c1971ab8b5af474" + integrity sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g== dependencies: "@types/connect" "*" "@types/node" "*" @@ -1049,9 +738,9 @@ "@types/node" "*" "@types/cors@^2.8.14": - version "2.8.17" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" - integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== + version "2.8.19" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.19.tgz#d93ea2673fd8c9f697367f5eeefc2bbfa94f0342" + integrity sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg== dependencies: "@types/node" "*" @@ -1065,30 +754,10 @@ "@types/range-parser" "*" "@types/send" "*" -"@types/express-serve-static-core@^5.0.0": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz#41fec4ea20e9c7b22f024ab88a95c6bb288f51b8" - integrity sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@*": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.0.tgz#13a7d1f75295e90d19ed6e74cab3678488eaa96c" - integrity sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^5.0.0" - "@types/qs" "*" - "@types/serve-static" "*" - "@types/express@^4.17.17": - version "4.17.21" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" - integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== + version "4.17.23" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.23.tgz#35af3193c640bfd4d7fe77191cd0ed411a433bef" + integrity sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" @@ -1096,26 +765,33 @@ "@types/serve-static" "*" "@types/http-errors@*": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" - integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + version "2.0.5" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.5.tgz#5b749ab2b16ba113423feb1a64a95dcd30398472" + integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg== "@types/mime@^1": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== -"@types/node@*", "@types/node@^22.7.3": - version "22.13.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.10.tgz#df9ea358c5ed991266becc3109dc2dc9125d77e4" - integrity sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw== +"@types/node@*": + version "24.2.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.2.0.tgz#cde712f88c5190006d6b069232582ecd1f94a760" + integrity sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw== + dependencies: + undici-types "~7.10.0" + +"@types/node@^22.7.3": + version "22.17.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.17.0.tgz#e8c9090e957bd4d9860efb323eb92d297347eac7" + integrity sha512-bbAKTCqX5aNVryi7qXVMi+OkB3w/OyblodicMbvE38blyAz7GxXf6XYhklokijuPwwVg9sDLKRxt0ZHXQwZVfQ== dependencies: - undici-types "~6.20.0" + undici-types "~6.21.0" "@types/qs@*": - version "6.9.18" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.18.tgz#877292caa91f7c1b213032b34626505b746624c2" - integrity sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA== + version "6.14.0" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.14.0.tgz#d8b60cecf62f2db0fb68e5e006077b9178b85de5" + integrity sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ== "@types/range-parser@*": version "1.2.7" @@ -1123,30 +799,22 @@ integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/send@*": - version "0.17.4" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" - integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + version "0.17.5" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.5.tgz#d991d4f2b16f2b1ef497131f00a9114290791e74" + integrity sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w== dependencies: "@types/mime" "^1" "@types/node" "*" "@types/serve-static@*": - version "1.15.7" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" - integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== + version "1.15.8" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.8.tgz#8180c3fbe4a70e8f00b9f70b9ba7f08f35987877" + integrity sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg== dependencies: "@types/http-errors" "*" "@types/node" "*" "@types/send" "*" -"@types/swagger-ui-express@^4.1.3": - version "4.1.8" - resolved "https://registry.yarnpkg.com/@types/swagger-ui-express/-/swagger-ui-express-4.1.8.tgz#3c0e0bf2543c7efb500eaa081bfde6d92f88096c" - integrity sha512-AhZV8/EIreHFmBV5wAs0gzJUNq9JbbSXgJLQubCC0jtIo6prnI9MIRRxnU4MZX9RB9yXxF1V4R7jtLl/Wcj31g== - dependencies: - "@types/express" "*" - "@types/serve-static" "*" - "@types/uuid@^10.0.0": version "10.0.0" resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-10.0.0.tgz#e9c07fe50da0f53dc24970cca94d619ff03f6f6d" @@ -1164,6 +832,14 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" +accepts@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-2.0.0.tgz#bbcf4ba5075467f3f2131eab3cffc73c2f5d7895" + integrity sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng== + dependencies: + mime-types "^3.0.0" + negotiator "^1.0.0" + accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -1180,9 +856,9 @@ acorn-walk@^8.1.1: acorn "^8.11.0" acorn@^8.11.0, acorn@^8.4.1: - version "8.14.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" - integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== ansi-regex@^5.0.1: version "5.0.1" @@ -1206,19 +882,11 @@ ansi-styles@^6.1.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== -ansis@^3.9.0: +ansis@^3.17.0: version "3.17.0" resolved "https://registry.yarnpkg.com/ansis/-/ansis-3.17.0.tgz#fa8d9c2a93fe7d1177e0c17f9eeb562a58a832d7" integrity sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg== -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - app-root-path@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.1.0.tgz#5971a2fc12ba170369a7a1ef018c71e6e47c2e86" @@ -1241,16 +909,18 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base-x@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.1.tgz#817fb7b57143c501f649805cb247617ad016a885" - integrity sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw== - base-x@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/base-x/-/base-x-5.0.1.tgz#16bf35254be1df8aca15e36b7c1dda74b2aa6b03" @@ -1261,27 +931,10 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base64url-universal@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/base64url-universal/-/base64url-universal-1.1.0.tgz#94da6356c1d43ead55b1d91c045c0a5b09ec8181" - integrity sha512-WyftvZqye29YQ10ZnuiBeEj0lk8SN8xHU9hOznkLc85wS1cLTp6RpzlMrHxMPD9nH7S55gsBqMqgGyz93rqmkA== - dependencies: - base64url "^3.0.0" - -base64url@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" - integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== - -binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + version "5.2.2" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.2.tgz#82c09f9ebbb17107cd72cb7fd39bd1f9d0aaa566" + integrity sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw== body-parser@1.20.3, body-parser@^1.20.2: version "1.20.3" @@ -1301,28 +954,36 @@ body-parser@1.20.3, body-parser@^1.20.2: type-is "~1.6.18" unpipe "1.0.0" +body-parser@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.2.0.tgz#f7a9656de305249a715b549b7b8fd1ab9dfddcfa" + integrity sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg== + dependencies: + bytes "^3.1.2" + content-type "^1.0.5" + debug "^4.4.0" + http-errors "^2.0.0" + iconv-lite "^0.6.3" + on-finished "^2.4.1" + qs "^6.14.0" + raw-body "^3.0.0" + type-is "^2.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" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + version "1.1.12" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + version "2.0.2" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7" + integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ== dependencies: balanced-match "^1.0.0" -braces@~3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - bs58@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/bs58/-/bs58-6.0.0.tgz#a2cda0130558535dd281a2f8697df79caaf425d8" @@ -1330,11 +991,6 @@ bs58@^6.0.0: dependencies: base-x "^5.0.0" -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - buffer@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" @@ -1343,12 +999,12 @@ buffer@^6.0.3: base64-js "^1.3.1" ieee754 "^1.2.1" -bytes@3.1.2: +bytes@3.1.2, bytes@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== @@ -1356,7 +1012,17 @@ call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: es-errors "^1.3.0" function-bind "^1.1.2" -call-bound@^1.0.2: +call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== @@ -1390,21 +1056,6 @@ cbor-x@^1.5.8: optionalDependencies: cbor-extract "^2.2.0" -chokidar@^3.5.2: - version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - cliui@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" @@ -1414,14 +1065,10 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" +cluster-key-slot@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz#88ddaa46906e303b5de30d3153b7d9fe0a0c19ac" + integrity sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA== color-convert@^2.0.1: version "2.0.1" @@ -1447,7 +1094,14 @@ content-disposition@0.5.4: dependencies: safe-buffer "5.2.1" -content-type@~1.0.4, content-type@~1.0.5: +content-disposition@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-1.0.0.tgz#844426cb398f934caefcbb172200126bc7ceace2" + integrity sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg== + dependencies: + safe-buffer "5.2.1" + +content-type@^1.0.5, 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" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== @@ -1457,11 +1111,21 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== +cookie-signature@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.2.2.tgz#57c7fc3cc293acab9fec54d73e15690ebe4a1793" + integrity sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg== + cookie@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== +cookie@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== + cors@^2.8.5: version "2.8.5" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" @@ -1484,22 +1148,12 @@ cross-spawn@^7.0.6: shebang-command "^2.0.0" which "^2.0.1" -crypto-ld@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/crypto-ld/-/crypto-ld-6.0.0.tgz#cf8dcf566cb3020bdb27f0279e6cc9b46d031cd7" - integrity sha512-XWL1LslqggNoaCI/m3I7HcvaSt9b2tYzdrXO+jHLUj9G1BvRfvV7ZTFDVY5nifYuIGAPdAGu7unPxLRustw3VA== - -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" - integrity sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og== - data-uri-to-buffer@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== -dayjs@^1.11.9: +dayjs@^1.11.13: version "1.11.13" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== @@ -1511,14 +1165,28 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@^4, debug@^4.1.0, debug@^4.3.4: - version "4.4.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" - integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== +debug@^4.1.0, debug@^4.3.5, debug@^4.4.0: + version "4.4.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== dependencies: ms "^2.1.3" -depd@2.0.0: +dedent@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.6.0.tgz#79d52d6389b1ffa67d2bcef59ba51847a9d503b2" + integrity sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA== + +define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +depd@2.0.0, depd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== @@ -1529,19 +1197,30 @@ destroy@1.2.0: integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-libc@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" - integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8" + integrity sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA== diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -dotenv@^16.0.3: - version "16.4.7" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" - integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== +doken-precomputer@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/doken-precomputer/-/doken-precomputer-0.0.4.tgz#aedaddc2cc79588f8c51b4a84c55498a9d224404" + integrity sha512-NPkQvrBkaw8KS74xF38R33aT870IxMTZ7/g8nTUo/iuOMYMOD/Pa0chNl7BjJqUO+UXN+McUxlv/cpCQtuO/Xw== + dependencies: + "@cord.network/types" "0.9.6-4" + "@polkadot/api" "^15.9.1" + "@polkadot/types" "^15.9.1" + "@polkadot/util" "^13.4.3" + "@polkadot/util-crypto" "^13.4.3" + +dotenv@^16.4.7: + version "16.6.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020" + integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow== dunder-proto@^1.0.1: version "1.0.1" @@ -1557,16 +1236,6 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -ed25519-signature-2018-context@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ed25519-signature-2018-context/-/ed25519-signature-2018-context-1.1.0.tgz#68002ea7497c32e8170667cfd67468dedf7d220e" - integrity sha512-ppDWYMNwwp9bploq0fS4l048vHIq41nWsAbPq6H4mNVx9G/GxW3fwg4Ln0mqctP13MoEpREK7Biz8TbVVdYXqA== - -ed25519-signature-2020-context@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ed25519-signature-2020-context/-/ed25519-signature-2020-context-1.1.0.tgz#b2f724f07db154ddf0fd6605410d88736e56fd07" - integrity sha512-dBGSmoUIK6h2vadDctrDnhhTO01PR2hJk0mRNEfrRDPCjaIwrfy4J+eziEQ9Q1m8By4f/CSRgKM1h53ydKfdNg== - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -1582,17 +1251,17 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +encodeurl@^2.0.0, encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -encodeurl@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" - integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== - -es-define-property@^1.0.1: +es-define-property@^1.0.0, es-define-property@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== @@ -1614,32 +1283,16 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== -escape-html@~1.0.3: +escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -esm@^3.2.22: - version "3.2.25" - resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10" - integrity sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA== - -etag@~1.8.1: +etag@^1.8.1, etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -ethereum-cryptography@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-3.1.0.tgz#0fa6dbc3cdd2927c87b9c018ff42616c4eec3f64" - integrity sha512-ZqHd92eOIH9RExpBUOgzpAgflyFv9/+Ca39G8V+oCjJPGjJUihQcG/Gl67I/Xn2HGS87dgnrCG3kb1jNClLi6g== - dependencies: - "@noble/ciphers" "1.2.1" - "@noble/curves" "1.8.1" - "@noble/hashes" "1.7.1" - "@scure/bip32" "1.6.2" - "@scure/bip39" "1.5.4" - event-target-shim@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" @@ -1650,7 +1303,7 @@ eventemitter3@^5.0.1: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== -express@^4.18.2, express@^4.21.1: +express@^4.21.1: version "4.21.2" resolved "https://registry.yarnpkg.com/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32" integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== @@ -1687,23 +1340,38 @@ express@^4.18.2, express@^4.21.1: utils-merge "1.0.1" vary "~1.1.2" -factory.ts@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/factory.ts/-/factory.ts-0.5.2.tgz#1ab69b9ec75efc9d72977557794fe8e0cc7f846d" - integrity sha512-I4YDKuyMW+s2PocnWh/Ekv9wSStt/MNN1ZRb1qhy0Kv056ndlzbLHDsW9KEmTAqMpLI3BtjSqEdZ7ZfdnaXn9w== - dependencies: - clone-deep "^4.0.1" - source-map-support "^0.5.19" - -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" - integrity sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w== - -fetch-blob@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-2.1.2.tgz#a7805db1361bd44c1ef62bb57fb5fe8ea173ef3c" - integrity sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow== +express@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/express/-/express-5.1.0.tgz#d31beaf715a0016f0d53f47d3b4d7acf28c75cc9" + integrity sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA== + dependencies: + accepts "^2.0.0" + body-parser "^2.2.0" + content-disposition "^1.0.0" + content-type "^1.0.5" + cookie "^0.7.1" + cookie-signature "^1.2.1" + debug "^4.4.0" + encodeurl "^2.0.0" + escape-html "^1.0.3" + etag "^1.8.1" + finalhandler "^2.1.0" + fresh "^2.0.0" + http-errors "^2.0.0" + merge-descriptors "^2.0.0" + mime-types "^3.0.0" + on-finished "^2.4.1" + once "^1.4.0" + parseurl "^1.3.3" + proxy-addr "^2.0.7" + qs "^6.14.0" + range-parser "^1.2.1" + router "^2.2.0" + send "^1.1.0" + serve-static "^2.2.0" + statuses "^2.0.1" + type-is "^2.0.1" + vary "^1.1.2" fetch-blob@^3.1.2, fetch-blob@^3.1.4: version "3.2.0" @@ -1713,13 +1381,6 @@ fetch-blob@^3.1.2, fetch-blob@^3.1.4: node-domexception "^1.0.0" web-streams-polyfill "^3.0.3" -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - finalhandler@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" @@ -1733,6 +1394,25 @@ finalhandler@1.3.1: statuses "2.0.1" unpipe "~1.0.0" +finalhandler@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-2.1.0.tgz#72306373aa89d05a8242ed569ed86a1bff7c561f" + integrity sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q== + dependencies: + debug "^4.4.0" + encodeurl "^2.0.0" + escape-html "^1.0.3" + on-finished "^2.4.1" + parseurl "^1.3.3" + statuses "^2.0.1" + +for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" + foreground-child@^3.1.0: version "3.3.1" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" @@ -1758,16 +1438,16 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== +fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" + integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" @@ -1778,7 +1458,7 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -1802,13 +1482,6 @@ get-proto@^1.0.1: dunder-proto "^1.0.1" es-object-atoms "^1.0.0" -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - glob@^10.4.5: version "10.4.5" resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" @@ -1833,21 +1506,30 @@ glob@^7.0.5: once "^1.3.0" path-is-absolute "^1.0.0" -gopd@^1.2.0: +gopd@^1.0.1, gopd@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== +has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" -has-symbols@^1.1.0: +has-symbols@^1.0.3, has-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" @@ -1855,7 +1537,7 @@ hasown@^2.0.2: dependencies: function-bind "^1.1.2" -http-errors@2.0.0: +http-errors@2.0.0, http-errors@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== @@ -1873,16 +1555,18 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@0.6.3, iconv-lite@^0.6.3: + 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.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -1891,7 +1575,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1: +inherits@2, inherits@2.0.4, inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -1901,52 +1585,38 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -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" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== 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" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-promise@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" + integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== +is-typed-array@^1.1.14: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== dependencies: - isobject "^3.0.1" + which-typed-array "^1.1.16" + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - jackspeak@^3.1.2: version "3.4.3" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" @@ -1961,35 +1631,7 @@ json-stringify-safe@^5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -jsonld-checker@^0.1.6: - version "0.1.8" - resolved "https://registry.yarnpkg.com/jsonld-checker/-/jsonld-checker-0.1.8.tgz#2e229ab7559a14c670f5835b8e2617ecb7df1d1d" - integrity sha512-jclmnPRrm5SEpaIV6IiSTJxplRAqIWHduQLsUfrYpZM41Ng48m1RN2/aUyHze/ynfO0D2UhlJBt8SdObsH5GBw== - dependencies: - jsonld "^5.2.0" - node-fetch "^2.6.1" - -jsonld-signatures@^11.5.0: - version "11.5.0" - resolved "https://registry.yarnpkg.com/jsonld-signatures/-/jsonld-signatures-11.5.0.tgz#020ad488bd1977c5169de3d2a4cc28a76dec2663" - integrity sha512-Kdto+e8uvY/5u3HYkmAbpy52bplWX9uqS8fmqdCv6oxnCFwCTM0hMt6r4rWqlhw5/aHoCHJIRxwYb4QKGC69Jw== - dependencies: - "@digitalbazaar/security-context" "^1.0.0" - jsonld "^8.0.0" - rdf-canonize "^4.0.1" - serialize-error "^8.1.0" - -jsonld@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-5.2.0.tgz#d1e8af38a334cb95edf0f2ae4e2b58baf8d2b5a9" - integrity sha512-JymgT6Xzk5CHEmHuEyvoTNviEPxv6ihLWSPu1gFdtjSAyM6cFqNrv02yS/SIur3BBIkCf0HjizRc24d8/FfQKw== - dependencies: - "@digitalbazaar/http-client" "^1.1.0" - canonicalize "^1.0.1" - lru-cache "^6.0.0" - rdf-canonize "^3.0.0" - -jsonld@^8.0.0, jsonld@^8.3.2: +jsonld@^8.3.2: version "8.3.3" resolved "https://registry.yarnpkg.com/jsonld/-/jsonld-8.3.3.tgz#08cc927833c8684e42319d4697cc8199c0908ffc" integrity sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg== @@ -1999,11 +1641,6 @@ jsonld@^8.0.0, jsonld@^8.3.2: lru-cache "^6.0.0" rdf-canonize "^3.4.0" -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - ky-universal@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.11.0.tgz#f5edf857865aaaea416a1968222148ad7d9e4017" @@ -2012,29 +1649,11 @@ ky-universal@^0.11.0: abort-controller "^3.0.0" node-fetch "^3.2.10" -ky-universal@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.8.2.tgz#edc398d54cf495d7d6830aa1ab69559a3cc7f824" - integrity sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ== - dependencies: - abort-controller "^3.0.0" - node-fetch "3.0.0-beta.9" - -ky@^0.25.1: - version "0.25.1" - resolved "https://registry.yarnpkg.com/ky/-/ky-0.25.1.tgz#0df0bd872a9cc57e31acd5dbc1443547c881bfbc" - integrity sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA== - ky@^0.33.3: version "0.33.3" resolved "https://registry.yarnpkg.com/ky/-/ky-0.33.3.tgz#bf1ad322a3f2c3428c13cfa4b3af95e6c4a2f543" integrity sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw== -ky@^1.0.1: - version "1.7.5" - resolved "https://registry.yarnpkg.com/ky/-/ky-1.7.5.tgz#69c9b70ff818fd6108fc04a89c1454412c11dfce" - integrity sha512-HzhziW6sc5m0pwi5M196+7cEBtbt0lCYi67wNsiwMUmz833wloE0gbzJPWKs1gliFKQb34huItDQX97LyOdPdA== - lru-cache@^10.2.0: version "10.4.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" @@ -2062,11 +1681,21 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== +media-typer@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-1.1.0.tgz#6ab74b8f2d3320f2064b2a87a38e7931ff3a5561" + integrity sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw== + merge-descriptors@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== +merge-descriptors@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-2.0.0.tgz#ea922f660635a2249ee565e0449f951e6b603808" + integrity sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g== + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -2077,6 +1706,18 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== +mime-db@^1.54.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== + +mime-types@^3.0.0, mime-types@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.1.tgz#b1d94d6997a9b32fd69ebaed0db73de8acb519ce" + integrity sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA== + dependencies: + mime-db "^1.54.0" + 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" @@ -2089,7 +1730,7 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -2128,12 +1769,22 @@ ms@2.1.3, ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +multiformats@^9.0.0: + version "9.9.0" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" + integrity sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg== + negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -nock@^13.5.0: +negotiator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" + integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== + +nock@^13.5.5: version "13.5.6" resolved "https://registry.yarnpkg.com/nock/-/nock-13.5.6.tgz#5e693ec2300bbf603b61dae6df0225673e6c4997" integrity sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ== @@ -2147,21 +1798,6 @@ node-domexception@^1.0.0: resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== -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" - integrity sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg== - dependencies: - data-uri-to-buffer "^3.0.1" - fetch-blob "^2.1.1" - -node-fetch@^2.6.1: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - node-fetch@^3.2.10, node-fetch@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" @@ -2178,27 +1814,6 @@ node-gyp-build-optional-packages@5.1.1: dependencies: detect-libc "^2.0.1" -nodemon@^3.1.7: - version "3.1.9" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.9.tgz#df502cdc3b120e1c3c0c6e4152349019efa7387b" - integrity sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg== - dependencies: - chokidar "^3.5.2" - debug "^4" - ignore-by-default "^1.0.1" - minimatch "^3.1.2" - pstree.remy "^1.1.8" - semver "^7.5.3" - simple-update-notifier "^2.0.0" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.5" - -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" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - object-assign@^4: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -2209,14 +1824,14 @@ object-inspect@^1.13.3: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== -on-finished@2.4.1: +on-finished@2.4.1, on-finished@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" -once@^1.3.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" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== @@ -2228,7 +1843,7 @@ package-json-from-dist@^1.0.0: resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== -parseurl@~1.3.3: +parseurl@^1.3.3, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== @@ -2256,32 +1871,37 @@ path-to-regexp@0.1.12: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== -pg-cloudflare@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz#e6d5833015b170e23ae819e8c5d7eaedb472ca98" - integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q== +path-to-regexp@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.2.0.tgz#73990cc29e57a3ff2a0d914095156df5db79e8b4" + integrity sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ== + +pg-cloudflare@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.2.7.tgz#a1f3d226bab2c45ae75ea54d65ec05ac6cfafbef" + integrity sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg== -pg-connection-string@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.7.0.tgz#f1d3489e427c62ece022dba98d5262efcb168b37" - integrity sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA== +pg-connection-string@^2.9.1: + version "2.9.1" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.9.1.tgz#bb1fd0011e2eb76ac17360dc8fa183b2d3465238" + integrity sha512-nkc6NpDcvPVpZXxrreI/FOtX3XemeLl8E0qFr6F2Lrm/I8WOnaWNhIPK2Z7OHpw7gh5XJThi6j6ppgNoaT1w4w== pg-int8@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== -pg-pool@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.8.0.tgz#e6bce7fc4506a8d6106551363fc5283e5445b776" - integrity sha512-VBw3jiVm6ZOdLBTIcXLNdSotb6Iy3uOCwDGFAksZCXmi10nyRvnP2v3jl4d+IsLYRyXf6o9hIm/ZtUzlByNUdw== +pg-pool@^3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.10.1.tgz#481047c720be2d624792100cac1816f8850d31b2" + integrity sha512-Tu8jMlcX+9d8+QVzKIvM/uJtp07PKr82IUOYEphaWcoBhIYkoHpLXN3qO59nAI11ripznDsEzEv8nUxBVWajGg== -pg-protocol@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.8.0.tgz#c707101dd07813868035a44571488e4b98639d48" - integrity sha512-jvuYlEkL03NRvOoyoRktBK7+qU5kOvlAwvmrH8sr3wbLrOdVWsRxQfz8mMy9sZFsqJ1hEWNfdWKI4SAmoL+j7g== +pg-protocol@^1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.10.3.tgz#ac9e4778ad3f84d0c5670583bab976ea0a34f69f" + integrity sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ== -pg-types@^2.1.0: +pg-types@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== @@ -2292,30 +1912,30 @@ pg-types@^2.1.0: postgres-date "~1.0.4" postgres-interval "^1.1.0" -pg@^8.10.0: - version "8.14.0" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.14.0.tgz#5ef420ff6f89f2b96989f858d963291531e797f1" - integrity sha512-nXbVpyoaXVmdqlKEzToFf37qzyeeh7mbiXsnoWvstSqohj88yaa/I/Rq/HEVn2QPSZEuLIJa/jSpRDyzjEx4FQ== +pg@^8.16.0: + version "8.16.3" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.16.3.tgz#160741d0b44fdf64680e45374b06d632e86c99fd" + integrity sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw== dependencies: - pg-connection-string "^2.7.0" - pg-pool "^3.8.0" - pg-protocol "^1.8.0" - pg-types "^2.1.0" - pgpass "1.x" + pg-connection-string "^2.9.1" + pg-pool "^3.10.1" + pg-protocol "^1.10.3" + pg-types "2.2.0" + pgpass "1.0.5" optionalDependencies: - pg-cloudflare "^1.1.1" + pg-cloudflare "^1.2.7" -pgpass@1.x: +pgpass@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d" integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== dependencies: split2 "^4.1.0" -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== postgres-array@~2.0.0: version "2.0.0" @@ -2344,7 +1964,7 @@ propagate@^2.0.0: resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== -proxy-addr@~2.0.7: +proxy-addr@^2.0.7, proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== @@ -2352,11 +1972,6 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" -pstree.remy@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" - integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== - qs@6.13.0: version "6.13.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" @@ -2364,7 +1979,14 @@ qs@6.13.0: dependencies: side-channel "^1.0.6" -range-parser@~1.2.1: +qs@^6.14.0: + version "6.14.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" + integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== + dependencies: + side-channel "^1.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== @@ -2379,26 +2001,33 @@ raw-body@2.5.2: iconv-lite "0.4.24" unpipe "1.0.0" -rdf-canonize@^3.0.0, rdf-canonize@^3.4.0: +raw-body@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-3.0.0.tgz#25b3476f07a51600619dae3fe82ddc28a36e5e0f" + integrity sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.6.3" + unpipe "1.0.0" + +rdf-canonize@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-3.4.0.tgz#87f88342b173cc371d812a07de350f0c1aa9f058" integrity sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA== dependencies: setimmediate "^1.0.5" -rdf-canonize@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/rdf-canonize/-/rdf-canonize-4.0.1.tgz#2b5a37f147d35b484b40ff2140245fc5985a9595" - integrity sha512-B5ynHt4sasbUafzrvYI2GFARgeFcD8Sx9yXPbg7gEyT2EH76rlCv84kyO6tnxzVbxUN/uJDbK1S/MXh+DsnuTA== +redis@^5.5.6: + version "5.8.0" + resolved "https://registry.yarnpkg.com/redis/-/redis-5.8.0.tgz#90ffcc1348cb4e6a01846d940bea8c2286ff23f6" + integrity sha512-re0MHm1KHbiVIUPDGoUM3jldvjH5EM/wGZ3A33gyUYoC/UnVNKNnZHM5hcJVry7L2O2eJU3nflSXTliv10BTKg== dependencies: - setimmediate "^1.0.5" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" + "@redis/bloom" "5.8.0" + "@redis/client" "5.8.0" + "@redis/json" "5.8.0" + "@redis/search" "5.8.0" + "@redis/time-series" "5.8.0" reflect-metadata@^0.2.2: version "0.2.2" @@ -2410,6 +2039,17 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== +router@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/router/-/router-2.2.0.tgz#019be620b711c87641167cc79b99090f00b146ef" + integrity sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ== + dependencies: + debug "^4.4.0" + depd "^2.0.0" + is-promise "^4.0.0" + parseurl "^1.3.3" + path-to-regexp "^8.0.0" + rxjs@^7.8.1: version "7.8.2" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" @@ -2417,12 +2057,12 @@ rxjs@^7.8.1: dependencies: tslib "^2.1.0" -safe-buffer@5.2.1, safe-buffer@^5.0.1: +safe-buffer@5.2.1, safe-buffer@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -"safer-buffer@>= 2.1.2 < 3": +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -2432,11 +2072,6 @@ scale-ts@^1.6.0: resolved "https://registry.yarnpkg.com/scale-ts/-/scale-ts-1.6.1.tgz#45151e156d6c04792223c39d8e7484ce926445f2" integrity sha512-PBMc2AWc6wSEqJYBDPcyCLUj9/tMKnLX70jLOSndMtcUoLQucP/DM0vnQo1wJAYjTrQiq8iG9rD0q6wFzgjH7g== -semver@^7.5.3: - version "7.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" - integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== - send@0.19.0: version "0.19.0" resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" @@ -2456,12 +2091,22 @@ send@0.19.0: range-parser "~1.2.1" statuses "2.0.1" -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" - integrity sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ== - dependencies: - type-fest "^0.20.2" +send@^1.1.0, send@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/send/-/send-1.2.0.tgz#32a7554fb777b831dfa828370f773a3808d37212" + integrity sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw== + dependencies: + debug "^4.3.5" + encodeurl "^2.0.0" + escape-html "^1.0.3" + etag "^1.8.1" + fresh "^2.0.0" + http-errors "^2.0.0" + mime-types "^3.0.1" + ms "^2.1.3" + on-finished "^2.4.1" + range-parser "^1.2.1" + statuses "^2.0.1" serve-static@1.16.2: version "1.16.2" @@ -2473,6 +2118,28 @@ serve-static@1.16.2: parseurl "~1.3.3" send "0.19.0" +serve-static@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-2.2.0.tgz#9c02564ee259bdd2251b82d659a2e7e1938d66f9" + integrity sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ== + dependencies: + encodeurl "^2.0.0" + escape-html "^1.0.3" + parseurl "^1.3.3" + send "^1.2.0" + +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -2484,19 +2151,13 @@ setprototypeof@1.2.0: integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== sha.js@^2.4.11: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + version "2.4.12" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.12.tgz#eb8b568bf383dfd1867a32c3f2b74eb52bdbf23f" + integrity sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" + inherits "^2.0.4" + safe-buffer "^5.2.1" + to-buffer "^1.2.0" shebang-command@^2.0.0: version "2.0.0" @@ -2539,7 +2200,7 @@ side-channel-weakmap@^1.0.2: object-inspect "^1.13.3" side-channel-map "^1.0.1" -side-channel@^1.0.6: +side-channel@^1.0.6, side-channel@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== @@ -2555,33 +2216,13 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== -simple-update-notifier@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" - integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== - dependencies: - semver "^7.5.3" - -smoldot@2.0.22: - version "2.0.22" - resolved "https://registry.yarnpkg.com/smoldot/-/smoldot-2.0.22.tgz#1e924d2011a31c57416e79a2b97a460f462a31c7" - integrity sha512-B50vRgTY6v3baYH6uCgL15tfaag5tcS2o/P5q1OiXcKGv1axZDfz2dzzMuIkVpyMR2ug11F6EAtQlmYBQd292g== +smoldot@2.0.26: + version "2.0.26" + resolved "https://registry.yarnpkg.com/smoldot/-/smoldot-2.0.26.tgz#0e64c7fcd26240fbe4c8d6b6e4b9a9aca77e00f6" + integrity sha512-F+qYmH4z2s2FK+CxGj8moYcd1ekSIKH8ywkdqlOz88Dat35iB1DIYL11aILN46YSGMzQW/lbJNS307zBSDN5Ig== dependencies: ws "^8.8.1" -source-map-support@^0.5.19: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - split2@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" @@ -2593,15 +2234,20 @@ sprintf-js@~1.0.2: integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== sql-highlight@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/sql-highlight/-/sql-highlight-6.0.0.tgz#e62977ed5c7a1644634a1554b8588ee42611a4be" - integrity sha512-+fLpbAbWkQ+d0JEchJT/NrRRXbYRNbG15gFpANx73EwxQB1PRjj+k/OI0GTU0J63g8ikGkJECQp9z8XEJZvPRw== + version "6.1.0" + resolved "https://registry.yarnpkg.com/sql-highlight/-/sql-highlight-6.1.0.tgz#e34024b4c6eac2744648771edfe3c1f894153743" + integrity sha512-ed7OK4e9ywpE7pgRMkMQmZDPKSVdm0oX5IEtZiKnFucSF0zu6c80GZBe38UqHuVhTWJ9xsKgSMjCG2bml86KvA== statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +statuses@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== + "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -2650,49 +2296,20 @@ strip-ansi@^7.0.1: dependencies: ansi-regex "^6.0.1" -supports-color@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -swagger-ui-dist@>=5.0.0: - version "5.20.1" - resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-5.20.1.tgz#9aa6012cd537a9d3feac2d9e814d97bb36459824" - integrity sha512-qBPCis2w8nP4US7SvUxdJD3OwKcqiWeZmjN2VWhq2v+ESZEXOP/7n4DeiOiiZcGYTKMHAHUUrroHaTsjUWTEGw== - dependencies: - "@scarf/scarf" "=1.4.0" - -swagger-ui-express@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/swagger-ui-express/-/swagger-ui-express-5.0.1.tgz#fb8c1b781d2793a6bd2f8a205a3f4bd6fa020dd8" - integrity sha512-SrNU3RiBGTLLmFU8GIJdOdanJTl4TOmT27tt3bWWHppqYmAZ6IDuEuBvMU6nZq0zLEe6b/1rACXCgLZqO6ZfrA== - dependencies: - swagger-ui-dist ">=5.0.0" - -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" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== +to-buffer@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.2.1.tgz#2ce650cdb262e9112a18e65dc29dcb513c8155e0" + integrity sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ== dependencies: - is-number "^7.0.0" + isarray "^2.0.5" + safe-buffer "^5.2.1" + typed-array-buffer "^1.0.3" toidentifier@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -touch@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694" - integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - ts-node@^10.9.1: version "10.9.2" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" @@ -2712,7 +2329,7 @@ ts-node@^10.9.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tslib@^2.1.0, tslib@^2.5.0, tslib@^2.6.2, tslib@^2.7.0: +tslib@^2.1.0, tslib@^2.7.0, tslib@^2.8.0, tslib@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -2722,10 +2339,14 @@ tweetnacl@^1.0.3: resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-is@^2.0.0, type-is@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-2.0.1.tgz#64f6cf03f92fce4015c2b224793f6bdd4b068c97" + integrity sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw== + dependencies: + content-type "^1.0.5" + media-typer "^1.1.0" + mime-types "^3.0.0" type-is@~1.6.18: version "1.6.18" @@ -2735,52 +2356,57 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typeorm@^0.3.20: - version "0.3.21" - resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.21.tgz#8da9e0f079302a263eb05a4376239cef055886fd" - integrity sha512-lh4rUWl1liZGjyPTWpwcK8RNI5x4ekln+/JJOox1wCd7xbucYDOXWD+1cSzTN3L0wbTGxxOtloM5JlxbOxEufA== +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + +typeorm@^0.3.24: + version "0.3.25" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.25.tgz#9a416f93cda0f612b20f8450e03d6b0e11b467fb" + integrity sha512-fTKDFzWXKwAaBdEMU4k661seZewbNYET4r1J/z3Jwf+eAvlzMVpTLKAVcAzg75WwQk7GDmtsmkZ5MfkmXCiFWg== dependencies: "@sqltools/formatter" "^1.2.5" - ansis "^3.9.0" + ansis "^3.17.0" app-root-path "^3.1.0" buffer "^6.0.3" - dayjs "^1.11.9" - debug "^4.3.4" - dotenv "^16.0.3" + dayjs "^1.11.13" + debug "^4.4.0" + dedent "^1.6.0" + dotenv "^16.4.7" glob "^10.4.5" sha.js "^2.4.11" sql-highlight "^6.0.0" - tslib "^2.5.0" - uuid "^11.0.5" - yargs "^17.6.2" + tslib "^2.8.1" + uuid "^11.1.0" + yargs "^17.7.2" -typescript@^5.6.2: - version "5.8.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.2.tgz#8170b3702f74b79db2e5a96207c15e65807999e4" - integrity sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ== +typescript@^5.8.3: + version "5.9.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6" + integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A== -undefsafe@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" - integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== -undici-types@~6.20.0: - version "6.20.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" - integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== +undici-types@~7.10.0: + version "7.10.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.10.0.tgz#4ac2e058ce56b462b056e629cc6a02393d3ff350" + integrity sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag== undici@^5.21.2: - version "5.28.5" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.5.tgz#b2b94b6bf8f1d919bc5a6f31f2c01deb02e54d4b" - integrity sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA== + version "5.29.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.29.0.tgz#419595449ae3f2cdcba3580a2e8903399bd1f5a3" + integrity sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg== dependencies: "@fastify/busboy" "^2.0.0" -undici@^6.6.2: - version "6.21.2" - resolved "https://registry.yarnpkg.com/undici/-/undici-6.21.2.tgz#49c5884e8f9039c65a89ee9018ef3c8e2f1f4928" - integrity sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g== - unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -2791,12 +2417,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" - integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== - -uuid@^11.0.5: +uuid@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.0.tgz#9549028be1753bb934fc96e2bca09bb4105ae912" integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A== @@ -2811,7 +2432,7 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -vary@^1, vary@~1.1.2: +vary@^1, vary@^1.1.2, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== @@ -2821,18 +2442,18 @@ web-streams-polyfill@^3.0.3: resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== +which-typed-array@^1.1.16: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" which@^2.0.1: version "2.0.2" @@ -2873,10 +2494,10 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^8.15.1, ws@^8.8.1: - version "8.18.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb" - integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w== +ws@^8.18.0, ws@^8.8.1: + version "8.18.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472" + integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg== xtend@^4.0.0: version "4.0.2" @@ -2906,7 +2527,7 @@ yargs-parser@^21.1.1: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^17.6.2: +yargs@^17.7.2: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==