From 0afc72b77672add6c0d1fa420e36d397d10750d4 Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Tue, 9 May 2023 15:01:38 -0700 Subject: [PATCH 01/24] Initial Server setup and ReadMe Updates --- .DS_Store | Bin 0 -> 6148 bytes .env.example | 0 .eslintrc.json | 17 + .prettierrc | 7 + Dockerfile | 33 + README.md | 118 +- docker-compose.yml | 16 + package.json | 83 +- src/api/index.ts | 12 + src/api/v1/keys/create.ts | 68 + src/api/v1/keys/list.ts | 64 + src/api/v1/keys/revoke.ts | 84 + src/api/v1/keys/use.ts | 55 + src/constants/errors.ts | 59 + src/errorHandler.ts | 25 + src/executor.ts | 10 - src/fleet.ts | 103 - src/index.ts | 170 +- src/loadEnv.ts | 15 + src/middleware/apiKeyValidator.ts | 55 + src/openapi.ts | 34 + src/relay.ts | 76 - src/sharedApiSchemas.ts | 47 + src/types/fastify.d.ts | 45 + src/utilities/errorCodes.ts | 9 + tsconfig.json | 123 +- yarn.lock | 5408 +++++++++++++++++++++++------ 27 files changed, 5165 insertions(+), 1571 deletions(-) create mode 100644 .DS_Store delete mode 100644 .env.example create mode 100644 .eslintrc.json create mode 100644 .prettierrc create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 src/api/index.ts create mode 100644 src/api/v1/keys/create.ts create mode 100644 src/api/v1/keys/list.ts create mode 100644 src/api/v1/keys/revoke.ts create mode 100644 src/api/v1/keys/use.ts create mode 100644 src/constants/errors.ts create mode 100644 src/errorHandler.ts delete mode 100644 src/executor.ts delete mode 100644 src/fleet.ts create mode 100644 src/loadEnv.ts create mode 100644 src/middleware/apiKeyValidator.ts create mode 100644 src/openapi.ts delete mode 100644 src/relay.ts create mode 100644 src/sharedApiSchemas.ts create mode 100644 src/types/fastify.d.ts create mode 100644 src/utilities/errorCodes.ts diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 contract --> queue --> wallet -request --> wallet signature - -wallet -> signing -> process transaction - -request -> contract -> wallet signing -> queue -> process on the blockchain -vs -request -> contract -> queue -> wallet signing + process - -signing --- nonce dependent vs not - --------- - -nonce = idempotent -assign nonce on the transaction before the queue - -1 node, 1 wallet -N node, 1 wallet -N node, N wallets -N node, M wallets, N > M -N node, M wallets, N < M - -sharding: -- network + wallet - -signed nonce, processed nonce, committed nonce - ---------- - -wallet signing: -- signed with nonce -> process queue - -how to get nonce? -- wallet_nonce - -how to correct the nonce? -- ask the network -- look at the queue -- look at wallet_nonce - -does sending need to be throttled? -- not really, as much as the rpc can handle - -Request -> Relay -> Sign -> Execute - ---------- - -requirements -1. postgres: pg-boss - ----------- - -postgres, acid guaranteed -- wallet: pub_key, priv_key, owner_id, nonce_offset -- wallet_nonce: pub_key, chain_id, nonce -- transaction: id, pub_key, chain_id, transaction_hash -- relay_transaction: - -relay_transaction = keep track of the status -wallet = gotta keep transaction nonce offset - ----------- - -synchronize wallet nonce: -- load blockchain transaction count -- load database transaction count -- update wallet offset (how to sync blockchain <-> database) -- note: to account for potentially transaction stuck in the mempool, there'll need to be a grace period for out of sync. ---- if database > blockchain = NO correction needed because transaction may be stuck in a mempool. ---- if database < blockchain = YES, out of sync. will need to have a grace period based off last recorded transaction submit timestamp in the database. if the last recorded transaction was past threshold wait time, then it's out of sync. - -transaction rescues: -- going through our database and adding on-chain tx state status to the database record -- unverified / unconfirmed transaction will need to be retry at a higher nonce or something - -wallet: -- for multi-tenant: key by something +1. Install packages: `yarn` +2. Start local Docker containers: `yarn infra` +3. Start server for local development with hot reloading: `yarn dev` +## ToDo +- [X] Fastify Server Up & Running +- [X] Dockerize the Server +- [X] Add API-Key validation as middleware +- [ ] Make API-Key Validation work with ThirdWeb Access check +- [ ] Add wallet-id validation as middleware +- [ ] Add Read End-point +- [ ] Add Write End-point +- [ ] Add Deplyer End-point diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..72c496f92 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,16 @@ +version: '3.8' + +services: + web3-api: + build: + dockerfile: Dockerfile + context: . + target: local + ports: + - 3005:3005 + volumes: + - ./:/app + - node_modules:/app/node_modules + +volumes: + node_modules: \ No newline at end of file diff --git a/package.json b/package.json index 5be8fccca..99e0b6f1c 100644 --- a/package.json +++ b/package.json @@ -1,31 +1,70 @@ { - "name": "sdk-http-rest-api-js", + "name": "web3-api", "version": "1.0.0", - "main": "index.js", - "repository": "https://github.com/thirdweb-dev/sdk-http-rest-api-js.git", - "author": "thirdweb ", - "license": "MIT", + "description": "Thirdweb's web3-api server", + "main": "src/index.ts", + "author": "Danny Friday , Farhan Khwaja ", + "type": "module", "scripts": { - "start": "npx ts-node src/index.ts", - "dev": "npx nodemon src/index.ts" - }, - "devDependencies": { - "@types/node": "^18.11.9", - "install-peers": "^1.0.4", - "nodemon": "^2.0.20", - "prisma": "^4.11.0", - "ts-node": "^10.9.1", - "typescript": "^4.9.3" + "build": "yarn && rimraf dist && tsc -p ./tsconfig.json --outDir dist", + "start": "node --experimental-specifier-resolution=node dist/index.js", + "dev": "NODE_ENV=development nodemon --watch 'src/**/*.ts' --exec 'ts-node' --files src/index.ts", + "infra": "docker compose --env-file ./.env up", + "lint": "eslint 'src/**/*.ts'", + "lint:fix": "eslint --fix 'src/**/*.ts'", + "prepare": "husky install" }, "dependencies": { - "@aws-sdk/client-secrets-manager": "^3.281.0", - "@prisma/client": "^4.11.0", - "@thirdweb-dev/chains": "^0.1.6-nightly-20230303074206-0c883044", - "@thirdweb-dev/sdk": "^3.10.0-nightly-20230303074206-0c883044", - "@thirdweb-dev/wallets": "^0.2.6", + "@fastify/cookie": "^8.3.0", + "@fastify/cors": "^8.2.1", + "@fastify/express": "^2.3.0", + "@fastify/swagger": "^8.3.1", + "@fastify/type-provider-typebox": "^3.0.0", + "@sinclair/typebox": "^0.27.8", + "@thirdweb-dev/auth": "3.0.16-nightly-72b8b982-20230503002100", + "body-parser": "^1.20.2", + "busboy": "^1.6.0", + "cookie": "^0.5.0", + "cookie-parser": "^1.4.6", "dotenv": "^16.0.3", "ethers": "5", - "ethers-aws-kms-signer": "^1.3.2", - "fastify": "^4.13.0" + "express": "^4.18.2", + "fastify": "^4.15.0", + "fastify-plugin": "^4.5.0", + "http-status-codes": "^2.2.0", + "multiformats": "^11.0.2", + "pg": "^8.10.0", + "posthog-node": "^3.1.1", + "reflect-metadata": "^0.1.13", + "typeorm": "^0.3.15", + "uuid": "^9.0.0", + "yaml": "^2.2.1" + }, + "devDependencies": { + "@swc/core": "^1.3.41", + "@types/busboy": "^1.5.0", + "@types/cookie": "^0.5.1", + "@types/express": "^4.17.17", + "@types/node": "^18.15.4", + "@types/ws": "^8.5.4", + "@typescript-eslint/eslint-plugin": "^5.55.0", + "@typescript-eslint/parser": "^5.55.0", + "eslint": "^8.36.0", + "eslint-config-prettier": "^8.7.0", + "husky": "^8.0.3", + "nodemon": "^2.0.21", + "pino-pretty": "^10.0.0", + "prettier": "^2.8.7", + "rimraf": "^5.0.0", + "ts-node": "^10.9.1", + "typescript": "^5.0.4" + }, + "volta": { + "node": "18.15.0", + "yarn": "3.5.0" + }, + "lint-staged": { + "*.{js,ts}": "eslint --cache --fix", + "*.{js,ts,md}": "prettier --write" } } diff --git a/src/api/index.ts b/src/api/index.ts new file mode 100644 index 000000000..a7b020cab --- /dev/null +++ b/src/api/index.ts @@ -0,0 +1,12 @@ +import { FastifyInstance } from 'fastify'; +import { useApiKeyRoute } from './v1/keys/use'; +import { createApiKeyRoute } from './v1/keys/create'; +import { listApiKeysRoute } from './v1/keys/list'; +import { revokeApiKeyRoute } from './v1/keys/revoke'; + +export const apiRoutes = async (fastify: FastifyInstance) => { + await fastify.register(createApiKeyRoute); + await fastify.register(listApiKeysRoute); + await fastify.register(revokeApiKeyRoute); + await fastify.register(useApiKeyRoute); +}; diff --git a/src/api/v1/keys/create.ts b/src/api/v1/keys/create.ts new file mode 100644 index 000000000..4ed2793ce --- /dev/null +++ b/src/api/v1/keys/create.ts @@ -0,0 +1,68 @@ +import { FastifyInstance, RouteGenericInterface } from 'fastify'; +import { Static, Type } from '@sinclair/typebox'; +import { baseReplyErrorSchema } from '../../../sharedApiSchemas'; +import { StatusCodes } from 'http-status-codes'; +// import { ApiKeyService } from '../../../services/ApiKeyService'; +import { API_KEY_REPLY_ERRORS } from '../../../constants/errors'; +import { FastifySchema } from 'fastify/types/schema'; +// import { AnalyticsService } from '../../../services/AnalyticsService'; +import { GenericThirdwebRequestContext } from '../../../types/fastify'; +import { ThirdwebAuthUser } from '@thirdweb-dev/auth/dist/declarations/src/express/types'; + +const requestBodySchema = Type.Object({}); + +const replyBodySchema = Type.Object({ + key: Type.Optional(Type.String()), + error: baseReplyErrorSchema, +}); + +const fullRouteSchema: FastifySchema = { + body: requestBodySchema, + response: { + [StatusCodes.OK]: replyBodySchema, + }, +}; + +interface schemaTypes extends RouteGenericInterface { + Body: Static; + Reply: Static; +} + +export async function createApiKeyRoute(fastify: FastifyInstance) { + fastify.route({ + method: 'POST', + url: '/v1/keys', + schema: fullRouteSchema, + handler: async (request, reply) => { + const user = request.context.config.apiCallerIdentity + .thirdwebAuthUser as ThirdwebAuthUser; + // Don't allow users to create more than the max number of keys + // if ( + // await ApiKeyService.checkReachedApiKeyLimit({ + // creatorWalletAddress: user.address, + // }) + // ) { + // reply.status(API_KEY_REPLY_ERRORS.TOO_MANY_KEYS.statusCode).send({ + // error: API_KEY_REPLY_ERRORS.TOO_MANY_KEYS, + // }); + // return; + // } + + // Create the key + // const apiKeyInfo = await ApiKeyService.createApiKey({ + // creatorWalletAddress: user.address, + // }); + + // // Track event + // AnalyticsService.trackEvent({ + // apiCallerIdentity: request.context.config.apiCallerIdentity, + // eventName: 'api_keys.create', + // }); + + reply.status(StatusCodes.OK).send({ + key: 'apiKeyInfo.key', + error: null, + }); + }, + }); +} diff --git a/src/api/v1/keys/list.ts b/src/api/v1/keys/list.ts new file mode 100644 index 000000000..90fdb6058 --- /dev/null +++ b/src/api/v1/keys/list.ts @@ -0,0 +1,64 @@ +import { FastifyInstance, RouteGenericInterface } from 'fastify'; +import { Static, Type } from '@sinclair/typebox'; +import { baseReplyErrorSchema } from '../../../sharedApiSchemas'; +import { StatusCodes } from 'http-status-codes'; +// import { ApiKeyService } from '../../../services/ApiKeyService'; +import { FastifySchema } from 'fastify/types/schema'; +// import { AnalyticsService } from '../../../services/AnalyticsService'; +import { GenericThirdwebRequestContext } from '../../../types/fastify'; +import { ThirdwebAuthUser } from '@thirdweb-dev/auth/dist/declarations/src/express/types'; + +const replyBodySchema = Type.Object({ + keys: Type.Array( + Type.Object({ + key: Type.String(), + creatorWalletAddress: Type.String(), + revoked: Type.Boolean(), + }) + ), + error: baseReplyErrorSchema, +}); + +const fullRouteSchema: FastifySchema = { + response: { + [StatusCodes.OK]: replyBodySchema, + }, +}; + +interface schemaTypes extends RouteGenericInterface { + Reply: Static; +} + +export async function listApiKeysRoute(fastify: FastifyInstance) { + fastify.route({ + method: 'GET', + url: '/v1/keys', + schema: fullRouteSchema, + handler: async (request, reply) => { + const user = request.context.config.apiCallerIdentity + .thirdwebAuthUser as ThirdwebAuthUser; + + // const apiKeyInfo = await ApiKeyService.prisma.apiKeyInfo.findMany({ + // where: { + // creatorWalletAddress: user.address, + // }, + // }); + + // Track event + // AnalyticsService.trackEvent({ + // apiCallerIdentity: request.context.config.apiCallerIdentity, + // eventName: 'api_keys.list', + // }); + + reply.status(StatusCodes.OK).send({ + // keys: apiKeyInfo.map((keyInfo) => ({ + // key: keyInfo.key, + // creatorWalletAddress: keyInfo.creatorWalletAddress, + // revoked: keyInfo.revoked, + // })), + keys: [], + error: null, + }); + }, + }); +} diff --git a/src/api/v1/keys/revoke.ts b/src/api/v1/keys/revoke.ts new file mode 100644 index 000000000..6df57406f --- /dev/null +++ b/src/api/v1/keys/revoke.ts @@ -0,0 +1,84 @@ +import { FastifyInstance, RouteGenericInterface } from 'fastify'; +import { Static, Type } from '@sinclair/typebox'; +import { baseReplyErrorSchema } from '../../../sharedApiSchemas'; +import { StatusCodes } from 'http-status-codes'; +// import { ApiKeyService } from '../../../services/ApiKeyService'; +import { API_KEY_REPLY_ERRORS } from '../../../constants/errors'; +import { FastifySchema } from 'fastify/types/schema'; +// import { AnalyticsService } from '../../../services/AnalyticsService'; +import { GenericThirdwebRequestContext } from '../../../types/fastify'; +import { ThirdwebAuthUser } from '@thirdweb-dev/auth/dist/declarations/src/express/types'; + +const requestBodySchema = Type.Object({ + key: Type.String(), +}); + +const replyBodySchema = Type.Object({ + error: baseReplyErrorSchema, +}); + +const fullRouteSchema: FastifySchema = { + body: requestBodySchema, + response: { + [StatusCodes.OK]: replyBodySchema, + [API_KEY_REPLY_ERRORS.INVALID_API_KEY.statusCode]: replyBodySchema, + }, +}; + +interface schemaTypes extends RouteGenericInterface { + Body: Static; + Reply: Static; +} + +export async function revokeApiKeyRoute(fastify: FastifyInstance) { + fastify.route({ + method: 'POST', + url: '/v1/keys/revoke', + schema: fullRouteSchema, + handler: async (request, reply) => { + // console.log('routeConfig', request.context) + const user = request.context.config.apiCallerIdentity + .thirdwebAuthUser as ThirdwebAuthUser; + + // const apiKeyInfo = await ApiKeyService.prisma.apiKeyInfo.findFirst({ + // where: { + // key: request.body.key, + // revoked: false, + // }, + // }); + + // Make sure the API key exists + // if (!apiKeyInfo) { + // reply.status(API_KEY_REPLY_ERRORS.INVALID_API_KEY.statusCode).send({ + // error: API_KEY_REPLY_ERRORS.INVALID_API_KEY, + // }); + // return; + // } + + // Make sure the user owns the API key + // if (apiKeyInfo?.creatorWalletAddress !== user?.address) { + // reply + // .status(API_KEY_REPLY_ERRORS.UNAUTHORIZED_REVOCATION.statusCode) + // .send({ + // error: API_KEY_REPLY_ERRORS.UNAUTHORIZED_REVOCATION, + // }); + // return; + // } + + // // Revoke + // await ApiKeyService.revokeApiKey({ + // apiKey: request.body.key, + // }); + + // // Track event + // AnalyticsService.trackEvent({ + // apiCallerIdentity: request.context.config.apiCallerIdentity, + // eventName: 'api_keys.revoke', + // }); + + reply.status(StatusCodes.OK).send({ + error: null, + }); + }, + }); +} diff --git a/src/api/v1/keys/use.ts b/src/api/v1/keys/use.ts new file mode 100644 index 000000000..23ba7c454 --- /dev/null +++ b/src/api/v1/keys/use.ts @@ -0,0 +1,55 @@ +import { FastifyInstance, RouteGenericInterface } from 'fastify'; +import { Static, Type } from '@sinclair/typebox'; +import { + baseReplyErrorSchema, + developerRequestHeaderSchema, +} from '../../../sharedApiSchemas'; +import { StatusCodes } from 'http-status-codes'; +// import { AnalyticsService } from '../../../services/AnalyticsService'; +import { FastifySchema } from 'fastify/types/schema'; +import { GenericThirdwebRequestContext } from '../../../types/fastify'; + +const requestBodySchema = Type.Object({ + scope: Type.String(), +}); + +const replyBodySchema = Type.Object({ + authorized: Type.Optional(Type.Boolean()), + error: baseReplyErrorSchema, +}); + +const fullRouteSchema: FastifySchema = { + headers: developerRequestHeaderSchema, + body: requestBodySchema, + response: { + [StatusCodes.OK]: replyBodySchema, + }, +}; + +interface schemaTypes extends RouteGenericInterface { + Headers: Static; + Body: Static; + Reply: Static; +} + +export async function useApiKeyRoute(fastify: FastifyInstance) { + fastify.route({ + method: 'POST', + url: '/v1/keys/use', + schema: fullRouteSchema, + handler: async (request, reply) => { + // Track event + const apiCallerIdentity = request.context.config.apiCallerIdentity; + // AnalyticsService.trackEvent({ + // eventName: `api_keys.use.${request.body.scope}`, + // apiCallerIdentity, + // }); + + /* If the request made it this far, the API key is valid */ + reply.status(StatusCodes.OK).send({ + authorized: true, + error: null, + }); + }, + }); +} diff --git a/src/constants/errors.ts b/src/constants/errors.ts new file mode 100644 index 000000000..7a7d4f257 --- /dev/null +++ b/src/constants/errors.ts @@ -0,0 +1,59 @@ +import { Static } from '@sinclair/typebox'; +import { errorSchema } from '../sharedApiSchemas'; +import { StatusCodes } from 'http-status-codes'; + +/** + * API key reply errors + */ +export const API_KEY_REPLY_ERRORS: Record< + string, + Static +> = { + MISSING_API_KEY: { + code: 'MISSING_API_KEY', + message: + "The API key is missing. Make sure 'x-api-key' is included with your request header.", + statusCode: StatusCodes.BAD_REQUEST, + }, + + INVALID_API_KEY: { + code: 'INVALID_API_KEY', + message: + "The API key is invalid. Make sure you've entered the right one, or generate a new one.", + statusCode: StatusCodes.UNAUTHORIZED, + }, + + UNAUTHORIZED_REVOCATION: { + code: 'UNAUTHORIZED_REVOCATION', + message: + "You are not authorized to revoke this API key. Make sure you've entered the right one.", + statusCode: StatusCodes.UNAUTHORIZED, + }, + + REVOKED_API_KEY: { + code: 'REVOKED_API_KEY', + message: 'This API key has been revoked.', + statusCode: StatusCodes.UNAUTHORIZED, + }, + + TOO_MANY_KEYS: { + code: 'TOO_MANY_KEYS', + message: 'You have reached the maximum number of API keys.', + statusCode: StatusCodes.TOO_MANY_REQUESTS, + }, +}; + +/** + * Authorization header reply errors + */ +export const AUTHORIZATION_HEADER_REPLY_ERRORS: Record< + string, + Static +> = { + MISSING_BEARER_TOKEN: { + code: 'MISSING_BEARER_TOKEN', + message: + "The bearer token is missing. Please include it in the 'Authorization' header.", + statusCode: StatusCodes.BAD_REQUEST, + }, +}; diff --git a/src/errorHandler.ts b/src/errorHandler.ts new file mode 100644 index 000000000..87ff7745f --- /dev/null +++ b/src/errorHandler.ts @@ -0,0 +1,25 @@ +import { ReasonPhrases, StatusCodes } from 'http-status-codes'; +import { getCodeFromStatusCode } from './utilities/errorCodes'; +import { getEnv } from './loadEnv'; +import { FastifyInstance } from 'fastify'; + +export const errorHandler = async (server: FastifyInstance) => { + server.setErrorHandler((error, request, reply) => { + // Transform unexpected errors into a standard payload + const statusCode = error.statusCode ?? StatusCodes.INTERNAL_SERVER_ERROR; + const code = + error.code ?? + getCodeFromStatusCode(statusCode) ?? + StatusCodes.INTERNAL_SERVER_ERROR; + const message = error.message ?? ReasonPhrases.INTERNAL_SERVER_ERROR; + reply.status(statusCode).send({ + data: null, + error: { + code, + message, + statusCode, + stack: getEnv('NODE_ENV') !== 'production' ? error.stack : undefined, + }, + }); + }); +}; diff --git a/src/executor.ts b/src/executor.ts deleted file mode 100644 index f2177245d..000000000 --- a/src/executor.ts +++ /dev/null @@ -1,10 +0,0 @@ -class BlockchainExecutor { - constructor() {} - - async take() {} - - async process() {} - - // take it from queue - // send to rpc -} diff --git a/src/fleet.ts b/src/fleet.ts deleted file mode 100644 index 66d3d081f..000000000 --- a/src/fleet.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { ThirdwebSDK } from "@thirdweb-dev/sdk"; -import { allChains, BaseGoerli } from "@thirdweb-dev/chains"; -import { CallOverrides, ethers, Signer } from "ethers"; -import process from "process"; - -const db: Record = {}; - -type WalletData = { - address: string; - encryptedData: string; -}; - -interface IWalletStore { - getWalletData(): Promise; - storeWalletData(data: WalletData): Promise; -} - -class PGWalletStore implements IWalletStore { - private wallet_id: string; - - constructor(wallet_id: string) { - this.wallet_id = wallet_id; - } - - async getWalletData() { - return db[this.wallet_id]; - } - - async storeWalletData(data: WalletData) { - db[this.wallet_id] = data; - } -} - -export class Fleet { - // this is a widely used testing private keys wallets (default anvil / hardhat) - static PRIVATE_KEYS = [ - process.env.PRIVATE_KEY || - "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", - ]; - - constructor() {} - - async load() { - //new DeviceWalletImpl({ - //storage: new PGWalletStore("0"), - //}); - } - - static getSDK(network: string) { - /* - { - chainId: 80001, - rpc: ["http://localhost:8545"], - nativeCurrency: { - symbol: "MATIC", - name: "MATIC", - decimals: 18, - }, - }, - */ - return ThirdwebSDK.fromPrivateKey(Fleet.PRIVATE_KEYS[0], network, { - supportedChains: [BaseGoerli] as any, - }); - } - - static nonce = -1; - static async getWalletNonce(signer: Signer | undefined) { - if (!signer) { - return -1; - } - let nonce = -1; - if (Fleet.nonce < 0) { - nonce = await signer.getTransactionCount(); - } else { - nonce = Fleet.nonce; - } - Fleet.nonce = nonce + 1; - return nonce; - } - - static async sendTransaction( - network: string, - contractAddress: string, - method: string, - params: any[], - callOverrides: CallOverrides - ) { - const sdk = Fleet.getSDK(network); - - const contract = await sdk.getContract(contractAddress); - const nonce = await Fleet.getWalletNonce(sdk.getSigner()); - const tx = await contract.prepare(method, params, { - ...callOverrides, - nonce, - }); - const txSig = await tx.sign(); - const txHash = ethers.utils.keccak256(txSig); - - (sdk.getSigner()?.provider as any).send("eth_sendRawTransaction", [txSig]); - - return txHash; - } -} diff --git a/src/index.ts b/src/index.ts index 8a3f6da75..761f8b646 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,103 +1,99 @@ -import Fastify, { FastifyInstance } from "fastify"; -import { ethers } from "ethers"; -import { - ThirdwebSDK, - Abi, - getAllDetectedFeatureNames, - resolveContractUriFromAddress, -} from "@thirdweb-dev/sdk"; -import { Fleet } from "./fleet"; -import { relayTransaction } from "./relay"; +// import './fastify.d.ts' +import { getEnv } from './loadEnv'; +import fastify, { FastifyInstance } from 'fastify'; +import fastifyExpress from '@fastify/express'; +import { TypeBoxTypeProvider } from '@fastify/type-provider-typebox'; +import { openapi } from './openapi'; +import { errorHandler } from './errorHandler'; +import { ThirdwebAuth } from '@thirdweb-dev/auth/express'; +import { PrivateKeyWallet } from '@thirdweb-dev/auth/evm'; +import fastifyCors from '@fastify/cors'; +// import { checkApiAccess } from './auth/checkApiAccess'; +import { apiRoutes } from './api'; +import { GenericApiReply, GenericApiRequest } from './types/fastify'; +import cookie, { FastifyCookieOptions } from '@fastify/cookie'; +import { apiKeyValidator } from "./middleware/apiKeyValidator"; -const server: FastifyInstance = Fastify({ - logger: true, -}); - -const VoidPlugin = (fastify, opts, done) => { - done(); +const logSettings: any = { + // development: { + // transport: { + // target: 'pino-pretty', + // options: { + // translateTime: 'HH:MM:ss Z', + // ignore: 'pid,hostname', + // }, + // }, + // }, + // production: true, + // test: false, }; +const main = async () => { + const server: FastifyInstance = fastify({ + logger: logSettings[getEnv('NODE_ENV')] ?? false, + }).withTypeProvider(); -const RelayPlugin = (fastify, opts, done) => { - fastify.post("/transaction", async (request, reply) => { - const { network } = request.params; - const { compat } = request.query; - - let body = request.body; - const isCompatOZ = compat && compat === "oz"; - if (isCompatOZ) { - // LOL - body = JSON.parse(request.body); - } + await server.register(errorHandler); - const { request: requestPayload, signature, forwarderAddress } = body; + await server.register(fastifyCors, { + origin: function (origin, callback) { + if (!origin) { + return callback(null, false); + } - if (!signature || signature.length != 132) { - throw new Error("Invalid signature"); - } + // Check if the origin is localhost + // const isLocalhost = + // getEnv('NODE_ENV') !== 'production' && + // (origin.startsWith('http://localhost') || + // origin.startsWith('http://127.0.0.1')); - // note: fix ledger live where signature result in v = 0, 1. - const fixedSignature = ethers.utils.joinSignature( - ethers.utils.splitSignature(signature) - ); + // // Check if the origin is thirdweb.com + // const isThirdWeb = origin === 'https://thirdweb.com'; - const relayTransactionResult = await relayTransaction( - network, - requestPayload, - fixedSignature, - forwarderAddress - ); + // // Check if the origin is a subdomain of thirdweb-preview.com + // const isThirdWebPreview = /^https?:\/\/.*\.thirdweb-preview\.com$/.test( + // origin + // ); - if (isCompatOZ) { - // LOL cmon OZ. - return { - result: JSON.stringify({ - txHash: relayTransactionResult.transactionHash, - txResult: relayTransactionResult, - }), - }; - } else { - return { - result: relayTransactionResult, - }; - } + // // Allow requests if the origin matches any of the above conditions + // if (isLocalhost || isThirdWeb || isThirdWebPreview) { + // callback(null, true); + // } else { + // callback(null, false); + // } + callback(null, true); + }, + credentials: true, }); - done(); -}; + server.register(cookie, { + parseOptions: {}, // options for parsing cookies + } as FastifyCookieOptions); -const HealthPlugin = (fastify, opts, done) => { - fastify.get("/", opts, async (request, reply) => { - return { status: "ok" }; - }); - done(); -}; + await server.register(fastifyExpress); -server.register(VoidPlugin, { prefix: "/wallet" }); -server.register(VoidPlugin, { prefix: "/:network/wallet" }); -server.register(VoidPlugin, { prefix: "/:network/contract" }); -server.register(VoidPlugin, { prefix: "/:network/transaction" }); -server.register(RelayPlugin, { prefix: "/:network/relay" }); -server.register(VoidPlugin, { prefix: "/storage" }); -server.register(VoidPlugin, { prefix: "/auth" }); -server.register(HealthPlugin, { prefix: "/health" }); + const { authRouter, authMiddleware, getUser } = ThirdwebAuth({ + domain: process.env.THIRDWEB_AUTH_DOMAIN || 'localhost:3005', + wallet: new PrivateKeyWallet( + process.env.THIRDWEB_AUTH_PRIVATE_KEY || + 'dc91391b486c6ccdf0b705af8b3776360145e2c1ddbff9f524648cae12c1ae56' + ), + }); -server.setNotFoundHandler(async (request, reply) => { - return { message: "Not Found" }; -}); + await server.register(openapi); -server.ready(() => { - console.log(server.printRoutes({ commonPrefix: false })); -}); + await server.register(apiRoutes); + + await server.addHook('onRequest', async (req, res) => { + await apiKeyValidator(req, res); + }); -const start = async () => { - try { - const host = "0.0.0.0"; - const port = 3000; - server.log.info(`Listening on ${host}:${port}`); - await server.listen({ host, port }); - } catch (err) { - server.log.error(err); - process.exit(1); - } + await server.ready(); + await server.listen({ + host: getEnv('HOST'), + port: Number(getEnv('PORT')), + }, ()=>{ + console.log(`Server listening on ${getEnv('HOST')}:${getEnv('PORT')}`) + }); }; -start(); + +main(); diff --git a/src/loadEnv.ts b/src/loadEnv.ts new file mode 100644 index 000000000..c4b52132c --- /dev/null +++ b/src/loadEnv.ts @@ -0,0 +1,15 @@ +import * as dotenv from 'dotenv'; + +dotenv.config({ + debug: true, +}); + +function getEnv(key: string) { + const value = process.env[key]; + if (!value) { + throw new Error(`Missing environment variable: ${key}`); + } + return value; +} + +export { getEnv }; diff --git a/src/middleware/apiKeyValidator.ts b/src/middleware/apiKeyValidator.ts new file mode 100644 index 000000000..e7f0b9396 --- /dev/null +++ b/src/middleware/apiKeyValidator.ts @@ -0,0 +1,55 @@ +import { FastifyInstance, FastifyReply, FastifyRequest } from 'fastify'; +import axios, { AxiosResponse } from 'axios'; +import { getEnv } from '../loadEnv'; + +interface ValidationResponse { + data: { + authorized: boolean; + }; + error: { + message: string; + statusCode: number; + }; +} + +export const apiKeyValidator = async (request: FastifyRequest, reply: FastifyReply): Promise => { + const key = request.headers['x-api-key'] as string; + try { + const response: AxiosResponse = await axios.post( + `${getEnv('THIRDWEB_API_ORIGIN')}/v1/keys/use`, + { + body: JSON.stringify({ + scope: 'web3-api', // We will need to change the scope dynamically based on the request + }), + }, + { + headers: { + 'Content-Type': 'application/json', + 'x-api-key': key, + }, + validateStatus: function (status) { + return status < 500; // Resolve only if the status code is less than 500 + }, + } + ); + if (response.data.error) { + reply + .status(response.data.error.statusCode) + .send({ message: response.data.error.message }); + return false; + } + return true; + } catch (error: any) { + console.error(`Error while validating API key: ${error.message}`); + console.error( + 'The API verification server may be down. The client will be permitted to continue.' + ); + + reply + .status(error.statusCode) + .send({ message: error.message }); + return false; + } +}; + +export default apiKeyValidator; \ No newline at end of file diff --git a/src/openapi.ts b/src/openapi.ts new file mode 100644 index 000000000..20b27e4a7 --- /dev/null +++ b/src/openapi.ts @@ -0,0 +1,34 @@ +import fastifySwagger from '@fastify/swagger'; +import { getEnv } from './loadEnv'; +import { FastifyInstance } from 'fastify'; + +export const openapi = async (server: FastifyInstance) => { + server.register(fastifySwagger, { + openapi: { + info: { + title: 'thirdweb web3-API', + description: 'thirdweb web3-API', + version: '1.0.0', + }, + servers: [ + { + url: getEnv('OPENAPI_BASE_ORIGIN'), + }, + ], + components: { + securitySchemes: { + apiKey: { + type: 'apiKey', + name: 'x-api-key', + in: 'header', + }, + walletId: { + type: 'apiKey', + name: 'x-wallet-Id', + in: 'header', + }, + }, + }, + }, + }); +}; diff --git a/src/relay.ts b/src/relay.ts deleted file mode 100644 index 5a3e3f185..000000000 --- a/src/relay.ts +++ /dev/null @@ -1,76 +0,0 @@ -import Fastify, { FastifyInstance } from "fastify"; -import { ethers } from "ethers"; -import { - ThirdwebSDK, - Abi, - getAllDetectedFeatureNames, - resolveContractUriFromAddress, -} from "@thirdweb-dev/sdk"; -import { Fleet } from "./fleet"; - -export async function relayTransaction( - network, - payload, - signature, - forwarderAddress -) { - // TODO: validate payload schema - const contractAddress = payload.to; - if (!contractAddress) { - throw new Error("Invalid payload contract address"); - } - - // TODO validate contract address - const sdk = Fleet.getSDK(network); - - const contract = await sdk.getContract(contractAddress); - const features = getAllDetectedFeatureNames(contract.abi as Abi); - - if (features.includes("Gasless")) { - // meta transaction - const hasValidTrustedForwarder = contract.call( - "isTrustedForwarder", - forwarderAddress - ); - if (!hasValidTrustedForwarder) { - throw new Error("Invalid trusted forwarder"); - } - - const forwarder = await sdk.getContract(forwarderAddress); - const isSignatureValid = forwarder.call("verify", payload, signature); - if (!isSignatureValid) { - throw new Error("Signature is not verified"); - } - - const txHash = await Fleet.sendTransaction( - network, - forwarderAddress, - "execute", - [payload, signature], - { - gasLimit: parseInt(payload.gas) + 50000, - } - ); - - return { transactionHash: txHash }; - } else if (features.includes("ERC20Permit")) { - // token permit - const { owner, spender, value, deadline, v, r, s } = payload; - - // TODO: sign not execute - const callResult = await contract.call( - "permit", - owner, - spender, - value, - deadline, - v, - r, - s - ); - return callResult.receipt; - } else { - // unsupported - throw new Error("Unexpected relay type"); - } -} diff --git a/src/sharedApiSchemas.ts b/src/sharedApiSchemas.ts new file mode 100644 index 000000000..a93970520 --- /dev/null +++ b/src/sharedApiSchemas.ts @@ -0,0 +1,47 @@ +import { TSchema, Type } from '@sinclair/typebox'; + +/** + * Requests to this server follow a pretty basic format. + * + * Requests: + * - Have an `input` field that contains the actual input data. + * + * Responses: + * - Have data stored in the response body JSON. + * - Have an `error` field that contains application/unexpected errors, or null. + * + * Non-GET Handlers always expect the request body to be a JSON object. Per the HTTP spec, POST/PUT/PATCH requests should have a body, even if it's an empoty object. + * + * Similarly, responses always contain an `error` field. If there is no `error`, it is set to `null`. + */ + +export const errorSchema = Type.Object({ + message: Type.String(), + code: Type.String(), + stack: Type.Optional(Type.String()), + statusCode: Type.Number(), + data: Type.Optional(Type.Any()), +}); + +export const Nullable = (type: T) => + Type.Union([type, Type.Null()]); +/** + * Used to surface application errors to the client. The `code` field is set by the request handler. + */ +export const baseReplyErrorSchema = Nullable(errorSchema); + +/** + * Basic schema for all API request headers. + */ +export const developerRequestHeaderSchema = Type.Object({ + // Optional because the API key is not required for all routes. + 'x-api-key': Type.String(), +}); + +/** + * Basic schema for all Dashboard request headers. + */ +export const dashboardRequestHeaderSchema = Type.Object({ + // Optional because the API key is not required for all routes. + Authorization: Type.String(), +}); diff --git a/src/types/fastify.d.ts b/src/types/fastify.d.ts new file mode 100644 index 000000000..76dae9c3d --- /dev/null +++ b/src/types/fastify.d.ts @@ -0,0 +1,45 @@ +import { ApiKeyInfo, PrismaClient } from '@prisma/client'; +import { Json } from '@thirdweb-dev/auth/dist/declarations/src/core/schema'; +import { Request } from 'express'; +import { + ThirdwebAuthContext, + ThirdwebAuthUser, +} from '@thirdweb-dev/auth/dist/declarations/src/express/types'; +import { + FastifyReply, + FastifyRequest, + RawServerDefault, + RouteGenericInterface, +} from 'fastify'; +import { RawRequestDefaultExpression } from 'fastify/types/utils'; +import { FastifySchema } from 'fastify/types/schema'; +import { FastifyTypeProviderDefault } from 'fastify/types/type-provider'; + +declare module 'fastify' { + interface FastifyInstance { + + getUser( + req: Request, + ctx: ThirdwebAuthContext + ): Promise | null>; + } +} + +export interface ApiCallerIdentity { + identityType: 'thirdwebAuthJwt' | 'thirdwebApiKey' | null; + thirdwebAuthUser?: ThirdwebAuthUser; + apiKeyInfo?: ApiKeyInfo; +} +export interface GenericThirdwebRequestContext extends ThirdwebAuthContext { + apiCallerIdentity: ApiCallerIdentity; +} + +export type GenericApiRequest = FastifyRequest< + RouteGenericInterface, + RawServerDefault, + RawRequestDefaultExpression, + FastifySchema, + FastifyTypeProviderDefault, + GenericThirdwebRequestContext +>; +export type GenericApiReply = FastifyReply; diff --git a/src/utilities/errorCodes.ts b/src/utilities/errorCodes.ts new file mode 100644 index 000000000..07871c989 --- /dev/null +++ b/src/utilities/errorCodes.ts @@ -0,0 +1,9 @@ +import { StatusCodes } from 'http-status-codes'; + +const flipObject = (data: any) => + Object.fromEntries(Object.entries(data).map(([key, value]) => [value, key])); + +const StatusCodeToCode = flipObject(StatusCodes); + +export const getCodeFromStatusCode = (statusCode: number) => + StatusCodeToCode[statusCode]; diff --git a/tsconfig.json b/tsconfig.json index c7aeac084..a0cc1e910 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,103 +1,26 @@ { "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "commonjs", /* Specify what module code is generated. */ - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - // "outDir": "./", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - - /* Type Checking */ - "strict": true, /* Enable all strict type-checking options. */ - "noImplicitAny": false, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } + "target": "ES2022", + "module": "ES2022", + "moduleResolution": "node", + "outDir": "dist", + "strict": true, + "esModuleInterop": true, + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "baseUrl": ".", + "skipLibCheck": true, + "allowJs": true + }, + "ts-node": { + "esm": true, + "experimentalSpecifierResolution": "node" + }, + "include": [ + "src/**/*.ts", + "src/**/*.d.ts", + "src/**/*.js" + ], + "exclude": ["node_modules"], + "types": ["node"] } diff --git a/yarn.lock b/yarn.lock index ce9b69596..0dd8cc462 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,715 +2,73 @@ # yarn lockfile v1 -"@assemblyscript/loader@^0.9.4": - version "0.9.4" - resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.9.4.tgz#a483c54c1253656bb33babd464e3154a173e1577" - integrity sha512-HazVq9zwTVwGmqdwYzu7WyQ6FQVZ7SwET0KKQuKm55jD0IfUpZgN0OPIiZG3zV1iSrVYcN0bdwLRXI/VNCYsUA== - -"@aws-crypto/ie11-detection@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" - integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/sha256-browser@3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" - integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/sha256-js" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" - integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/supports-web-crypto@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" - integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/util@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" - integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-sdk/abort-controller@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/abort-controller/-/abort-controller-3.272.0.tgz#c2d244e9d422583a786dfb75485316cb1d4793ce" - integrity sha512-s2TV3phapcTwZNr4qLxbfuQuE9ZMP4RoJdkvRRCkKdm6jslsWLJf2Zlcxti/23hOlINUMYv2iXE2pftIgWGdpg== - dependencies: - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/client-secrets-manager@^3.281.0": - version "3.281.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.281.0.tgz#e7019e44b55b81f9807ddb4887203b07acf27a1b" - integrity sha512-vL+LygNDoCja/47pFwSnI3tCWfy5SGHlz6C1whcszmfl81gXyuHNlAK8RXVRiKhnD11zmCsHJhZyYSfTz5RErQ== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.281.0" - "@aws-sdk/config-resolver" "3.272.0" - "@aws-sdk/credential-provider-node" "3.281.0" - "@aws-sdk/fetch-http-handler" "3.272.0" - "@aws-sdk/hash-node" "3.272.0" - "@aws-sdk/invalid-dependency" "3.272.0" - "@aws-sdk/middleware-content-length" "3.272.0" - "@aws-sdk/middleware-endpoint" "3.272.0" - "@aws-sdk/middleware-host-header" "3.278.0" - "@aws-sdk/middleware-logger" "3.272.0" - "@aws-sdk/middleware-recursion-detection" "3.272.0" - "@aws-sdk/middleware-retry" "3.272.0" - "@aws-sdk/middleware-serde" "3.272.0" - "@aws-sdk/middleware-signing" "3.272.0" - "@aws-sdk/middleware-stack" "3.272.0" - "@aws-sdk/middleware-user-agent" "3.272.0" - "@aws-sdk/node-config-provider" "3.272.0" - "@aws-sdk/node-http-handler" "3.272.0" - "@aws-sdk/protocol-http" "3.272.0" - "@aws-sdk/smithy-client" "3.279.0" - "@aws-sdk/types" "3.272.0" - "@aws-sdk/url-parser" "3.272.0" - "@aws-sdk/util-base64" "3.208.0" - "@aws-sdk/util-body-length-browser" "3.188.0" - "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.279.0" - "@aws-sdk/util-defaults-mode-node" "3.279.0" - "@aws-sdk/util-endpoints" "3.272.0" - "@aws-sdk/util-retry" "3.272.0" - "@aws-sdk/util-user-agent-browser" "3.272.0" - "@aws-sdk/util-user-agent-node" "3.272.0" - "@aws-sdk/util-utf8" "3.254.0" - tslib "^2.3.1" - uuid "^8.3.2" - -"@aws-sdk/client-sso-oidc@3.281.0": - version "3.281.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.281.0.tgz#7071c287c8f0cd27522c3f33414d8a4c26ca4efb" - integrity sha512-P6zf9pDuxApVoCYStAg7L8BU9AcWI8PxfLSX4r2WnmcQropxzPJ3op1j9nvbwwBDMFWephijVY4AVp8MqPcPyg== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/config-resolver" "3.272.0" - "@aws-sdk/fetch-http-handler" "3.272.0" - "@aws-sdk/hash-node" "3.272.0" - "@aws-sdk/invalid-dependency" "3.272.0" - "@aws-sdk/middleware-content-length" "3.272.0" - "@aws-sdk/middleware-endpoint" "3.272.0" - "@aws-sdk/middleware-host-header" "3.278.0" - "@aws-sdk/middleware-logger" "3.272.0" - "@aws-sdk/middleware-recursion-detection" "3.272.0" - "@aws-sdk/middleware-retry" "3.272.0" - "@aws-sdk/middleware-serde" "3.272.0" - "@aws-sdk/middleware-stack" "3.272.0" - "@aws-sdk/middleware-user-agent" "3.272.0" - "@aws-sdk/node-config-provider" "3.272.0" - "@aws-sdk/node-http-handler" "3.272.0" - "@aws-sdk/protocol-http" "3.272.0" - "@aws-sdk/smithy-client" "3.279.0" - "@aws-sdk/types" "3.272.0" - "@aws-sdk/url-parser" "3.272.0" - "@aws-sdk/util-base64" "3.208.0" - "@aws-sdk/util-body-length-browser" "3.188.0" - "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.279.0" - "@aws-sdk/util-defaults-mode-node" "3.279.0" - "@aws-sdk/util-endpoints" "3.272.0" - "@aws-sdk/util-retry" "3.272.0" - "@aws-sdk/util-user-agent-browser" "3.272.0" - "@aws-sdk/util-user-agent-node" "3.272.0" - "@aws-sdk/util-utf8" "3.254.0" - tslib "^2.3.1" - -"@aws-sdk/client-sso@3.281.0": - version "3.281.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.281.0.tgz#0b08851f3da796a6c1a881f67f80fcacd6c2bb32" - integrity sha512-3RvO5zClQhu37w9VMLoHPGk58S3y8Spb7XX8rW51bm5TUglYQskQ0X2VLEUW/7ZGx/peokHws9Z9+w5yGq5sdA== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/config-resolver" "3.272.0" - "@aws-sdk/fetch-http-handler" "3.272.0" - "@aws-sdk/hash-node" "3.272.0" - "@aws-sdk/invalid-dependency" "3.272.0" - "@aws-sdk/middleware-content-length" "3.272.0" - "@aws-sdk/middleware-endpoint" "3.272.0" - "@aws-sdk/middleware-host-header" "3.278.0" - "@aws-sdk/middleware-logger" "3.272.0" - "@aws-sdk/middleware-recursion-detection" "3.272.0" - "@aws-sdk/middleware-retry" "3.272.0" - "@aws-sdk/middleware-serde" "3.272.0" - "@aws-sdk/middleware-stack" "3.272.0" - "@aws-sdk/middleware-user-agent" "3.272.0" - "@aws-sdk/node-config-provider" "3.272.0" - "@aws-sdk/node-http-handler" "3.272.0" - "@aws-sdk/protocol-http" "3.272.0" - "@aws-sdk/smithy-client" "3.279.0" - "@aws-sdk/types" "3.272.0" - "@aws-sdk/url-parser" "3.272.0" - "@aws-sdk/util-base64" "3.208.0" - "@aws-sdk/util-body-length-browser" "3.188.0" - "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.279.0" - "@aws-sdk/util-defaults-mode-node" "3.279.0" - "@aws-sdk/util-endpoints" "3.272.0" - "@aws-sdk/util-retry" "3.272.0" - "@aws-sdk/util-user-agent-browser" "3.272.0" - "@aws-sdk/util-user-agent-node" "3.272.0" - "@aws-sdk/util-utf8" "3.254.0" - tslib "^2.3.1" - -"@aws-sdk/client-sts@3.281.0": - version "3.281.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.281.0.tgz#e2fa99e236ba7f45600e505ad3db3ae45ceda8bd" - integrity sha512-w8QomyhCVEArRcXgOkjbofiS/PLEKWRAyYBovjMS1cGhns2ZYJXFgHNgr3VGE54TghUc5dR1CqKuBKKM4ThrgA== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/config-resolver" "3.272.0" - "@aws-sdk/credential-provider-node" "3.281.0" - "@aws-sdk/fetch-http-handler" "3.272.0" - "@aws-sdk/hash-node" "3.272.0" - "@aws-sdk/invalid-dependency" "3.272.0" - "@aws-sdk/middleware-content-length" "3.272.0" - "@aws-sdk/middleware-endpoint" "3.272.0" - "@aws-sdk/middleware-host-header" "3.278.0" - "@aws-sdk/middleware-logger" "3.272.0" - "@aws-sdk/middleware-recursion-detection" "3.272.0" - "@aws-sdk/middleware-retry" "3.272.0" - "@aws-sdk/middleware-sdk-sts" "3.272.0" - "@aws-sdk/middleware-serde" "3.272.0" - "@aws-sdk/middleware-signing" "3.272.0" - "@aws-sdk/middleware-stack" "3.272.0" - "@aws-sdk/middleware-user-agent" "3.272.0" - "@aws-sdk/node-config-provider" "3.272.0" - "@aws-sdk/node-http-handler" "3.272.0" - "@aws-sdk/protocol-http" "3.272.0" - "@aws-sdk/smithy-client" "3.279.0" - "@aws-sdk/types" "3.272.0" - "@aws-sdk/url-parser" "3.272.0" - "@aws-sdk/util-base64" "3.208.0" - "@aws-sdk/util-body-length-browser" "3.188.0" - "@aws-sdk/util-body-length-node" "3.208.0" - "@aws-sdk/util-defaults-mode-browser" "3.279.0" - "@aws-sdk/util-defaults-mode-node" "3.279.0" - "@aws-sdk/util-endpoints" "3.272.0" - "@aws-sdk/util-retry" "3.272.0" - "@aws-sdk/util-user-agent-browser" "3.272.0" - "@aws-sdk/util-user-agent-node" "3.272.0" - "@aws-sdk/util-utf8" "3.254.0" - fast-xml-parser "4.1.2" - tslib "^2.3.1" - -"@aws-sdk/config-resolver@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/config-resolver/-/config-resolver-3.272.0.tgz#207af3c70b05c4d93c60fa60201c93dff78802ba" - integrity sha512-Dr4CffRVNsOp3LRNdpvcH6XuSgXOSLblWliCy/5I86cNl567KVMxujVx6uPrdTXYs2h1rt3MNl6jQGnAiJeTbw== - dependencies: - "@aws-sdk/signature-v4" "3.272.0" - "@aws-sdk/types" "3.272.0" - "@aws-sdk/util-config-provider" "3.208.0" - "@aws-sdk/util-middleware" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/credential-provider-env@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.272.0.tgz#c647799806d2cf491b9b0d8d32682393caf74e20" - integrity sha512-QI65NbLnKLYHyTYhXaaUrq6eVsCCrMUb05WDA7+TJkWkjXesovpjc8vUKgFiLSxmgKmb2uOhHNcDyObKMrYQFw== - dependencies: - "@aws-sdk/property-provider" "3.272.0" - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/credential-provider-imds@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-imds/-/credential-provider-imds-3.272.0.tgz#8e740961c2e1f9b93a467e8d5e836e359e18592c" - integrity sha512-wwAfVY1jTFQEfxVfdYD5r5ieYGl+0g4nhekVxNMqE8E1JeRDd18OqiwAflzpgBIqxfqvCUkf+vl5JYyacMkNAQ== - dependencies: - "@aws-sdk/node-config-provider" "3.272.0" - "@aws-sdk/property-provider" "3.272.0" - "@aws-sdk/types" "3.272.0" - "@aws-sdk/url-parser" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/credential-provider-ini@3.281.0": - version "3.281.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.281.0.tgz#d19486fa9677ed2408d6b1ce933026b29e2f2bf9" - integrity sha512-H99nhMhHImQKgNhHKYc6usTS6UK8KzCcVGpILLVTuP97YlrYAMFAVstA3Xk6mZ28JAbHVXvI6vJjkMNOzCSKCA== - dependencies: - "@aws-sdk/credential-provider-env" "3.272.0" - "@aws-sdk/credential-provider-imds" "3.272.0" - "@aws-sdk/credential-provider-process" "3.272.0" - "@aws-sdk/credential-provider-sso" "3.281.0" - "@aws-sdk/credential-provider-web-identity" "3.272.0" - "@aws-sdk/property-provider" "3.272.0" - "@aws-sdk/shared-ini-file-loader" "3.272.0" - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/credential-provider-node@3.281.0": - version "3.281.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.281.0.tgz#b449cec4a2ba7e107e214a15ea5ea08866343b1d" - integrity sha512-jhddd+lJp8G8hBJ+6glmXjfWJT3nxiE1aliH3fBC4RR3D+1kRXc99Xg6mbUb8bm+GrVZ4gzfiqSgg+ByKjd7xA== - dependencies: - "@aws-sdk/credential-provider-env" "3.272.0" - "@aws-sdk/credential-provider-imds" "3.272.0" - "@aws-sdk/credential-provider-ini" "3.281.0" - "@aws-sdk/credential-provider-process" "3.272.0" - "@aws-sdk/credential-provider-sso" "3.281.0" - "@aws-sdk/credential-provider-web-identity" "3.272.0" - "@aws-sdk/property-provider" "3.272.0" - "@aws-sdk/shared-ini-file-loader" "3.272.0" - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/credential-provider-process@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.272.0.tgz#bd0c859554e705c085f0e2ad5dad7e1e43c967ad" - integrity sha512-hiCAjWWm2PeBFp5cjkxqyam/XADjiS+e7GzwC34TbZn3LisS0uoweLojj9tD11NnnUhyhbLteUvu5+rotOLwrg== - dependencies: - "@aws-sdk/property-provider" "3.272.0" - "@aws-sdk/shared-ini-file-loader" "3.272.0" - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/credential-provider-sso@3.281.0": - version "3.281.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.281.0.tgz#3cda9f7aecbe2ea5dc6978987104637b0451fff4" - integrity sha512-IqJnpXuLpJYoSCf/Rt66/CPVTjfkam3z9+ZvlQJV+VbK+vGj276qEtTmSN3XPZZgF1XbWptvkzIWDszLhHiZmg== - dependencies: - "@aws-sdk/client-sso" "3.281.0" - "@aws-sdk/property-provider" "3.272.0" - "@aws-sdk/shared-ini-file-loader" "3.272.0" - "@aws-sdk/token-providers" "3.281.0" - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/credential-provider-web-identity@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.272.0.tgz#2a1d8f73654c2d50bf27c6355a550bc389d6057e" - integrity sha512-ImrHMkcgneGa/HadHAQXPwOrX26sAKuB8qlMxZF/ZCM2B55u8deY+ZVkVuraeKb7YsahMGehPFOfRAF6mvFI5Q== - dependencies: - "@aws-sdk/property-provider" "3.272.0" - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/fetch-http-handler@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/fetch-http-handler/-/fetch-http-handler-3.272.0.tgz#52ec2ba4ea25738a91db466a617bd7cc2bd6d2e9" - integrity sha512-1Qhm9e0RbS1Xf4CZqUbQyUMkDLd7GrsRXWIvm9b86/vgeV8/WnjO3CMue9D51nYgcyQORhYXv6uVjAYCWbUExA== - dependencies: - "@aws-sdk/protocol-http" "3.272.0" - "@aws-sdk/querystring-builder" "3.272.0" - "@aws-sdk/types" "3.272.0" - "@aws-sdk/util-base64" "3.208.0" - tslib "^2.3.1" - -"@aws-sdk/hash-node@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/hash-node/-/hash-node-3.272.0.tgz#a39d80fd118ad306f17191f0565ea4db88aa0563" - integrity sha512-40dwND+iAm3VtPHPZu7/+CIdVJFk2s0cWZt1lOiMPMSXycSYJ45wMk7Lly3uoqRx0uWfFK5iT2OCv+fJi5jTng== - dependencies: - "@aws-sdk/types" "3.272.0" - "@aws-sdk/util-buffer-from" "3.208.0" - "@aws-sdk/util-utf8" "3.254.0" - tslib "^2.3.1" - -"@aws-sdk/invalid-dependency@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/invalid-dependency/-/invalid-dependency-3.272.0.tgz#93b34dc0f78d0c44a4beae6dc75dde4801915f1c" - integrity sha512-ysW6wbjl1Y78txHUQ/Tldj2Rg1BI7rpMO9B9xAF6yAX3mQ7t6SUPQG/ewOGvH2208NBIl3qP5e/hDf0Q6r/1iw== - dependencies: - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/is-array-buffer@3.201.0": - version "3.201.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/is-array-buffer/-/is-array-buffer-3.201.0.tgz#06e557adc284fac2f26071c2944ae01f61b95854" - integrity sha512-UPez5qLh3dNgt0DYnPD/q0mVJY84rA17QE26hVNOW3fAji8W2wrwrxdacWOxyXvlxWsVRcKmr+lay1MDqpAMfg== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/middleware-content-length@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-content-length/-/middleware-content-length-3.272.0.tgz#400532904c505d3478ddf5c8fe1d703692ea87e8" - integrity sha512-sAbDZSTNmLX+UTGwlUHJBWy0QGQkiClpHwVFXACon+aG0ySLNeRKEVYs6NCPYldw4cj6hveLUn50cX44ukHErw== - dependencies: - "@aws-sdk/protocol-http" "3.272.0" - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/middleware-endpoint@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-endpoint/-/middleware-endpoint-3.272.0.tgz#3d10dff07eeb6239b39b2e2762b11d97f19e4a56" - integrity sha512-Dk3JVjj7SxxoUKv3xGiOeBksvPtFhTDrVW75XJ98Ymv8gJH5L1sq4hIeJAHRKogGiRFq2J73mnZSlM9FVXEylg== - dependencies: - "@aws-sdk/middleware-serde" "3.272.0" - "@aws-sdk/protocol-http" "3.272.0" - "@aws-sdk/signature-v4" "3.272.0" - "@aws-sdk/types" "3.272.0" - "@aws-sdk/url-parser" "3.272.0" - "@aws-sdk/util-config-provider" "3.208.0" - "@aws-sdk/util-middleware" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/middleware-host-header@3.278.0": - version "3.278.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.278.0.tgz#d941a952d3f26453a4fff5939951e4bf99d7ce65" - integrity sha512-oTkF3exy89KE8NgSeXFwD+0H0GRKL2qUw92t3caEj7+4KzU/0m3t7NtKlq2NLRtTJhZ/izYRpV536oogLzGm3g== - dependencies: - "@aws-sdk/protocol-http" "3.272.0" - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/middleware-logger@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.272.0.tgz#372e2514b17b826a2b40562667e2543125980705" - integrity sha512-u2SQ0hWrFwxbxxYMG5uMEgf01pQY5jauK/LYWgGIvuCmFgiyRQQP3oN7kkmsxnS9MWmNmhbyQguX2NY02s5e9w== - dependencies: - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/middleware-recursion-detection@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.272.0.tgz#1e6ddc66a11fa2bfd2a59607d2ac5603be6d1072" - integrity sha512-Gp/eKWeUWVNiiBdmUM2qLkBv+VLSJKoWAO+aKmyxxwjjmWhE0FrfA1NQ1a3g+NGMhRbAfQdaYswRAKsul70ISg== - dependencies: - "@aws-sdk/protocol-http" "3.272.0" - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/middleware-retry@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-retry/-/middleware-retry-3.272.0.tgz#a38adcb9eb478246de3f3398bb8fd0a7682462eb" - integrity sha512-pCGvHM7C76VbO/dFerH+Vwf7tGv7j+e+eGrvhQ35mRghCtfIou/WMfTZlD1TNee93crrAQQVZKjtW3dMB3WCzg== - dependencies: - "@aws-sdk/protocol-http" "3.272.0" - "@aws-sdk/service-error-classification" "3.272.0" - "@aws-sdk/types" "3.272.0" - "@aws-sdk/util-middleware" "3.272.0" - "@aws-sdk/util-retry" "3.272.0" - tslib "^2.3.1" - uuid "^8.3.2" - -"@aws-sdk/middleware-sdk-sts@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.272.0.tgz#aa437331f958e3af3b4bec7951256d0f34a8d431" - integrity sha512-VvYPg7LrDIjUOWueSzo2wBzcNG7dw+cmzV6zAKaLxf0RC5jeAP4hE0OzDiiZfDrjNghEzgq/V+0NO+LewqYL9Q== - dependencies: - "@aws-sdk/middleware-signing" "3.272.0" - "@aws-sdk/property-provider" "3.272.0" - "@aws-sdk/protocol-http" "3.272.0" - "@aws-sdk/signature-v4" "3.272.0" - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/middleware-serde@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-serde/-/middleware-serde-3.272.0.tgz#9cb23aaa93fbf404fdb8e01b514b36b2d6fb5bc8" - integrity sha512-kW1uOxgPSwtXPB5rm3QLdWomu42lkYpQL94tM1BjyFOWmBLO2lQhk5a7Dw6HkTozT9a+vxtscLChRa6KZe61Hw== - dependencies: - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/middleware-signing@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-signing/-/middleware-signing-3.272.0.tgz#ce632b547d5a091b4bda9d65cb4745445ab5d237" - integrity sha512-4LChFK4VAR91X+dupqM8fQqYhFGE0G4Bf9rQlVTgGSbi2KUOmpqXzH0/WKE228nKuEhmH8+Qd2VPSAE2JcyAUA== - dependencies: - "@aws-sdk/property-provider" "3.272.0" - "@aws-sdk/protocol-http" "3.272.0" - "@aws-sdk/signature-v4" "3.272.0" - "@aws-sdk/types" "3.272.0" - "@aws-sdk/util-middleware" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/middleware-stack@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-stack/-/middleware-stack-3.272.0.tgz#e62048e47b8ce2ff71d6d32234b6c0be70b0b008" - integrity sha512-jhwhknnPBGhfXAGV5GXUWfEhDFoP/DN8MPCO2yC5OAxyp6oVJ8lTPLkZYMTW5VL0c0eG44dXpF4Ib01V+PlDrQ== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/middleware-user-agent@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.272.0.tgz#ea49970c9dbbe4e8fce21763e2ff0d7acab057c2" - integrity sha512-Qy7/0fsDJxY5l0bEk7WKDfqb4Os/sCAgFR2zEvrhDtbkhYPf72ysvg/nRUTncmCbo8tOok4SJii2myk8KMfjjw== - dependencies: - "@aws-sdk/protocol-http" "3.272.0" - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/node-config-provider@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/node-config-provider/-/node-config-provider-3.272.0.tgz#7797a8f500593b1a7b91fc70bcd7a7245afd9a61" - integrity sha512-YYCIBh9g1EQo7hm2l22HX5Yr9RoPQ2RCvhzKvF1n1e8t1QH4iObQrYUtqHG4khcm64Cft8C5MwZmgzHbya5Z6Q== - dependencies: - "@aws-sdk/property-provider" "3.272.0" - "@aws-sdk/shared-ini-file-loader" "3.272.0" - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/node-http-handler@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/node-http-handler/-/node-http-handler-3.272.0.tgz#732c7010310da292d4a6c30f915078e1792d029e" - integrity sha512-VrW9PjhhngeyYp4yGYPe5S0vgZH6NwU3Po9xAgayUeE37Inr7LS1YteFMHdpgsUUeNXnh7d06CXqHo1XjtqOKA== - dependencies: - "@aws-sdk/abort-controller" "3.272.0" - "@aws-sdk/protocol-http" "3.272.0" - "@aws-sdk/querystring-builder" "3.272.0" - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/property-provider@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/property-provider/-/property-provider-3.272.0.tgz#a626604303acfe83c1a1471f99872dee5641c1a4" - integrity sha512-V1pZTaH5eqpAt8O8CzbItHhOtzIfFuWymvwZFkAtwKuaHpnl7jjrTouV482zoq8AD/fF+VVSshwBKYA7bhidIw== - dependencies: - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/protocol-http@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/protocol-http/-/protocol-http-3.272.0.tgz#11090fed5d1e20f9f8e97b479e1d6fb2247686f6" - integrity sha512-4JQ54v5Yn08jspNDeHo45CaSn1CvTJqS1Ywgr79eU6jBExtguOWv6LNtwVSBD9X37v88iqaxt8iu1Z3pZZAJeg== - dependencies: - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/querystring-builder@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-builder/-/querystring-builder-3.272.0.tgz#788ca037e21942bb039c920c5dfa4d412b84ea27" - integrity sha512-ndo++7GkdCj5tBXE6rGcITpSpZS4PfyV38wntGYAlj9liL1omk3bLZRY6uzqqkJpVHqbg2fD7O2qHNItzZgqhw== - dependencies: - "@aws-sdk/types" "3.272.0" - "@aws-sdk/util-uri-escape" "3.201.0" - tslib "^2.3.1" - -"@aws-sdk/querystring-parser@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/querystring-parser/-/querystring-parser-3.272.0.tgz#68db5798d10a353c35f62bf34cfcebaa53580e51" - integrity sha512-5oS4/9n6N1LZW9tI3qq/0GnCuWoOXRgcHVB+AJLRBvDbEe+GI+C/xK1tKLsfpDNgsQJHc4IPQoIt4megyZ/1+A== - dependencies: - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/service-error-classification@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/service-error-classification/-/service-error-classification-3.272.0.tgz#cf19b82c2ab1e63bb03793c68e6a2b2e7cbd8382" - integrity sha512-REoltM1LK9byyIufLqx9znhSolPcHQgVHIA2S0zu5sdt5qER4OubkLAXuo4MBbisUTmh8VOOvIyUb5ijZCXq1w== - -"@aws-sdk/shared-ini-file-loader@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/shared-ini-file-loader/-/shared-ini-file-loader-3.272.0.tgz#f924ec6e7c183ec749d42e204d8f0d0b7c58fa25" - integrity sha512-lzFPohp5sy2XvwFjZIzLVCRpC0i5cwBiaXmFzXYQZJm6FSCszHO4ax+m9yrtlyVFF/2YPWl+/bzNthy4aJtseA== - dependencies: - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/signature-v4@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4/-/signature-v4-3.272.0.tgz#751895d68c1d1122f1e9a0148146dbdf9db023ae" - integrity sha512-pWxnHG1NqJWMwlhJ6NHNiUikOL00DHROmxah6krJPMPq4I3am2KY2Rs/8ouWhnEXKaHAv4EQhSALJ+7Mq5S4/A== - dependencies: - "@aws-sdk/is-array-buffer" "3.201.0" - "@aws-sdk/types" "3.272.0" - "@aws-sdk/util-hex-encoding" "3.201.0" - "@aws-sdk/util-middleware" "3.272.0" - "@aws-sdk/util-uri-escape" "3.201.0" - "@aws-sdk/util-utf8" "3.254.0" - tslib "^2.3.1" - -"@aws-sdk/smithy-client@3.279.0": - version "3.279.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/smithy-client/-/smithy-client-3.279.0.tgz#a3d90b7fb8e335cb8da46b70133c3db0d4ada8c5" - integrity sha512-ZcYWUQDGAYN6NXRpJuSn46PetrpPCA6TrDVwP9+3pERzTXZ66npXoG2XhHjNrOXy/Ted5A3OxKrM4/zLu9tK3A== - dependencies: - "@aws-sdk/middleware-stack" "3.272.0" - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/token-providers@3.281.0": - version "3.281.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.281.0.tgz#3df408c0890851d175e9ad826951bd4d30c27150" - integrity sha512-36Vg/F6Edm7qdjcTeNVON+sK2edgHhmhTtAEjWcuUk5AX/Et+Ate/A2N8HD3nxwlAcgidfnBC9SHYJatbhcEnQ== - dependencies: - "@aws-sdk/client-sso-oidc" "3.281.0" - "@aws-sdk/property-provider" "3.272.0" - "@aws-sdk/shared-ini-file-loader" "3.272.0" - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/types@3.272.0", "@aws-sdk/types@^3.222.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.272.0.tgz#83670e4009c2e72f1fdf55816c55c9f8b5935e0a" - integrity sha512-MmmL6vxMGP5Bsi+4wRx4mxYlU/LX6M0noOXrDh/x5FfG7/4ZOar/nDxqDadhJtNM88cuWVHZWY59P54JzkGWmA== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/url-parser@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/url-parser/-/url-parser-3.272.0.tgz#1a21abb8815ccc2c1344a3dfab0343f4e3eff4d3" - integrity sha512-vX/Tx02PlnQ/Kgtf5TnrNDHPNbY+amLZjW0Z1d9vzAvSZhQ4i9Y18yxoRDIaDTCNVRDjdhV8iuctW+05PB5JtQ== - dependencies: - "@aws-sdk/querystring-parser" "3.272.0" - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/util-base64@3.208.0": - version "3.208.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-base64/-/util-base64-3.208.0.tgz#36b430e5396251f761590f7c2f0c5c12193f353c" - integrity sha512-PQniZph5A6N7uuEOQi+1hnMz/FSOK/8kMFyFO+4DgA1dZ5pcKcn5wiFwHkcTb/BsgVqQa3Jx0VHNnvhlS8JyTg== - dependencies: - "@aws-sdk/util-buffer-from" "3.208.0" - tslib "^2.3.1" - -"@aws-sdk/util-body-length-browser@3.188.0": - version "3.188.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz#e1d949318c10a621b38575a9ef01e39f9857ddb0" - integrity sha512-8VpnwFWXhnZ/iRSl9mTf+VKOX9wDE8QtN4bj9pBfxwf90H1X7E8T6NkiZD3k+HubYf2J94e7DbeHs7fuCPW5Qg== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/util-body-length-node@3.208.0": - version "3.208.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-body-length-node/-/util-body-length-node-3.208.0.tgz#baabd1fa1206ff2bd4ce3785122d86eb3258dd20" - integrity sha512-3zj50e5g7t/MQf53SsuuSf0hEELzMtD8RX8C76f12OSRo2Bca4FLLYHe0TZbxcfQHom8/hOaeZEyTyMogMglqg== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/util-buffer-from@3.208.0": - version "3.208.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-buffer-from/-/util-buffer-from-3.208.0.tgz#285e86f6dc9030148a4147d65239e75cb254a1b0" - integrity sha512-7L0XUixNEFcLUGPeBF35enCvB9Xl+K6SQsmbrPk1P3mlV9mguWSDQqbOBwY1Ir0OVbD6H/ZOQU7hI/9RtRI0Zw== - dependencies: - "@aws-sdk/is-array-buffer" "3.201.0" - tslib "^2.3.1" - -"@aws-sdk/util-config-provider@3.208.0": - version "3.208.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-config-provider/-/util-config-provider-3.208.0.tgz#c485fd83fbac051337e5f6be60ea3f9fa61c0139" - integrity sha512-DSRqwrERUsT34ug+anlMBIFooBEGwM8GejC7q00Y/9IPrQy50KnG5PW2NiTjuLKNi7pdEOlwTSEocJE15eDZIg== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/util-defaults-mode-browser@3.279.0": - version "3.279.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-browser/-/util-defaults-mode-browser-3.279.0.tgz#8d16977f0162e272b2d77d67c4588a6374e8bd6e" - integrity sha512-RnchYRrpapTT5Hu23LOfk6e8RMVq0kUzho6xA6TJj1a4uGxkcRMvgzPipCq1P5uHu0mrkQBg9pGPEVNOUs38/Q== - dependencies: - "@aws-sdk/property-provider" "3.272.0" - "@aws-sdk/types" "3.272.0" - bowser "^2.11.0" - tslib "^2.3.1" - -"@aws-sdk/util-defaults-mode-node@3.279.0": - version "3.279.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-defaults-mode-node/-/util-defaults-mode-node-3.279.0.tgz#e05c043898e937282c45c1b3bcefab10e569783e" - integrity sha512-A2NB10xReWC+GSnOivKGZ9rnljIZdEP8WMCQQEnA6DJNI19AUFF/O9QJ9y+cHGLKEms7jH86Y99wShdpzAK+Jw== - dependencies: - "@aws-sdk/config-resolver" "3.272.0" - "@aws-sdk/credential-provider-imds" "3.272.0" - "@aws-sdk/node-config-provider" "3.272.0" - "@aws-sdk/property-provider" "3.272.0" - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/util-endpoints@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.272.0.tgz#4e4c849708634c3dd840a11abaacb02c89db46d3" - integrity sha512-c4MPUaJt2G6gGpoiwIOqDfUa98c1J63RpYvf/spQEKOtC/tF5Gfqlxuq8FnAl5lHnrqj1B9ZXLLxFhHtDR0IiQ== - dependencies: - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" - -"@aws-sdk/util-hex-encoding@3.201.0": - version "3.201.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-hex-encoding/-/util-hex-encoding-3.201.0.tgz#21d7ec319240ee68c33d938e71cb79830bea315d" - integrity sha512-7t1vR1pVxKx0motd3X9rI3m/xNp78p3sHtP5yo4NP4ARpxyJ0fokBomY8ScaH2D/B+U5o9ARxldJUdMqyBlJcA== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/util-locate-window@^3.0.0": - version "3.208.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.208.0.tgz#0f598fc238a1256e4bcb64d01459f03a922dd4c3" - integrity sha512-iua1A2+P7JJEDHVgvXrRJSvsnzG7stYSGQnBVphIUlemwl6nN5D+QrgbjECtrbxRz8asYFHSzhdhECqN+tFiBg== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/util-middleware@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-middleware/-/util-middleware-3.272.0.tgz#ed7d732a34659b07f949e2de39cde66271a3c632" - integrity sha512-Abw8m30arbwxqmeMMha5J11ESpHUNmCeSqSzE8/C4B8jZQtHY4kq7f+upzcNIQ11lsd+uzBEzNG3+dDRi0XOJQ== - dependencies: - tslib "^2.3.1" - -"@aws-sdk/util-retry@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-retry/-/util-retry-3.272.0.tgz#049f777d4a8f9fd7b7ed02e116d3a23ceb34f128" - integrity sha512-Ngha5414LR4gRHURVKC9ZYXsEJhMkm+SJ+44wlzOhavglfdcKKPUsibz5cKY1jpUV7oKECwaxHWpBB8r6h+hOg== - dependencies: - "@aws-sdk/service-error-classification" "3.272.0" - tslib "^2.3.1" +"@account-abstraction/contracts@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@account-abstraction/contracts/-/contracts-0.5.0.tgz#a089aee7b4c446251fbbce7df315bbf8f659e37f" + integrity sha512-CKyS9Zh5rcYUM+4B6TlaB9+THHzJ+6TY3tWF5QofqvFpqGNvIhF8ddy6wyCmqZw6TB74/yYv7cYD/RarVudfDg== -"@aws-sdk/util-uri-escape@3.201.0": - version "3.201.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-uri-escape/-/util-uri-escape-3.201.0.tgz#5e708d4cde001a4558ee616f889ceacfadd2ab03" - integrity sha512-TeTWbGx4LU2c5rx0obHeDFeO9HvwYwQtMh1yniBz00pQb6Qt6YVOETVQikRZ+XRQwEyCg/dA375UplIpiy54mA== +"@account-abstraction/sdk@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@account-abstraction/sdk/-/sdk-0.5.0.tgz#fb306ecb1dba82e10a0277ab716890acf1d2d1ed" + integrity sha512-KuEG9UVl2kEhamevFmPJfqY5AQH4fRLnFhfWAdoqwxIZIuSyA8wfyzM9WKnDPSCaiApLvSzckjRwbs4dVoOp2Q== dependencies: - tslib "^2.3.1" + "@account-abstraction/contracts" "^0.5.0" + "@account-abstraction/utils" "^0.5.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/providers" "^5.7.0" + "@types/debug" "^4.1.7" + debug "^4.3.4" + ethers "^5.7.0" -"@aws-sdk/util-user-agent-browser@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.272.0.tgz#9ff8834d38b2178d72cc5c63ba3e089cc1b9a9ae" - integrity sha512-Lp5QX5bH6uuwBlIdr7w7OAcAI50ttyskb++yUr9i+SPvj6RI2dsfIBaK4mDg1qUdM5LeUdvIyqwj3XHjFKAAvA== +"@account-abstraction/utils@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@account-abstraction/utils/-/utils-0.5.0.tgz#aa7925741048b1657a71d7f98ccaf3c187f99b4a" + integrity sha512-dgXguTn5WgFMmr3wQMdLGEoIMDcIJgzAv74YlHeb2D3Nyy1pByPArSb3eLOOcgxCJSJeqTscpO9P57uhNkkC4A== dependencies: - "@aws-sdk/types" "3.272.0" - bowser "^2.11.0" - tslib "^2.3.1" + "@account-abstraction/contracts" "^0.5.0" + "@ethersproject/abi" "^5.7.0" + "@ethersproject/providers" "^5.7.0" + "@openzeppelin/contracts" "^4.7.3" + debug "^4.3.4" + ethers "^5.7.0" -"@aws-sdk/util-user-agent-node@3.272.0": - version "3.272.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.272.0.tgz#8e8c85d8c3ac4471a309589d91094be14a4260df" - integrity sha512-ljK+R3l+Q1LIHrcR+Knhk0rmcSkfFadZ8V+crEGpABf/QUQRg7NkZMsoe814tfBO5F7tMxo8wwwSdaVNNHtoRA== - dependencies: - "@aws-sdk/node-config-provider" "3.272.0" - "@aws-sdk/types" "3.272.0" - tslib "^2.3.1" +"@assemblyscript/loader@^0.9.4": + version "0.9.4" + resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.9.4.tgz#a483c54c1253656bb33babd464e3154a173e1577" + integrity sha512-HazVq9zwTVwGmqdwYzu7WyQ6FQVZ7SwET0KKQuKm55jD0IfUpZgN0OPIiZG3zV1iSrVYcN0bdwLRXI/VNCYsUA== -"@aws-sdk/util-utf8-browser@^3.0.0": - version "3.259.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" - integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== +"@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2", "@babel/runtime@^7.21.0": + version "7.21.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.5.tgz#8492dddda9644ae3bda3b45eabe87382caee7200" + integrity sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q== dependencies: - tslib "^2.3.1" + regenerator-runtime "^0.13.11" -"@aws-sdk/util-utf8@3.254.0": - version "3.254.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-utf8/-/util-utf8-3.254.0.tgz#909af9c6549833a9a9bf77004b7484bfc96b2c35" - integrity sha512-14Kso/eIt5/qfIBmhEL9L1IfyUqswjSTqO2mY7KOzUZ9SZbwn3rpxmtkhmATkRjD7XIlLKaxBkI7tU9Zjzj8Kw== +"@coinbase/wallet-sdk@^3.6.3": + version "3.6.6" + resolved "https://registry.yarnpkg.com/@coinbase/wallet-sdk/-/wallet-sdk-3.6.6.tgz#4a0758fe0fe0ba3ed7e33b5bb6eb094ff8bd6c98" + integrity sha512-vX+epj/Ttjo7XRwlr3TFUUfW5GTRMvORpERPwiu7z2jl3DSVL4rXLmHt5y6LDPlUVreas2gumdcFbu0fLRG9Jg== dependencies: - "@aws-sdk/util-buffer-from" "3.208.0" - tslib "^2.3.1" + "@metamask/safe-event-emitter" "2.0.0" + "@solana/web3.js" "^1.70.1" + bind-decorator "^1.0.11" + bn.js "^5.1.1" + buffer "^6.0.3" + clsx "^1.1.0" + eth-block-tracker "6.1.0" + eth-json-rpc-filters "5.1.0" + eth-rpc-errors "4.0.2" + json-rpc-engine "6.1.0" + keccak "^3.0.1" + preact "^10.5.9" + qs "^6.10.3" + rxjs "^6.6.3" + sha.js "^2.4.11" + stream-browserify "^3.0.0" + util "^0.12.4" "@cspotcode/source-map-support@^0.8.0": version "0.8.1" @@ -719,6 +77,46 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" + integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== + +"@eslint/eslintrc@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331" + integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.5.2" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.40.0": + version "8.40.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.40.0.tgz#3ba73359e11f5a7bd3e407f70b3528abfae69cec" + integrity sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA== + +"@ethereumjs/common@^2.4.0": + version "2.6.5" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" + integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.5" + "@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" @@ -807,7 +205,7 @@ dependencies: "@ethersproject/bignumber" "^5.7.0" -"@ethersproject/contracts@5.7.0": +"@ethersproject/contracts@5.7.0", "@ethersproject/contracts@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== @@ -910,7 +308,7 @@ dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@5.7.2": +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.0", "@ethersproject/providers@^5.7.2": version "5.7.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== @@ -973,7 +371,7 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/solidity@5.7.0": +"@ethersproject/solidity@5.7.0", "@ethersproject/solidity@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== @@ -994,7 +392,7 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== @@ -1061,7 +459,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@fastify/ajv-compiler@^3.3.1": +"@fastify/ajv-compiler@^3.5.0": version "3.5.0" resolved "https://registry.yarnpkg.com/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz#459bff00fefbf86c96ec30e62e933d2379e46670" integrity sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA== @@ -1070,6 +468,22 @@ ajv-formats "^2.1.1" fast-uri "^2.0.0" +"@fastify/cookie@^8.3.0": + version "8.3.0" + resolved "https://registry.yarnpkg.com/@fastify/cookie/-/cookie-8.3.0.tgz#7d3304fcf0d11ea64ae8e02d65ae217b01fe1cf4" + integrity sha512-P9hY9GO11L20TnZ33XN3i0bt+3x0zaT7S0ohAzWO950E9PB2xnNhLYzPFJIGFi5AVN0yr5+/iZhWxeYvR6KCzg== + dependencies: + cookie "^0.5.0" + fastify-plugin "^4.0.0" + +"@fastify/cors@^8.2.1": + version "8.2.1" + resolved "https://registry.yarnpkg.com/@fastify/cors/-/cors-8.2.1.tgz#dd348162bcbfb87dff4b492e2bef32d41244006a" + integrity sha512-2H2MrDD3ea7g707g1CNNLWb9/tYbmw7HS+MK2SDcgjxwzbOFR93JortelTIO8DBFsZqFtEpKNxiZfSyrGgYcbw== + dependencies: + fastify-plugin "^4.0.0" + mnemonist "0.39.5" + "@fastify/deepmerge@^1.0.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@fastify/deepmerge/-/deepmerge-1.3.0.tgz#8116858108f0c7d9fd460d05a7d637a13fe3239a" @@ -1080,22 +494,77 @@ resolved "https://registry.yarnpkg.com/@fastify/error/-/error-3.2.0.tgz#9010e0acfe07965f5fc7d2b367f58f042d0f4106" integrity sha512-KAfcLa+CnknwVi5fWogrLXgidLic+GXnLjijXdpl8pvkvbXU5BGa37iZO9FGvsh9ZL4y+oFi5cbHBm5UOG+dmQ== -"@fastify/fast-json-stringify-compiler@^4.1.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.2.0.tgz#52d047fac76b0d75bd660f04a5dd606659f57c5a" - integrity sha512-ypZynRvXA3dibfPykQN3RB5wBdEUgSGgny8Qc6k163wYPLD4mEGEDkACp+00YmqkGvIm8D/xYoHajwyEdWD/eg== +"@fastify/express@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@fastify/express/-/express-2.3.0.tgz#23affaa16f74bb1a84c13e6b827fbc8cc7962520" + integrity sha512-jvvjlPPCfJsSHfF6tQDyARJ3+c3xXiqcxVZu6bi3xMWCWB3fl07vrjFDeaqnwqKhLZ9+m6cog5dw7gIMKEsTnQ== + dependencies: + express "^4.17.1" + fastify-plugin "^4.0.0" + +"@fastify/fast-json-stringify-compiler@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz#5df89fa4d1592cbb8780f78998355feb471646d5" + integrity sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA== + dependencies: + fast-json-stringify "^5.7.0" + +"@fastify/swagger@^8.3.1": + version "8.3.1" + resolved "https://registry.yarnpkg.com/@fastify/swagger/-/swagger-8.3.1.tgz#4ea955723dccd4c4ec43d8431711f4286bfc3b47" + integrity sha512-S9suS5WlRyADwobkrlcNeICkVyHFxKKdsimRsoO7h27KS86c+pE/s/8WvU793p5Ftk9QnApoilT9izJ0j3I8GA== + dependencies: + fastify-plugin "^4.0.0" + json-schema-resolver "^2.0.0" + openapi-types "^12.0.0" + rfdc "^1.3.0" + yaml "^2.1.1" + +"@fastify/type-provider-typebox@^3.0.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@fastify/type-provider-typebox/-/type-provider-typebox-3.2.0.tgz#9fe7e7bfec98160d931acf315976e96e076eac99" + integrity sha512-Ec+dHVfb9wovQ/jclkDbzTshHTtSsDmTGhls6S/TM3QIcx7682Jq8/W0kHXW3ylBUBEtcel87B+PuwH17TRDAw== + +"@humanwhocodes/config-array@^0.11.8": + version "0.11.8" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz#03595ac2075a4dc0f191cc2131de14fbd7d410b9" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== dependencies: - fast-json-stringify "^5.0.0" + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" "@jridgewell/resolve-uri@^3.0.3": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" @@ -1105,62 +574,264 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@multiformats/base-x@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@multiformats/base-x/-/base-x-4.0.1.tgz#95ff0fa58711789d53aefb2590a8b7a4e715d121" - integrity sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw== +"@json-rpc-tools/provider@^1.5.5": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@json-rpc-tools/provider/-/provider-1.7.6.tgz#8a17c34c493fa892632e278fd9331104e8491ec6" + integrity sha512-z7D3xvJ33UfCGv77n40lbzOYjZKVM3k2+5cV7xS8G6SCvKTzMkhkUYuD/qzQUNT4cG/lv0e9mRToweEEVLVVmA== + dependencies: + "@json-rpc-tools/utils" "^1.7.6" + axios "^0.21.0" + safe-json-utils "^1.1.1" + ws "^7.4.0" -"@prisma/client@^4.11.0": - version "4.11.0" - resolved "https://registry.yarnpkg.com/@prisma/client/-/client-4.11.0.tgz#41d5664dea4172c954190a432f70b86d3e2e629b" - integrity sha512-0INHYkQIqgAjrt7NzhYpeDQi8x3Nvylc2uDngKyFDDj1tTRQ4uV1HnVmd1sQEraeVAN63SOK0dgCKQHlvjL0KA== +"@json-rpc-tools/types@^1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@json-rpc-tools/types/-/types-1.7.6.tgz#5abd5fde01364a130c46093b501715bcce5bdc0e" + integrity sha512-nDSqmyRNEqEK9TZHtM15uNnDljczhCUdBmRhpNZ95bIPKEDQ+nTDmGMFd2lLin3upc5h2VVVd9tkTDdbXUhDIQ== dependencies: - "@prisma/engines-version" "4.11.0-57.8fde8fef4033376662cad983758335009d522acb" + keyvaluestorage-interface "^1.0.0" -"@prisma/engines-version@4.11.0-57.8fde8fef4033376662cad983758335009d522acb": - version "4.11.0-57.8fde8fef4033376662cad983758335009d522acb" - resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-4.11.0-57.8fde8fef4033376662cad983758335009d522acb.tgz#74af5ff56170c78e93ce46c56510160f58cd3c01" - integrity sha512-3Vd8Qq06d5xD8Ch5WauWcUUrsVPdMC6Ge8ILji8RFfyhUpqon6qSyGM0apvr1O8n8qH8cKkEFqRPsYjuz5r83g== +"@json-rpc-tools/utils@^1.7.6": + version "1.7.6" + resolved "https://registry.yarnpkg.com/@json-rpc-tools/utils/-/utils-1.7.6.tgz#67f04987dbaa2e7adb6adff1575367b75a9a9ba1" + integrity sha512-HjA8x/U/Q78HRRe19yh8HVKoZ+Iaoo3YZjakJYxR+rw52NHo6jM+VE9b8+7ygkCFXl/EHID5wh/MkXaE/jGyYw== + dependencies: + "@json-rpc-tools/types" "^1.7.6" + "@pedrouid/environment" "^1.0.1" -"@prisma/engines@4.11.0": - version "4.11.0" - resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-4.11.0.tgz#c99749bfe20f58e8f4d2b5e04fee0785eba440e1" - integrity sha512-0AEBi2HXGV02cf6ASsBPhfsVIbVSDC9nbQed4iiY5eHttW9ZtMxHThuKZE1pnESbr8HRdgmFSa/Kn4OSNYuibg== +"@lit-labs/ssr-dom-shim@^1.0.0", "@lit-labs/ssr-dom-shim@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.1.tgz#64df34e2f12e68e78ac57e571d25ec07fa460ca9" + integrity sha512-kXOeFbfCm4fFf2A3WwVEeQj55tMZa8c8/f9AKHMobQMkzNUfUj+antR3fRPaZJawsa1aZiP/Da3ndpZrwEe4rQ== -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" - integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== +"@lit/reactive-element@^1.3.0", "@lit/reactive-element@^1.6.0": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@lit/reactive-element/-/reactive-element-1.6.1.tgz#0d958b6d479d0e3db5fc1132ecc4fa84be3f0b93" + integrity sha512-va15kYZr7KZNNPZdxONGQzpUr+4sxVu7V/VG7a8mRfPPXUyhEYj5RzXCQmGrlP3tAh0L3HHm5AjBMFYRqlM9SA== + dependencies: + "@lit-labs/ssr-dom-shim" "^1.0.0" -"@protobufjs/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" - integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== +"@magic-ext/connect@^6.7.0": + version "6.7.2" + resolved "https://registry.yarnpkg.com/@magic-ext/connect/-/connect-6.7.2.tgz#9b479d2a3b0740e63915c7c7af461af5f3bfbf2a" + integrity sha512-b56mYYzgeXmRzZ8DgsUV6hFKFidaoRJvibUgcRwSuGElDdQxuhkz6FUyTLLS0zGbGdg4lfa7F1J/II1NrxA+lQ== -"@protobufjs/codegen@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" - integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== +"@magic-ext/oauth@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@magic-ext/oauth/-/oauth-7.6.2.tgz#fb779d76e2cdf39f452d14bb0efe81c81e327479" + integrity sha512-yqQBdtkMouD+owAJkPlevLbal/iCREH/D3PmDW9a7Dsfjy2xs557oIpGkLSZexTIHd3Cxga9hWNpdqFukUfzYg== + dependencies: + "@magic-sdk/types" "^11.6.2" -"@protobufjs/eventemitter@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" - integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== +"@magic-sdk/commons@^9.6.2": + version "9.6.2" + resolved "https://registry.yarnpkg.com/@magic-sdk/commons/-/commons-9.6.2.tgz#db03f98efb771481f4045a3877b6285600f0e96e" + integrity sha512-PgYznuO9GV5wiKgzP3bEQJTnAbvfHmAPTBmwbP/ESag3FrOyXxuk7PIWpeGmnFa/i6SSQUsmKp8sr/BN0dU5vg== -"@protobufjs/fetch@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" - integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== +"@magic-sdk/provider@^13.6.2": + version "13.6.2" + resolved "https://registry.yarnpkg.com/@magic-sdk/provider/-/provider-13.6.2.tgz#ae0772205952f65b32466396c81bfd695d23554f" + integrity sha512-ecrTyL4NaploZ/cX1b+NGiWYMSAWVseE7xa7tvmkejZgQCrcJQd8UXb3LPVPmF7kQPKGutJSdkeGJCDKwsGKIA== dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" + "@magic-sdk/types" "^11.6.2" + eventemitter3 "^4.0.4" + web3-core "1.5.2" -"@protobufjs/float@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" - integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== +"@magic-sdk/types@^11.6.2": + version "11.6.2" + resolved "https://registry.yarnpkg.com/@magic-sdk/types/-/types-11.6.2.tgz#1fb6205b516c3f0c5787e82aecd0e667d2de1cd2" + integrity sha512-+Emd+9HeeVi2E0bktJ33YleA/ozEuKYCBfmSbGRxlntdyUvaojeC+WPf2jN1WH8FjUEiljAjrEJTTZyRGCL8SQ== -"@protobufjs/inquire@^1.1.0": +"@metamask/safe-event-emitter@2.0.0", "@metamask/safe-event-emitter@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@metamask/safe-event-emitter/-/safe-event-emitter-2.0.0.tgz#af577b477c683fad17c619a78208cede06f9605c" + integrity sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q== + +"@metamask/utils@^3.0.1": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@metamask/utils/-/utils-3.6.0.tgz#b218b969a05ca7a8093b5d1670f6625061de707d" + integrity sha512-9cIRrfkWvHblSiNDVXsjivqa9Ak0RYo/1H6tqTqTbAx+oBK2Sva0lWDHxGchOqA7bySGUJKAWSNJvH6gdHZ0gQ== + dependencies: + "@types/debug" "^4.1.7" + debug "^4.3.4" + semver "^7.3.8" + superstruct "^1.0.3" + +"@motionone/animation@^10.15.1": + version "10.15.1" + resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.15.1.tgz#4a85596c31cbc5100ae8eb8b34c459fb0ccf6807" + integrity sha512-mZcJxLjHor+bhcPuIFErMDNyrdb2vJur8lSfMCsuCB4UyV8ILZLvK+t+pg56erv8ud9xQGK/1OGPt10agPrCyQ== + dependencies: + "@motionone/easing" "^10.15.1" + "@motionone/types" "^10.15.1" + "@motionone/utils" "^10.15.1" + tslib "^2.3.1" + +"@motionone/dom@^10.15.5": + version "10.15.5" + resolved "https://registry.yarnpkg.com/@motionone/dom/-/dom-10.15.5.tgz#4af18f8136d85c2fc997cac98121c969f6731802" + integrity sha512-Xc5avlgyh3xukU9tydh9+8mB8+2zAq+WlLsC3eEIp7Ax7DnXgY7Bj/iv0a4X2R9z9ZFZiaXK3BO0xMYHKbAAdA== + dependencies: + "@motionone/animation" "^10.15.1" + "@motionone/generators" "^10.15.1" + "@motionone/types" "^10.15.1" + "@motionone/utils" "^10.15.1" + hey-listen "^1.0.8" + tslib "^2.3.1" + +"@motionone/easing@^10.15.1": + version "10.15.1" + resolved "https://registry.yarnpkg.com/@motionone/easing/-/easing-10.15.1.tgz#95cf3adaef34da6deebb83940d8143ede3deb693" + integrity sha512-6hIHBSV+ZVehf9dcKZLT7p5PEKHGhDwky2k8RKkmOvUoYP3S+dXsKupyZpqx5apjd9f+php4vXk4LuS+ADsrWw== + dependencies: + "@motionone/utils" "^10.15.1" + tslib "^2.3.1" + +"@motionone/generators@^10.15.1": + version "10.15.1" + resolved "https://registry.yarnpkg.com/@motionone/generators/-/generators-10.15.1.tgz#dc6abb11139d1bafe758a41c134d4c753a9b871c" + integrity sha512-67HLsvHJbw6cIbLA/o+gsm7h+6D4Sn7AUrB/GPxvujse1cGZ38F5H7DzoH7PhX+sjvtDnt2IhFYF2Zp1QTMKWQ== + dependencies: + "@motionone/types" "^10.15.1" + "@motionone/utils" "^10.15.1" + tslib "^2.3.1" + +"@motionone/svelte@^10.15.5": + version "10.15.5" + resolved "https://registry.yarnpkg.com/@motionone/svelte/-/svelte-10.15.5.tgz#f36b40101ec1db122820598089f42e831f6cf5f5" + integrity sha512-Xyxtgp7BlVnSBwcoFmXGHUVnpNktzeXsEifu2NJJWc7VGuxutDsBZxNdz80qvpLIC5MeBa1wh7GGegZzTm1msg== + dependencies: + "@motionone/dom" "^10.15.5" + tslib "^2.3.1" + +"@motionone/types@^10.15.1": + version "10.15.1" + resolved "https://registry.yarnpkg.com/@motionone/types/-/types-10.15.1.tgz#89441b54285012795cbba8612cbaa0fa420db3eb" + integrity sha512-iIUd/EgUsRZGrvW0jqdst8st7zKTzS9EsKkP+6c6n4MPZoQHwiHuVtTQLD6Kp0bsBLhNzKIBlHXponn/SDT4hA== + +"@motionone/utils@^10.15.1": + version "10.15.1" + resolved "https://registry.yarnpkg.com/@motionone/utils/-/utils-10.15.1.tgz#6b5f51bde75be88b5411e084310299050368a438" + integrity sha512-p0YncgU+iklvYr/Dq4NobTRdAPv9PveRDUXabPEeOjBLSO/1FNB2phNTZxOxpi1/GZwYpAoECEa0Wam+nsmhSw== + dependencies: + "@motionone/types" "^10.15.1" + hey-listen "^1.0.8" + tslib "^2.3.1" + +"@motionone/vue@^10.15.5": + version "10.15.5" + resolved "https://registry.yarnpkg.com/@motionone/vue/-/vue-10.15.5.tgz#3101c62b2fce06b3f3072b9ff0f551213eb02476" + integrity sha512-cUENrLYAolUacHvCgU+8wF9OgSlVutfWbHMLERI/bElCJ+e2YVQvG/CpGhIM5fYOOJzuvg2T2wHmLLmvJoavEw== + dependencies: + "@motionone/dom" "^10.15.5" + tslib "^2.3.1" + +"@multiformats/base-x@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@multiformats/base-x/-/base-x-4.0.1.tgz#95ff0fa58711789d53aefb2590a8b7a4e715d121" + integrity sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw== + +"@noble/ed25519@^1.7.0": + 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.1.2": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.0.tgz#085fd70f6d7d9d109671090ccae1d3bec62554a1" + integrity sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg== + +"@noble/secp256k1@^1.6.3": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@openzeppelin/contracts@^4.7.3": + version "4.8.3" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.8.3.tgz#cbef3146bfc570849405f59cba18235da95a252a" + integrity sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg== + +"@paperxyz/embedded-wallet-service-sdk@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@paperxyz/embedded-wallet-service-sdk/-/embedded-wallet-service-sdk-0.1.0.tgz#27fbf637479d11909e5e78cf1188f3bc21f83778" + integrity sha512-AWo/fNYx3bhP2jkScZ8T3vElKsTiXMeTTx5FT5RmcJVfeDArAPh2nEvnFA+16J4c2zHq+GRATxe+MmB/XWh8SQ== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/providers" "^5.7.2" + "@paperxyz/sdk-common-utilities" "*" + +"@paperxyz/sdk-common-utilities@*": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@paperxyz/sdk-common-utilities/-/sdk-common-utilities-0.0.3.tgz#e37f202d7e0997231c037731ab0c01ea7f90f1c4" + integrity sha512-piBm+Pss5JrT7cOO5Bn9i+Mu2KHy2EOtMfv+BjsHc/HkAxVqx5kz76hughve2UgOJP18aI4cEU2vSiz56cOLgQ== + +"@pedrouid/environment@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@pedrouid/environment/-/environment-1.0.1.tgz#858f0f8a057340e0b250398b75ead77d6f4342ec" + integrity sha512-HaW78NszGzRZd9SeoI3JD11JqY+lubnaOx7Pewj5pfjqWXOEATpeKIFb9Z4t2WBUK2iryiXX3lzWwmYWgUL0Ug== + +"@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== + +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== + +"@protobufjs/inquire@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== @@ -1180,33 +851,349 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== -"@thirdweb-dev/chains@0.1.6-nightly-20230303074206-0c883044", "@thirdweb-dev/chains@^0.1.6-nightly-20230303074206-0c883044": - version "0.1.6-nightly-20230303074206-0c883044" - resolved "https://registry.yarnpkg.com/@thirdweb-dev/chains/-/chains-0.1.6-nightly-20230303074206-0c883044.tgz#262fa9f3d9b8341c6539c1b1a1ac3ed1cba2d8ee" - integrity sha512-VLxJPILRxrvN9pee04SQnKd86h3tGNext6SnrGn3yZNOP78ahToiSCZdTsVz4xuurI5NzmTWxARMRCpC1nD4+w== +"@safe-global/safe-core-sdk-types@^1.9.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@safe-global/safe-core-sdk-types/-/safe-core-sdk-types-1.10.1.tgz#94331b982671d2f2b8cc23114c58baf63d460c81" + integrity sha512-BKvuYTLOlY16Rq6qCXglmnL6KxInDuXMFqZMaCzwDKiEh+uoHu3xCumG5tVtWOkCgBF4XEZXMqwZUiLcon7IsA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/contracts" "^5.7.0" + "@safe-global/safe-deployments" "^1.20.2" + web3-core "^1.8.1" + web3-utils "^1.8.1" + +"@safe-global/safe-core-sdk-utils@^1.7.3": + version "1.7.3" + resolved "https://registry.yarnpkg.com/@safe-global/safe-core-sdk-utils/-/safe-core-sdk-utils-1.7.3.tgz#40eeefeafa1cf4dad18d77cad50ac005b2b7f6fe" + integrity sha512-QbUTwV8Pmc4dpDW0icfl02hcg41eTJomB0jtyhXQ79RIVCnFUIq1+P6FZL+/1gXcur4XWQTX7kShOWqfvd+BZA== + dependencies: + "@safe-global/safe-core-sdk-types" "^1.9.1" + semver "^7.3.8" + web3-utils "^1.8.1" + +"@safe-global/safe-core-sdk@^3.3.2", "@safe-global/safe-core-sdk@^3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@safe-global/safe-core-sdk/-/safe-core-sdk-3.3.3.tgz#5074ebdc954655e53e1a96b7e6013b18ddc54e8f" + integrity sha512-f7k/L8eGINrjAgN5DQuHY101gxntVTwS/VO14w1Qh+2+AuZmyWn0WekAAU0icAc1jVy0lhgNqCvbMQHc7rkfUg== + dependencies: + "@ethersproject/solidity" "^5.7.0" + "@safe-global/safe-core-sdk-types" "^1.9.1" + "@safe-global/safe-core-sdk-utils" "^1.7.3" + "@safe-global/safe-deployments" "^1.22.0" + ethereumjs-util "^7.1.5" + semver "^7.3.8" + web3-utils "^1.8.1" + +"@safe-global/safe-deployments@^1.20.2", "@safe-global/safe-deployments@^1.22.0": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@safe-global/safe-deployments/-/safe-deployments-1.22.0.tgz#4214ac5a9ebcad7cdbf5f641b0728bc0e497286e" + integrity sha512-SmbeCRMlcO/EONxbV6nP6pM/60q0NIHVezxx5FMv0dIAkDffdbm25reonKlOk3AJYW1b/c6pZA0RbWDwFSJEkQ== + dependencies: + semver "^7.3.7" -"@thirdweb-dev/contracts-js@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@thirdweb-dev/contracts-js/-/contracts-js-1.3.1.tgz#e1e6a0d0c33fc2a7b87caaf556211238d028e326" - integrity sha512-iUEEBUN6wfhhiuVtFLNmMYXFGbJGXGOH45lGdbnn6Bsd3/4o/oBupbyciWixcUCzm9pbXhQWqwuMl/UtRhcmwQ== +"@safe-global/safe-ethers-adapters@^0.1.0-alpha.16": + version "0.1.0-alpha.17" + resolved "https://registry.yarnpkg.com/@safe-global/safe-ethers-adapters/-/safe-ethers-adapters-0.1.0-alpha.17.tgz#87ef145c04bf9fc08e7d722d738e7bd9ea63b16a" + integrity sha512-02+emAnnXZAOwld1Ucen6idnMCAD76TXrhmuteYsdYoPjl5Eyq1ySb9tzIjCWklgfjMHQtrHSHDJqwdlHFM4GQ== dependencies: - "@thirdweb-dev/contracts" "3.4.1" + "@safe-global/safe-core-sdk" "^3.3.3" + "@safe-global/safe-core-sdk-types" "^1.9.1" + "@safe-global/safe-deployments" "^1.22.0" + axios "^0.27.2" -"@thirdweb-dev/contracts@3.4.1": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@thirdweb-dev/contracts/-/contracts-3.4.1.tgz#e5a63e705b2f2014fe3fabf3e30209e3c5034348" - integrity sha512-BURfuFYZhJOmoycDwo8iaKUi+rdjt9vRGFd0vquqNjL2vQdI7dXqdbuJuOepIwGld5gvRNM+WlnVQ8EZgQIjqg== +"@safe-global/safe-ethers-lib@^1.9.2": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@safe-global/safe-ethers-lib/-/safe-ethers-lib-1.9.3.tgz#bdff0ea52a9bd976f0325aa22571e0daeca22961" + integrity sha512-+c6I55nyyh7dheyUch9claRBUK/i+KwbHPb4Yvk4/oWthEESKZRkR8p7hioOGys4zC6eglfSqm2QjlDDU0SbAQ== + dependencies: + "@safe-global/safe-core-sdk-types" "^1.9.1" + "@safe-global/safe-core-sdk-utils" "^1.7.3" + ethers "5.7.2" + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== -"@thirdweb-dev/sdk@^3.10.0-nightly-20230303074206-0c883044": - version "3.10.0-nightly-20230303074206-0c883044" - resolved "https://registry.yarnpkg.com/@thirdweb-dev/sdk/-/sdk-3.10.0-nightly-20230303074206-0c883044.tgz#d92e39ccc7f361d0f6cd6e4969376f3c9d4467e7" - integrity sha512-3/b15e474fsPno52XSLLOsW5ZC+jfGzoqjuZDVJf8FCOSRkzwllDU2J7ugy5PO2v5PD48OzsH8hAFdMguun/rg== +"@solana/buffer-layout@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15" + integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA== + dependencies: + buffer "~6.0.3" + +"@solana/web3.js@^1.70.1": + version "1.75.0" + resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.75.0.tgz#824c6f78865007bca758ca18f268d6f7363b42e5" + integrity sha512-rHQgdo1EWfb+nPUpHe4O7i8qJPELHKNR5PAZRK+a7XxiykqOfbaAlPt5boDWAGPnYbSv0ziWZv5mq9DlFaQCxg== + dependencies: + "@babel/runtime" "^7.12.5" + "@noble/ed25519" "^1.7.0" + "@noble/hashes" "^1.1.2" + "@noble/secp256k1" "^1.6.3" + "@solana/buffer-layout" "^4.0.0" + agentkeepalive "^4.2.1" + bigint-buffer "^1.1.5" + bn.js "^5.0.0" + borsh "^0.7.0" + bs58 "^4.0.1" + buffer "6.0.3" + fast-stable-stringify "^1.0.0" + jayson "^3.4.4" + node-fetch "^2.6.7" + rpc-websockets "^7.5.1" + superstruct "^0.14.2" + +"@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/aead@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/aead/-/aead-1.0.1.tgz#c4b1106df9c23d1b867eb9b276d8f42d5fc4c0c3" + integrity sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg== + +"@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/chacha20poly1305@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz#de6b18e283a9cb9b7530d8767f99cde1fec4c2ee" + integrity sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA== + dependencies: + "@stablelib/aead" "^1.0.1" + "@stablelib/binary" "^1.0.1" + "@stablelib/chacha" "^1.0.1" + "@stablelib/constant-time" "^1.0.1" + "@stablelib/poly1305" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/chacha@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/chacha/-/chacha-1.0.1.tgz#deccfac95083e30600c3f92803a3a1a4fa761371" + integrity sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg== + dependencies: + "@stablelib/binary" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/constant-time@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/constant-time/-/constant-time-1.0.1.tgz#bde361465e1cf7b9753061b77e376b0ca4c77e35" + integrity sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg== + +"@stablelib/ed25519@^1.0.2": + 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/hkdf@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/hkdf/-/hkdf-1.0.1.tgz#b4efd47fd56fb43c6a13e8775a54b354f028d98d" + integrity sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g== + dependencies: + "@stablelib/hash" "^1.0.1" + "@stablelib/hmac" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/hmac@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/hmac/-/hmac-1.0.1.tgz#3d4c1b8cf194cb05d28155f0eed8a299620a07ec" + integrity sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA== + dependencies: + "@stablelib/constant-time" "^1.0.1" + "@stablelib/hash" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@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: - "@thirdweb-dev/chains" "0.1.6-nightly-20230303074206-0c883044" - "@thirdweb-dev/contracts-js" "^1.3.1" - "@thirdweb-dev/storage" "1.1.0-nightly-20230303074206-0c883044" + "@stablelib/bytes" "^1.0.1" + +"@stablelib/poly1305@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/poly1305/-/poly1305-1.0.1.tgz#93bfb836c9384685d33d70080718deae4ddef1dc" + integrity sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA== + dependencies: + "@stablelib/constant-time" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/random@^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/sha256@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/sha256/-/sha256-1.0.1.tgz#77b6675b67f9b0ea081d2e31bda4866297a3ae4f" + integrity sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ== + dependencies: + "@stablelib/binary" "^1.0.1" + "@stablelib/hash" "^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.3": + 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" + +"@swc/core-darwin-arm64@1.3.57": + version "1.3.57" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.57.tgz#6af39458bf4ae58c8e4d12be2f2d69563b5a932a" + integrity sha512-lhAK9kF/ppZdNTdaxJl2gE0bXubzQXTgxB2Xojme/1sbOipaLTskBbJ3FLySChpmVOzD0QSCTiW8w/dmQxqNIQ== + +"@swc/core-darwin-x64@1.3.57": + version "1.3.57" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.57.tgz#e7133f88e1aa166ad7e5966302df495551c3505c" + integrity sha512-jsTDH8Et/xdOM/ZCNvtrT6J8FT255OrMhEDvHZQZTgoky4oW/3FHUfji4J2FE97gitJqNJI8MuNuiGq81pIJRw== + +"@swc/core-linux-arm-gnueabihf@1.3.57": + version "1.3.57" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.57.tgz#f8d95c8a9e03d1cccbb85d214fe24ca95940852a" + integrity sha512-MZv3fwcCmppbwfCWaE8cZvzbXOjX7n5SEC1hF2lgItTqp4S04dFk1iX50jKr6xS6xSLlRBPqDxwZH0sBpHaEuA== + +"@swc/core-linux-arm64-gnu@1.3.57": + version "1.3.57" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.57.tgz#66fb53f081f43a652de79374d8b7c78b10469ef8" + integrity sha512-wUeqa/qbkOEGl6TaDQZZL7txrQXs1vL7ERjPYhi9El+ywacFY/rTW2pK5DqaNk2eulVnLhbbNjsE1OMGSEWGkQ== + +"@swc/core-linux-arm64-musl@1.3.57": + version "1.3.57" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.57.tgz#28709d982d2eeb55b173c79a7d5feed1a2cc065d" + integrity sha512-pZfp1B9XfH7ZhDKFjr4qbyM093zU2Ri0IZq2M2A4W9q92+Ivy8oEIqw+gSRO3jwMDqRMEtFD49YuFhkJQakxdA== + +"@swc/core-linux-x64-gnu@1.3.57": + version "1.3.57" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.57.tgz#3bea8b7d115fc2bf65a7b4b6930dd878f434034f" + integrity sha512-dvtQnv07NikV+CJ+9PYJ3fqphSigzfvSUH6wRCmb5OzLDDLFnPLMrEO0pGeURvdIWCOhngcHF252C1Hl5uFSzA== + +"@swc/core-linux-x64-musl@1.3.57": + version "1.3.57" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.57.tgz#40bf395ac8971d561e38ef2af54b72d3705c199e" + integrity sha512-1TKCSngyQxpzwBYDzF5MrEfYRDhlzt/GN1ZqlSnsJIPGkABOWZxYDvWJuMrkASdIztn3jSTPU2ih7rR7YQ8IIw== + +"@swc/core-win32-arm64-msvc@1.3.57": + version "1.3.57" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.57.tgz#5edf457fb86c455b6cecb89e4fa29a8dfa47910b" + integrity sha512-HvBYFyf4uBua/jyTrcFLKcq8SIbKVYfz2qWsbgSAZvuQPZvDC1XhN5EDH2tPZmT97F0CJx3fltH5nli6XY1/EQ== + +"@swc/core-win32-ia32-msvc@1.3.57": + version "1.3.57" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.57.tgz#0d9d4b851f5380dce04094412ecae8ac538f5dc8" + integrity sha512-PS8AtK9e6Rp97S0ek9W5VCZNCbDaHBUasiJUmaYqRVCq/Mn6S7eQlhd0iUDnjsagigQtoCRgMUzkVknd1tarsQ== + +"@swc/core-win32-x64-msvc@1.3.57": + version "1.3.57" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.57.tgz#4923a71e9bd3a1bae3ab3a1c6e07a31973d45f61" + integrity sha512-A6aX/Rpp0v3g7Spf3LSwR+ivviH8x+1xla612KLZmlc0yymWt9BMd3CmBkzyRBr2e41zGCrkf6tra6wgtCbAwA== + +"@swc/core@^1.3.41": + version "1.3.57" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.57.tgz#a6c2c04ad72668a3144661fee27508556fff3fed" + integrity sha512-gAT80hOVeK5qoi+BRlgXWgJYI9cbQn2oi05A09Tvb6vjFgBsr9SlQGNZB9uMlcXRXspkZFf9l3yyWRtT4we3Yw== + optionalDependencies: + "@swc/core-darwin-arm64" "1.3.57" + "@swc/core-darwin-x64" "1.3.57" + "@swc/core-linux-arm-gnueabihf" "1.3.57" + "@swc/core-linux-arm64-gnu" "1.3.57" + "@swc/core-linux-arm64-musl" "1.3.57" + "@swc/core-linux-x64-gnu" "1.3.57" + "@swc/core-linux-x64-musl" "1.3.57" + "@swc/core-win32-arm64-msvc" "1.3.57" + "@swc/core-win32-ia32-msvc" "1.3.57" + "@swc/core-win32-x64-msvc" "1.3.57" + +"@thirdweb-dev/auth@3.0.16-nightly-72b8b982-20230503002100": + version "3.0.16-nightly-72b8b982-20230503002100" + resolved "https://registry.yarnpkg.com/@thirdweb-dev/auth/-/auth-3.0.16-nightly-72b8b982-20230503002100.tgz#52445749a9af8ba51e748e091a022670025a05e5" + integrity sha512-uOlpxD0qB+7PCXPLLMcbkUNfvyYnJ+6Btgrgk6QdUt7XbFQwIBI8yjbQSsNO0lfbVJCVE5SXAhEaF5sIxWnLiA== + dependencies: + "@thirdweb-dev/wallets" "0.2.17-nightly-72b8b982-20230503002100" + cookie "^0.5.0" + uuid "^9.0.0" + zod "^3.20.2" + +"@thirdweb-dev/chains@0.1.13-nightly-72b8b982-20230503002100": + version "0.1.13-nightly-72b8b982-20230503002100" + resolved "https://registry.yarnpkg.com/@thirdweb-dev/chains/-/chains-0.1.13-nightly-72b8b982-20230503002100.tgz#66e9b28d157c776fe7395b304ee87a3ff1c532a9" + integrity sha512-f6DuxKho+3Bgqn00CyFvD9bDO8dgEcqby09GNSKGgCmOuY6i8D3bJliVTdYqnnXCqot7r05Vw3xmo5yui2WTKA== + +"@thirdweb-dev/contracts-js@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@thirdweb-dev/contracts-js/-/contracts-js-1.3.3.tgz#f44df210efec111dd4ebf3e3bf6f64142f0009fd" + integrity sha512-P+1Yka9HUCe7FpzTEmRCMdXM2ceg3GwZ+1kLdmIQUhxwQhcHDzziCvzNvsdehF0ZRZIoLOPpyiEOKise7GCIHg== + dependencies: + "@thirdweb-dev/contracts" "3.4.6-1" + +"@thirdweb-dev/contracts@3.4.6-1": + version "3.4.6-1" + resolved "https://registry.yarnpkg.com/@thirdweb-dev/contracts/-/contracts-3.4.6-1.tgz#b07a156517c9f596526a51bd2beabf56b2c90d6d" + integrity sha512-v6tDS0+sTdlRJinep8nYRJlbsO7hbmIIUzEzBIYuFOxSlw/xuEO6xAfgNB8k3oc3n0NerDop2LQOfTxSVLBK6Q== + +"@thirdweb-dev/generated-abis@0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@thirdweb-dev/generated-abis/-/generated-abis-0.0.1.tgz#0d788d6aff0ac08f11e9eeb9ae4c8321845272a8" + integrity sha512-vO9/3lSLO8smyyH1QVeYravSTzFwV1nf1C/Im1NBDPdH8//YvcbhtETGGiNfHWpyCvSi0vRYwvf+/7FKdwpDGQ== + +"@thirdweb-dev/sdk@3.10.12-nightly-72b8b982-20230503002100": + version "3.10.12-nightly-72b8b982-20230503002100" + resolved "https://registry.yarnpkg.com/@thirdweb-dev/sdk/-/sdk-3.10.12-nightly-72b8b982-20230503002100.tgz#4023d676e878d7da3ccb4efe412acf0b60b52c9b" + integrity sha512-9FdkxHYGIf7VAEu/mI8lWDmRtOUHxeYSZFw8Jf4iSYjOfaKWDWSsv03tARcFKAtO5VpU0vMbA1JMww4FL76UJw== + dependencies: + "@thirdweb-dev/chains" "0.1.13-nightly-72b8b982-20230503002100" + "@thirdweb-dev/contracts-js" "1.3.3" + "@thirdweb-dev/generated-abis" "0.0.1" + "@thirdweb-dev/storage" "1.1.2" + abitype "^0.2.5" bn.js "^5.2.1" bs58 "^5.0.0" + buffer "^6.0.3" cross-fetch "^3.1.5" eventemitter3 "^5.0.0" fast-deep-equal "^3.1.3" @@ -1215,25 +1202,52 @@ tweetnacl "^1.0.3" uuid "^9.0.0" yaml "^2.1.1" - zod "^3.11.6" + zod "^3.20.2" -"@thirdweb-dev/storage@1.1.0-nightly-20230303074206-0c883044": - version "1.1.0-nightly-20230303074206-0c883044" - resolved "https://registry.yarnpkg.com/@thirdweb-dev/storage/-/storage-1.1.0-nightly-20230303074206-0c883044.tgz#13485d879a6012d0cf6f267d879443ed2477f035" - integrity sha512-jBzfl/NB5l+o1WVzpVAKX2U1jyZzqnzpXdU9HabaLSuSMAiKZbc8xcfkwFi20/dX4yD+3Defi2lGRy6EHjpaPQ== +"@thirdweb-dev/storage@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@thirdweb-dev/storage/-/storage-1.1.2.tgz#8de899e9579f49dc2da1eb4a04694ee86ec5e62e" + integrity sha512-l5cNliQ/BuoYjCouWR0lJ97ByJVNksKKoDuPaI6rTZuMXNEgJliTa2M5nyjM8FKK6GnykcEvAEzB2g4sar3NxA== dependencies: cross-fetch "^3.1.5" form-data "^4.0.0" ipfs-unixfs-importer "^7.0.1" uuid "^9.0.0" -"@thirdweb-dev/wallets@^0.2.6": - version "0.2.6" - resolved "https://registry.yarnpkg.com/@thirdweb-dev/wallets/-/wallets-0.2.6.tgz#895573638fd6cc4c1173d2483c7d8137977f647d" - integrity sha512-EyrZ29611NYManQWJdscOiKjMeH2ftvz76gooVBHfFIB8r2U+pITQ9F5QHrHO8fdoP7eN+7iGeuaVffOoNwySA== - dependencies: +"@thirdweb-dev/wallets@0.2.17-nightly-72b8b982-20230503002100": + version "0.2.17-nightly-72b8b982-20230503002100" + resolved "https://registry.yarnpkg.com/@thirdweb-dev/wallets/-/wallets-0.2.17-nightly-72b8b982-20230503002100.tgz#11f9f82d8b8233fe149e9a2f2423b8b192a3e173" + integrity sha512-ACrH2Wnk0hgHU06d4tHI4AlSYWVhExM0mRVkPmtsHCePRx53AfC9E9a8hasuQkRhUVadfQzClEYDCzH00IvdxQ== + dependencies: + "@account-abstraction/contracts" "^0.5.0" + "@account-abstraction/sdk" "^0.5.0" + "@account-abstraction/utils" "^0.5.0" + "@coinbase/wallet-sdk" "^3.6.3" + "@magic-ext/connect" "^6.7.0" + "@magic-ext/oauth" "^7.6.2" + "@magic-sdk/provider" "^13.6.2" + "@paperxyz/embedded-wallet-service-sdk" "^0.1.0" + "@safe-global/safe-core-sdk" "^3.3.2" + "@safe-global/safe-ethers-adapters" "^0.1.0-alpha.16" + "@safe-global/safe-ethers-lib" "^1.9.2" + "@thirdweb-dev/chains" "0.1.13-nightly-72b8b982-20230503002100" + "@thirdweb-dev/sdk" "3.10.12-nightly-72b8b982-20230503002100" + "@walletconnect/ethereum-provider" "~2.4.6" + "@walletconnect/jsonrpc-http-connection" "^1.0.0" + "@walletconnect/jsonrpc-provider" "^1.0.3" + "@walletconnect/jsonrpc-types" "^1.0.1" + "@walletconnect/jsonrpc-utils" "^1.0.3" + "@walletconnect/legacy-client" "^2.0.0-rc.0" + "@walletconnect/legacy-modal" "^2.0.0-rc.0" + "@walletconnect/legacy-types" "^2.0.0-rc.0" + "@walletconnect/legacy-utils" "^2.0.0-rc.0" + buffer "^6.0.3" + cross-fetch "^3.1.5" + crypto-js "^4.1.1" + eip1193-provider "^1.0.1" eventemitter3 "^5.0.0" - localforage "^1.10.0" + magic-sdk "^13.6.2" + web3-core "1.5.2" "@tsconfig/node10@^1.0.7": version "1.0.9" @@ -1255,22 +1269,113 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== -"@types/bn.js@^5.1.0": +"@types/bn.js@^4.11.5": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/bn.js@^5.1.0", "@types/bn.js@^5.1.1": version "5.1.1" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.1.tgz#b51e1b55920a4ca26e9285ff79936bbdec910682" integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== dependencies: "@types/node" "*" +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/busboy@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@types/busboy/-/busboy-1.5.0.tgz#62681556cbbd2afc8d2efa6bafaa15602f0838b9" + integrity sha512-ncOOhwmyFDW76c/Tuvv9MA9VGYUCn8blzyWmzYELcNGDb0WXWLSmFi7hJq25YdRBYJrmMBB5jZZwUjlJe9HCjQ== + dependencies: + "@types/node" "*" + +"@types/connect@*", "@types/connect@^3.4.33": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/cookie@^0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.5.1.tgz#b29aa1f91a59f35e29ff8f7cb24faf1a3a750554" + integrity sha512-COUnqfB2+ckwXXSFInsFdOAWQzCCx+a5hq2ruyj+Vjund94RJQd4LG2u9hnvJrTgunKAaax7ancBYlDrNYxA0g== + +"@types/debug@^4.1.7": + version "4.1.7" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" + integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== + dependencies: + "@types/ms" "*" + +"@types/express-serve-static-core@^4.17.33": + version "4.17.34" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.34.tgz#c119e85b75215178bc127de588e93100698ab4cc" + integrity sha512-fvr49XlCGoUj2Pp730AItckfjat4WNb0lb3kfrLWffd+RLeoGAMsq7UOy04PAPtoL01uKwcp6u8nhzpgpDYr3w== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@^4.17.17": + version "4.17.17" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" + integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + "@types/long@^4.0.1": version "4.0.2" resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== -"@types/node@*", "@types/node@>=13.7.0", "@types/node@^18.11.9": - version "18.14.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.14.2.tgz#c076ed1d7b6095078ad3cf21dfeea951842778b1" - integrity sha512-1uEQxww3DaghA0RxqHx0O0ppVlo43pJhepY51OxuQIKHpjbnYLA7vcdwioNPzIqmC2u3I/dmylcqjlh0e7AyUA== +"@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== + +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + +"@types/ms@*": + version "0.7.31" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" + integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== + +"@types/node@*", "@types/node@>=13.7.0": + version "20.1.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.1.1.tgz#afc492e8dbe7f672dd3a13674823522b467a45ad" + integrity sha512-uKBEevTNb+l6/aCQaKVnUModfEMjAl98lw2Si9P5y4hLu9tm6AlX2ZIoXZX6Wh9lJueYPrGPKk5WMCNHg/u6/A== + +"@types/node@^12.12.54", "@types/node@^12.12.6": + version "12.20.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== + +"@types/node@^18.15.4": + version "18.16.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.6.tgz#d0ffffe201b253989b17ea157ddabec677a4f4fe" + integrity sha512-N7KINmeB8IN3vRR8dhgHEp+YpWvGFcpDoh5XZ8jB5a00AdFKCKEyyGTOPTddUf4JqU1ZKTVxkOxakDvchNVI2Q== "@types/pbkdf2@^3.0.0": version "3.1.0" @@ -1279,6 +1384,16 @@ dependencies: "@types/node" "*" +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + "@types/secp256k1@^4.0.1": version "4.0.3" resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" @@ -1286,11 +1401,505 @@ dependencies: "@types/node" "*" +"@types/semver@^7.3.12": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" + integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== + +"@types/send@*": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301" + integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-static@*": + version "1.15.1" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" + integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== + dependencies: + "@types/mime" "*" + "@types/node" "*" + +"@types/trusted-types@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.3.tgz#a136f83b0758698df454e328759dbd3d44555311" + integrity sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g== + +"@types/ws@^7.4.4": + version "7.4.7" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" + integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== + dependencies: + "@types/node" "*" + +"@types/ws@^8.5.4": + version "8.5.4" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" + integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== + dependencies: + "@types/node" "*" + +"@typescript-eslint/eslint-plugin@^5.55.0": + version "5.59.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.5.tgz#f156827610a3f8cefc56baeaa93cd4a5f32966b4" + integrity sha512-feA9xbVRWJZor+AnLNAr7A8JRWeZqHUf4T9tlP+TN04b05pFVhO5eN7/O93Y/1OUlLMHKbnJisgDURs/qvtqdg== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.59.5" + "@typescript-eslint/type-utils" "5.59.5" + "@typescript-eslint/utils" "5.59.5" + debug "^4.3.4" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.55.0": + version "5.59.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.59.5.tgz#63064f5eafbdbfb5f9dfbf5c4503cdf949852981" + integrity sha512-NJXQC4MRnF9N9yWqQE2/KLRSOLvrrlZb48NGVfBa+RuPMN6B7ZcK5jZOvhuygv4D64fRKnZI4L4p8+M+rfeQuw== + dependencies: + "@typescript-eslint/scope-manager" "5.59.5" + "@typescript-eslint/types" "5.59.5" + "@typescript-eslint/typescript-estree" "5.59.5" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.59.5": + version "5.59.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.59.5.tgz#33ffc7e8663f42cfaac873de65ebf65d2bce674d" + integrity sha512-jVecWwnkX6ZgutF+DovbBJirZcAxgxC0EOHYt/niMROf8p4PwxxG32Qdhj/iIQQIuOflLjNkxoXyArkcIP7C3A== + dependencies: + "@typescript-eslint/types" "5.59.5" + "@typescript-eslint/visitor-keys" "5.59.5" + +"@typescript-eslint/type-utils@5.59.5": + version "5.59.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.59.5.tgz#485b0e2c5b923460bc2ea6b338c595343f06fc9b" + integrity sha512-4eyhS7oGym67/pSxA2mmNq7X164oqDYNnZCUayBwJZIRVvKpBCMBzFnFxjeoDeShjtO6RQBHBuwybuX3POnDqg== + dependencies: + "@typescript-eslint/typescript-estree" "5.59.5" + "@typescript-eslint/utils" "5.59.5" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.59.5": + version "5.59.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.59.5.tgz#e63c5952532306d97c6ea432cee0981f6d2258c7" + integrity sha512-xkfRPHbqSH4Ggx4eHRIO/eGL8XL4Ysb4woL8c87YuAo8Md7AUjyWKa9YMwTL519SyDPrfEgKdewjkxNCVeJW7w== + +"@typescript-eslint/typescript-estree@5.59.5": + version "5.59.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.5.tgz#9b252ce55dd765e972a7a2f99233c439c5101e42" + integrity sha512-+XXdLN2CZLZcD/mO7mQtJMvCkzRfmODbeSKuMY/yXbGkzvA9rJyDY5qDYNoiz2kP/dmyAxXquL2BvLQLJFPQIg== + dependencies: + "@typescript-eslint/types" "5.59.5" + "@typescript-eslint/visitor-keys" "5.59.5" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.59.5": + version "5.59.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.59.5.tgz#15b3eb619bb223302e60413adb0accd29c32bcae" + integrity sha512-sCEHOiw+RbyTii9c3/qN74hYDPNORb8yWCoPLmB7BIflhplJ65u2PBpdRla12e3SSTJ2erRkPjz7ngLHhUegxA== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.59.5" + "@typescript-eslint/types" "5.59.5" + "@typescript-eslint/typescript-estree" "5.59.5" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.59.5": + version "5.59.5" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.5.tgz#ba5b8d6791a13cf9fea6716af1e7626434b29b9b" + integrity sha512-qL+Oz+dbeBRTeyJTIy0eniD3uvqU7x+y1QceBismZ41hd4aBSRh8UAw4pZP0+XzLuPZmx4raNMq/I+59W2lXKA== + dependencies: + "@typescript-eslint/types" "5.59.5" + eslint-visitor-keys "^3.3.0" + +"@walletconnect/core@2.4.10": + version "2.4.10" + resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.4.10.tgz#8975996b5c47d0d11a1187b3793215678c3ea3af" + integrity sha512-3ZVS07NS9+zG+Mw4MOxYhoJHwCSuIOrq+HuhaTLZZ+NswscZ+GwguF2fTsRNgk4jXkMJodaqUFxfPJeCVVcwHQ== + dependencies: + "@walletconnect/heartbeat" "1.2.0" + "@walletconnect/jsonrpc-provider" "1.0.9" + "@walletconnect/jsonrpc-utils" "^1.0.4" + "@walletconnect/jsonrpc-ws-connection" "1.0.10" + "@walletconnect/keyvaluestorage" "^1.0.2" + "@walletconnect/logger" "^2.0.1" + "@walletconnect/relay-api" "^1.0.9" + "@walletconnect/relay-auth" "^1.0.4" + "@walletconnect/safe-json" "^1.0.1" + "@walletconnect/time" "^1.0.2" + "@walletconnect/types" "2.4.10" + "@walletconnect/utils" "2.4.10" + events "^3.3.0" + lodash.isequal "4.5.0" + pino "7.11.0" + uint8arrays "^3.1.0" + +"@walletconnect/crypto@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@walletconnect/crypto/-/crypto-1.0.3.tgz#7b8dd4d7e2884fe3543c7c07aea425eef5ef9dd4" + integrity sha512-+2jdORD7XQs76I2Odgr3wwrtyuLUXD/kprNVsjWRhhhdO9Mt6WqVzOPu0/t7OHSmgal8k7SoBQzUc5hu/8zL/g== + dependencies: + "@walletconnect/encoding" "^1.0.2" + "@walletconnect/environment" "^1.0.1" + "@walletconnect/randombytes" "^1.0.3" + aes-js "^3.1.2" + hash.js "^1.1.7" + tslib "1.14.1" + +"@walletconnect/encoding@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@walletconnect/encoding/-/encoding-1.0.2.tgz#cb3942ad038d6a6bf01158f66773062dd25724da" + integrity sha512-CrwSBrjqJ7rpGQcTL3kU+Ief+Bcuu9PH6JLOb+wM6NITX1GTxR/MfNwnQfhLKK6xpRAyj2/nM04OOH6wS8Imag== + dependencies: + is-typedarray "1.0.0" + tslib "1.14.1" + typedarray-to-buffer "3.1.5" + +"@walletconnect/environment@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/environment/-/environment-1.0.1.tgz#1d7f82f0009ab821a2ba5ad5e5a7b8ae3b214cd7" + integrity sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg== + dependencies: + tslib "1.14.1" + +"@walletconnect/ethereum-provider@~2.4.6": + version "2.4.10" + resolved "https://registry.yarnpkg.com/@walletconnect/ethereum-provider/-/ethereum-provider-2.4.10.tgz#450167cf3fbfb7813189076f13c0c61e324f8c25" + integrity sha512-anD3inbmuIZgWJ7Km5QP6L/hjI8sK/3Q4WA+g8OlyHS2cqO9sPjYdbPUVnzVgwhTDbNDJr2AUNXmvpm2R0hq5Q== + dependencies: + "@walletconnect/jsonrpc-http-connection" "^1.0.4" + "@walletconnect/jsonrpc-provider" "^1.0.6" + "@walletconnect/jsonrpc-types" "^1.0.2" + "@walletconnect/jsonrpc-utils" "^1.0.4" + "@walletconnect/sign-client" "2.4.10" + "@walletconnect/types" "2.4.10" + "@walletconnect/universal-provider" "2.4.10" + "@walletconnect/utils" "2.4.10" + "@web3modal/standalone" "^2.2.0" + events "^3.3.0" + +"@walletconnect/events@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/events/-/events-1.0.1.tgz#2b5f9c7202019e229d7ccae1369a9e86bda7816c" + integrity sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ== + dependencies: + keyvaluestorage-interface "^1.0.0" + tslib "1.14.1" + +"@walletconnect/heartbeat@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@walletconnect/heartbeat/-/heartbeat-1.2.0.tgz#1e87dd234cb72b0587b84f95c4f942f2b4bd0c79" + integrity sha512-0vbzTa/ARrpmMmOD+bQMxPvFYKtOLQZObgZakrYr0aODiMOO71CmPVNV2eAqXnw9rMmcP+z91OybLeIFlwTjjA== + dependencies: + "@walletconnect/events" "^1.0.1" + "@walletconnect/time" "^1.0.2" + chai "^4.3.7" + mocha "^10.2.0" + ts-node "^10.9.1" + tslib "1.14.1" + +"@walletconnect/jsonrpc-http-connection@^1.0.0", "@walletconnect/jsonrpc-http-connection@^1.0.4": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-http-connection/-/jsonrpc-http-connection-1.0.6.tgz#48c41cf3e5ac9add9425420b345615dc438594cd" + integrity sha512-/3zSqDi7JDN06E4qm0NmVYMitngXfh21UWwy8zeJcBeJc+Jcs094EbLsIxtziIIKTCCbT88lWuTjl1ZujxN7cw== + dependencies: + "@walletconnect/jsonrpc-utils" "^1.0.6" + "@walletconnect/safe-json" "^1.0.1" + cross-fetch "^3.1.4" + tslib "1.14.1" + +"@walletconnect/jsonrpc-provider@1.0.9": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.9.tgz#ce5ab64dce6a739110aef204ffeedd668ad343d8" + integrity sha512-8CwmiDW42F+F8Qct13lX2x4lJOsi0mNBtUln3VS6TpWioTaL1VfforC/8ULc3tHXv+SNWwAXn2lCZbDcYhdRcA== + dependencies: + "@walletconnect/jsonrpc-utils" "^1.0.6" + "@walletconnect/safe-json" "^1.0.1" + tslib "1.14.1" + +"@walletconnect/jsonrpc-provider@^1.0.3", "@walletconnect/jsonrpc-provider@^1.0.6": + version "1.0.12" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.12.tgz#965408d99fc889d49c194cd207804282805f45ed" + integrity sha512-6uI2y5281gloZSzICOjk+CVC7CVu0MhtMt2Yzpj05lPb0pzm/bK2oZ2ibxwLerPrqpNt/5bIFVRmoOgPw1mHAQ== + dependencies: + "@walletconnect/jsonrpc-utils" "^1.0.7" + "@walletconnect/safe-json" "^1.0.2" + tslib "1.14.1" + +"@walletconnect/jsonrpc-types@^1.0.1", "@walletconnect/jsonrpc-types@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.2.tgz#b79519f679cd6a5fa4a1bea888f27c1916689a20" + integrity sha512-CZe8tjJX73OWdHjrBHy7HtAapJ2tT0Q3TYhPBhRxi3643lwPIQWC9En45ldY14TZwgSewkbZ0FtGBZK0G7Bbyg== + dependencies: + keyvaluestorage-interface "^1.0.0" + tslib "1.14.1" + +"@walletconnect/jsonrpc-utils@^1.0.3", "@walletconnect/jsonrpc-utils@^1.0.4", "@walletconnect/jsonrpc-utils@^1.0.6", "@walletconnect/jsonrpc-utils@^1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.7.tgz#1812d17c784f1ec0735bf03d0884287f60bfa2ce" + integrity sha512-zJziApzUF/Il4VcwabnaU+0yo1QI4eUkYX99zmCVTHJvZOf2l0zjADf/OpKqWyeNFC3Io56Z/8uJHVtcNVvyFA== + dependencies: + "@walletconnect/environment" "^1.0.1" + "@walletconnect/jsonrpc-types" "^1.0.2" + tslib "1.14.1" + +"@walletconnect/jsonrpc-ws-connection@1.0.10": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-ws-connection/-/jsonrpc-ws-connection-1.0.10.tgz#04e04a7d8c70b27c386a1bdd9ff6511045da3c81" + integrity sha512-/tidvjfCXZuYugjF5fOswsNDPoMo9QRML3DFQ0dfNUarL4f5HGqu8NDGerr2n0+4MOX23GsT6Vv2POSwFbvgGw== + dependencies: + "@walletconnect/jsonrpc-utils" "^1.0.6" + "@walletconnect/safe-json" "^1.0.1" + events "^3.3.0" + tslib "1.14.1" + ws "^7.5.1" + +"@walletconnect/keyvaluestorage@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.0.2.tgz#92f5ca0f54c1a88a093778842ce0c874d86369c8" + integrity sha512-U/nNG+VLWoPFdwwKx0oliT4ziKQCEoQ27L5Hhw8YOFGA2Po9A9pULUYNWhDgHkrb0gYDNt//X7wABcEWWBd3FQ== + dependencies: + safe-json-utils "^1.1.1" + tslib "1.14.1" + +"@walletconnect/legacy-client@^2.0.0-rc.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/legacy-client/-/legacy-client-2.0.0.tgz#9f2c09694789fd4b6c5d68d6423b44bac55aed30" + integrity sha512-v5L7rYk9loVnfvUf0mF+76bUPFaU5/Vh7mzL6/950CD/yoGdzYZ3Kj+L7mkC6HPMEGeQsBP1+sqBuiVGZ/aODA== + dependencies: + "@walletconnect/crypto" "^1.0.3" + "@walletconnect/encoding" "^1.0.2" + "@walletconnect/jsonrpc-utils" "^1.0.4" + "@walletconnect/legacy-types" "^2.0.0" + "@walletconnect/legacy-utils" "^2.0.0" + "@walletconnect/safe-json" "^1.0.1" + "@walletconnect/window-getters" "^1.0.1" + "@walletconnect/window-metadata" "^1.0.1" + detect-browser "^5.3.0" + query-string "^6.13.5" + +"@walletconnect/legacy-modal@^2.0.0-rc.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/legacy-modal/-/legacy-modal-2.0.0.tgz#d0fab01a1337a8f5d88cdb1430cbef2d46072bbf" + integrity sha512-jckNd8lMhm4X7dX9TDdxM3bXKJnaqkRs6K2Mo5j6GmbIF9Eyx40jZ5+q457RVxvM6ciZEDT5s1wBHWdWoOo+9Q== + dependencies: + "@walletconnect/legacy-types" "^2.0.0" + "@walletconnect/legacy-utils" "^2.0.0" + copy-to-clipboard "^3.3.3" + preact "^10.12.0" + qrcode "^1.5.1" + +"@walletconnect/legacy-types@^2.0.0", "@walletconnect/legacy-types@^2.0.0-rc.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/legacy-types/-/legacy-types-2.0.0.tgz#224278ae2874c6a2ca805c2d1d062a511dcf7227" + integrity sha512-sOVrA7HUdbI1OwKyPOQU0/DdvTSVFlsXWpAk2K2WvP2erTkBWPMTJq6cv2BmKdoJ3p6gLApT7sd+jHi3OF71uw== + dependencies: + "@walletconnect/jsonrpc-types" "^1.0.2" + +"@walletconnect/legacy-utils@^2.0.0", "@walletconnect/legacy-utils@^2.0.0-rc.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@walletconnect/legacy-utils/-/legacy-utils-2.0.0.tgz#e3a637c00783f9cd2ae139b640f82223ab78ed9d" + integrity sha512-CPWxSVVXw0kgNCxvU126g4GiV3mzXmC8IPJ15twE46aJ1FX+RHEIfAzFMFz2F2+fEhBxL63A7dwNQKDXorRPcQ== + dependencies: + "@walletconnect/encoding" "^1.0.2" + "@walletconnect/jsonrpc-utils" "^1.0.4" + "@walletconnect/legacy-types" "^2.0.0" + "@walletconnect/safe-json" "^1.0.1" + "@walletconnect/window-getters" "^1.0.1" + "@walletconnect/window-metadata" "^1.0.1" + detect-browser "^5.3.0" + query-string "^6.13.5" + +"@walletconnect/logger@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/logger/-/logger-2.0.1.tgz#7f489b96e9a1ff6bf3e58f0fbd6d69718bf844a8" + integrity sha512-SsTKdsgWm+oDTBeNE/zHxxr5eJfZmE9/5yp/Ku+zJtcTAjELb3DXueWkDXmE9h8uHIbJzIb5wj5lPdzyrjT6hQ== + dependencies: + pino "7.11.0" + tslib "1.14.1" + +"@walletconnect/randombytes@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@walletconnect/randombytes/-/randombytes-1.0.3.tgz#e795e4918367fd1e6a2215e075e64ab93e23985b" + integrity sha512-35lpzxcHFbTN3ABefC9W+uBpNZl1GC4Wpx0ed30gibfO/y9oLdy1NznbV96HARQKSBV9J9M/rrtIvf6a23jfYw== + dependencies: + "@walletconnect/encoding" "^1.0.2" + "@walletconnect/environment" "^1.0.1" + randombytes "^2.1.0" + tslib "1.14.1" + +"@walletconnect/relay-api@^1.0.9": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@walletconnect/relay-api/-/relay-api-1.0.9.tgz#f8c2c3993dddaa9f33ed42197fc9bfebd790ecaf" + integrity sha512-Q3+rylJOqRkO1D9Su0DPE3mmznbAalYapJ9qmzDgK28mYF9alcP3UwG/og5V7l7CFOqzCLi7B8BvcBUrpDj0Rg== + dependencies: + "@walletconnect/jsonrpc-types" "^1.0.2" + tslib "1.14.1" + +"@walletconnect/relay-auth@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz#0b5c55c9aa3b0ef61f526ce679f3ff8a5c4c2c7c" + integrity sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ== + dependencies: + "@stablelib/ed25519" "^1.0.2" + "@stablelib/random" "^1.0.1" + "@walletconnect/safe-json" "^1.0.1" + "@walletconnect/time" "^1.0.2" + tslib "1.14.1" + uint8arrays "^3.0.0" + +"@walletconnect/safe-json@^1.0.1", "@walletconnect/safe-json@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.2.tgz#7237e5ca48046e4476154e503c6d3c914126fa77" + integrity sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA== + dependencies: + tslib "1.14.1" + +"@walletconnect/sign-client@2.4.10": + version "2.4.10" + resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.4.10.tgz#727072fcbf0c1f84c5370155f0feb7e711733ca4" + integrity sha512-8yNpRUVvkoFY5sdj7QbW1+g6QWgP8VLy1xVAqWkjLIiPieMA6IQcOpaEih9Bbq55oTOxjeWO9+E+V8/0bNXVvQ== + dependencies: + "@walletconnect/core" "2.4.10" + "@walletconnect/events" "^1.0.1" + "@walletconnect/heartbeat" "1.2.0" + "@walletconnect/jsonrpc-utils" "^1.0.4" + "@walletconnect/logger" "^2.0.1" + "@walletconnect/time" "^1.0.2" + "@walletconnect/types" "2.4.10" + "@walletconnect/utils" "2.4.10" + events "^3.3.0" + pino "7.11.0" + +"@walletconnect/time@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@walletconnect/time/-/time-1.0.2.tgz#6c5888b835750ecb4299d28eecc5e72c6d336523" + integrity sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g== + dependencies: + tslib "1.14.1" + +"@walletconnect/types@2.4.10": + version "2.4.10" + resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.4.10.tgz#7f85a761b9d65e192d2f510ce858383f19a340f7" + integrity sha512-AvT3ynXXDXty94SadbjGrqqQA8vB1g9AchHZOakCY/Cfo5etpUFG3PfubWMC1FKe2FPk020nLkc2ghjNxHGGtw== + dependencies: + "@walletconnect/events" "^1.0.1" + "@walletconnect/heartbeat" "1.2.0" + "@walletconnect/jsonrpc-types" "^1.0.2" + "@walletconnect/keyvaluestorage" "^1.0.2" + "@walletconnect/logger" "^2.0.1" + events "^3.3.0" + +"@walletconnect/universal-provider@2.4.10": + version "2.4.10" + resolved "https://registry.yarnpkg.com/@walletconnect/universal-provider/-/universal-provider-2.4.10.tgz#24696a2b9267d18a8a84008c5b42c8d5b917e4f0" + integrity sha512-KbRl3ivDGXtycp1qs/p8RvXz0f8VgG8k+NKpD6x9/ibnuuFLRt6UgriLHHCslJ9SSGuGHAeIaWs+kRRDKDNFXQ== + dependencies: + "@walletconnect/jsonrpc-http-connection" "^1.0.4" + "@walletconnect/jsonrpc-provider" "^1.0.6" + "@walletconnect/jsonrpc-types" "^1.0.2" + "@walletconnect/jsonrpc-utils" "^1.0.4" + "@walletconnect/logger" "^2.0.1" + "@walletconnect/sign-client" "2.4.10" + "@walletconnect/types" "2.4.10" + "@walletconnect/utils" "2.4.10" + eip1193-provider "1.0.1" + events "^3.3.0" + pino "7.11.0" + +"@walletconnect/utils@2.4.10": + version "2.4.10" + resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.4.10.tgz#1fbae7973008c06209ccf79797f732e44e97ac1c" + integrity sha512-mg01uaGY+DoT5yMVb7eL9zXdXZLRfkz85b63URa6QyfWD0Jbstmviutc5NU2YzzbIuekT3miL4cwPvi0MRklWA== + dependencies: + "@stablelib/chacha20poly1305" "1.0.1" + "@stablelib/hkdf" "1.0.1" + "@stablelib/random" "^1.0.2" + "@stablelib/sha256" "1.0.1" + "@stablelib/x25519" "^1.0.3" + "@walletconnect/jsonrpc-utils" "^1.0.4" + "@walletconnect/relay-api" "^1.0.9" + "@walletconnect/safe-json" "^1.0.1" + "@walletconnect/time" "^1.0.2" + "@walletconnect/types" "2.4.10" + "@walletconnect/window-getters" "^1.0.1" + "@walletconnect/window-metadata" "^1.0.1" + detect-browser "5.3.0" + query-string "7.1.1" + uint8arrays "^3.1.0" + +"@walletconnect/window-getters@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.1.tgz#f36d1c72558a7f6b87ecc4451fc8bd44f63cbbdc" + integrity sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q== + dependencies: + tslib "1.14.1" + +"@walletconnect/window-metadata@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz#2124f75447b7e989e4e4e1581d55d25bc75f7be5" + integrity sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA== + dependencies: + "@walletconnect/window-getters" "^1.0.1" + tslib "1.14.1" + +"@web3modal/core@2.3.7": + version "2.3.7" + resolved "https://registry.yarnpkg.com/@web3modal/core/-/core-2.3.7.tgz#2c8863489695c3ed4b7b01e416e126cc5c8d18ad" + integrity sha512-ggl9+tkAzz43npj97iTj6p4oQYaklxADQyCKAX7AnMfglZg5bRseMDGnfmpvnjlDn8TI+DGGO6da3ITmYRIDYQ== + dependencies: + buffer "6.0.3" + valtio "1.10.4" + +"@web3modal/standalone@^2.2.0": + version "2.3.7" + resolved "https://registry.yarnpkg.com/@web3modal/standalone/-/standalone-2.3.7.tgz#2536effb3a7c4b9384fa51c43dc67ff3caed0314" + integrity sha512-zgavWcimRVXnLdup2WQ0fFEnBnH+Wwn+k1/XzhwVpdJ//mrExWNYQaXt139RijxGUcux68ExRCyMqm1jkXTq3g== + dependencies: + "@web3modal/core" "2.3.7" + "@web3modal/ui" "2.3.7" + +"@web3modal/ui@2.3.7": + version "2.3.7" + resolved "https://registry.yarnpkg.com/@web3modal/ui/-/ui-2.3.7.tgz#0867ec4262a5a221418acdb571101d05628e8d62" + integrity sha512-mNDXY4ElcvXXixKHZTLcEjKC9zs3O8BD1EtaC8cKIy+RKFyHMpLB1DOQmz77tn91jNjOkrvEryqUwCbsJ7hjfA== + dependencies: + "@web3modal/core" "2.3.7" + lit "2.7.3" + motion "10.15.5" + qrcode "1.5.3" + +JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abitype@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.2.5.tgz#e571ef2ed99db1cae551fffde5bcbcee4e446177" + integrity sha512-t1iiokWYpkrziu4WL2Gb6YdGvaP9ZKs7WnA39TI8TsW2E99GVRgDPW/xOKhzoCdyxOYt550CNYEFluCwGaFHaA== + abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -1298,17 +1907,35 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" +abortcontroller-polyfill@^1.7.3: + version "1.7.5" + resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" + integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== + abstract-logging@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/abstract-logging/-/abstract-logging-2.0.1.tgz#6b0c371df212db7129b57d2e7fcf282b8bf1c839" integrity sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA== +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + acorn-walk@^8.1.1: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^8.4.1: +acorn@^8.4.1, acorn@^8.8.0: version "8.8.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== @@ -1318,6 +1945,20 @@ aes-js@3.0.0: resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== +aes-js@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a" + integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== + +agentkeepalive@^4.2.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255" + integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg== + dependencies: + debug "^4.1.0" + depd "^2.0.0" + humanize-ms "^1.2.1" + ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -1325,6 +1966,16 @@ ajv-formats@^2.1.1: dependencies: ajv "^8.0.0" +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + ajv@^8.0.0, ajv@^8.10.0, ajv@^8.11.0: version "8.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" @@ -1335,6 +1986,38 @@ ajv@^8.0.0, ajv@^8.10.0, ajv@^8.11.0: require-from-string "^2.0.2" uri-js "^4.2.2" +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -1343,25 +2026,47 @@ anymatch@~3.1.2: 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" + integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== + archy@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== -asn1.js@^5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== +async-mutex@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.2.6.tgz#0d7a3deb978bc2b984d5908a2038e1ae2e54ff40" + integrity sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw== dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" + tslib "^2.0.0" asynckit@^0.4.0: version "0.4.0" @@ -1387,21 +2092,20 @@ avvio@^8.2.0: debug "^4.0.0" fastq "^1.6.1" -aws-sdk@^2.922.0: - version "2.1325.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1325.0.tgz#4529ede089ee8db79d6eb04ab46a211bfddbbe5b" - integrity sha512-ztg9HG5aoUHTprY+/eqjqb25E4joCgz+8ToxsP4OSKFQCtaBcF6my03j4e/J2j3fmpPifJnZSPMu4kV7DBj8WA== - dependencies: - buffer "4.9.2" - events "1.1.1" - ieee754 "1.1.13" - jmespath "0.16.0" - querystring "0.2.0" - sax "1.2.1" - url "0.10.3" - util "^0.12.4" - uuid "8.0.0" - xml2js "0.4.19" +axios@^0.21.0: + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +axios@^0.27.0, axios@^0.27.2: + version "0.27.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" + integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== + dependencies: + follow-redirects "^1.14.9" + form-data "^4.0.0" balanced-match@^1.0.0: version "1.0.2" @@ -1420,7 +2124,7 @@ base-x@^4.0.0: resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== -base64-js@^1.0.2, base64-js@^1.3.1: +base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -1430,7 +2134,14 @@ bech32@1.1.4: resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== -bignumber.js@^9.0.1: +bigint-buffer@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/bigint-buffer/-/bigint-buffer-1.1.5.tgz#d038f31c8e4534c1f8d0015209bf34b4fa6dd442" + integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA== + dependencies: + bindings "^1.3.0" + +bignumber.js@^9.0.0, bignumber.js@^9.0.1: version "9.1.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== @@ -1440,6 +2151,18 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +bind-decorator@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/bind-decorator/-/bind-decorator-1.0.11.tgz#e41bc06a1f65dd9cec476c91c5daf3978488252f" + integrity sha512-yzkH0uog6Vv/vQ9+rhSKxecnqGUZHYncg7qS7voz3Q76+TAi1SGiOKk2mlOvusQnFz9Dc4BC/NMkeXu11YgjJg== + +bindings@^1.3.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + bl@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-5.1.0.tgz#183715f678c7188ecef9fe475d90209400624273" @@ -1459,20 +2182,60 @@ bn.js@4.11.6: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== -bn.js@^4.0.0, bn.js@^4.11.9: +bn.js@^4.11.6, bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: +bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.2.0, 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== -bowser@^2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" - integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +body-parser@^1.20.2: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +borsh@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a" + integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA== + dependencies: + bn.js "^5.2.0" + bs58 "^4.0.0" + text-encoding-utf-8 "^1.0.2" brace-expansion@^1.1.7: version "1.1.11" @@ -1482,7 +2245,14 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@~3.0.2: +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== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -1494,6 +2264,11 @@ brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + browserify-aes@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" @@ -1506,7 +2281,7 @@ browserify-aes@^1.2.0: inherits "^2.0.1" safe-buffer "^5.0.1" -bs58@^4.0.0: +bs58@^4.0.0, bs58@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== @@ -1534,21 +2309,22 @@ buffer-reverse@^1.0.1: resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" integrity sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg== +buffer-to-arraybuffer@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" + integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== + +buffer-writer@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" + integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== + buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== -buffer@4.9.2: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -buffer@^6.0.3: +buffer@6.0.3, buffer@^6.0.3, buffer@~6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== @@ -1556,7 +2332,26 @@ buffer@^6.0.3: base64-js "^1.3.1" ieee754 "^1.2.1" -call-bind@^1.0.2: +bufferutil@^4.0.1: + version "4.0.7" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" + integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== + dependencies: + node-gyp-build "^4.3.0" + +busboy@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + +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@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== @@ -1564,7 +2359,48 @@ call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" -chokidar@^3.5.2: +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +chai@^4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" + integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^4.1.2" + get-func-name "^2.0.0" + loupe "^2.3.1" + pathval "^1.1.1" + type-detect "^4.0.5" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== + +chokidar@3.5.3, chokidar@^3.5.2: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -1597,6 +2433,67 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" +cli-highlight@^2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" + integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== + dependencies: + chalk "^4.0.0" + highlight.js "^10.7.1" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^16.0.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clsx@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colorette@^2.0.7: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -1604,16 +2501,68 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +commander@^2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -cookie@^0.5.0: +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +cookie-parser@^1.4.6: + version "1.4.6" + resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.6.tgz#3ac3a7d35a7a03bbc7e365073a26074824214594" + integrity sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA== + dependencies: + cookie "0.4.1" + cookie-signature "1.0.6" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== + +cookie@0.5.0, cookie@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookiejar@^2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" + integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== + +copy-to-clipboard@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" + integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== + dependencies: + toggle-selection "^1.0.6" + +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -1642,18 +2591,66 @@ create-require@^1.1.0: resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -cross-fetch@^3.1.5: +cross-fetch@^3.1.4, cross-fetch@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== dependencies: node-fetch "2.6.7" +cross-spawn@^7.0.0, cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + crypto-js@^3.1.9-1: version "3.3.0" resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== +crypto-js@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf" + integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw== + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +date-fns@^2.29.3: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" + +dateformat@^4.6.3: + version "4.6.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" + integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== + +debug@2.6.9, debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4.3.4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + debug@^3.2.7: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -1661,29 +2658,132 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.0.0, debug@^4.3.1: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decode-uri-component@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== dependencies: - ms "2.1.2" + mimic-response "^1.0.0" + +deep-eql@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== + dependencies: + type-detect "^4.0.0" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +delay@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" + integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== +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== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-browser@5.3.0, detect-browser@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.3.0.tgz#9705ef2bddf46072d0f7265a1fe300e36fe7ceca" + integrity sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w== + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + 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== +dijkstrajs@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz#4c8dbdea1f0f6478bff94d9c49c784d623e4fc23" + integrity sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + dotenv@^16.0.3: version "16.0.3" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== -elliptic@6.5.4, elliptic@^6.5.4: +duplexify@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" + integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== + dependencies: + end-of-stream "^1.4.1" + inherits "^2.0.3" + readable-stream "^3.1.1" + stream-shift "^1.0.0" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +eip1193-provider@1.0.1, eip1193-provider@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/eip1193-provider/-/eip1193-provider-1.0.1.tgz#420d29cf4f6c443e3f32e718fb16fafb250637c3" + integrity sha512-kSuqwQ26d7CzuS/t3yRXo2Su2cVH0QfvyKbr2H7Be7O5YDyIq4hQGCNTo5wRdP07bt+E2R/8nPCzey4ojBHf7g== + dependencies: + "@json-rpc-tools/provider" "^1.5.5" + +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -1696,11 +2796,258 @@ elliptic@6.5.4, elliptic@^6.5.4: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encode-utf8@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + +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== + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + err-code@^3.0.0, err-code@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/err-code/-/err-code-3.0.1.tgz#a444c7b992705f2b120ee320b09972eef331c920" integrity sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA== +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.62" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" + integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + next-tick "^1.1.0" + +es6-iterator@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-promise@^4.0.3, es6-promise@^4.2.8: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== + dependencies: + es6-promise "^4.0.3" + +es6-symbol@^3.1.1, es6-symbol@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-prettier@^8.7.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348" + integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" + integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" + integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== + +eslint@^8.36.0: + version "8.40.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.40.0.tgz#a564cd0099f38542c4e9a2f630fa45bf33bc42a4" + integrity sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + "@eslint/eslintrc" "^2.0.3" + "@eslint/js" "8.40.0" + "@humanwhocodes/config-array" "^0.11.8" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.0" + eslint-visitor-keys "^3.4.1" + espree "^9.5.2" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-sdsl "^4.1.4" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.5.2: + version "9.5.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b" + integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eth-block-tracker@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/eth-block-tracker/-/eth-block-tracker-6.1.0.tgz#0481f97bbb88a100b9d45806fe7e37af741cbefc" + integrity sha512-K9SY8+/xMBi4M5HHTDdxnpEqEEGjbNpzHFqvxyjMZej8InV/B+CkFRKM6W+uvrFJ7m8Zd1E0qUkseU3vdIDFYQ== + dependencies: + "@metamask/safe-event-emitter" "^2.0.0" + "@metamask/utils" "^3.0.1" + json-rpc-random-id "^1.0.1" + pify "^3.0.0" + +eth-json-rpc-filters@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/eth-json-rpc-filters/-/eth-json-rpc-filters-5.1.0.tgz#f0c2aeaec2a45e2dc6ca1b9843d8e85447821427" + integrity sha512-fos+9xmoa1A2Ytsc9eYof17r81BjdJOUcGcgZn4K/tKdCCTb+a8ytEtwlu1op5qsXFDlgGmstTELFrDEc89qEQ== + dependencies: + "@metamask/safe-event-emitter" "^2.0.0" + async-mutex "^0.2.6" + eth-query "^2.1.2" + json-rpc-engine "^6.1.0" + pify "^5.0.0" + +eth-lib@0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" + integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + +eth-query@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/eth-query/-/eth-query-2.1.2.tgz#d6741d9000106b51510c72db92d6365456a6da5e" + integrity sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA== + dependencies: + json-rpc-random-id "^1.0.0" + xtend "^4.0.1" + +eth-rpc-errors@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/eth-rpc-errors/-/eth-rpc-errors-4.0.2.tgz#11bc164e25237a679061ac05b7da7537b673d3b7" + integrity sha512-n+Re6Gu8XGyfFy1it0AwbD1x0MUzspQs0D5UiPs1fFPCr6WAwZM+vbIhXheBFrpgosqN9bs5PqlB4Q61U/QytQ== + dependencies: + fast-safe-stringify "^2.0.6" + +eth-rpc-errors@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eth-rpc-errors/-/eth-rpc-errors-4.0.3.tgz#6ddb6190a4bf360afda82790bb7d9d5e724f423a" + integrity sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg== + dependencies: + fast-safe-stringify "^2.0.6" + ethereum-bloom-filters@^1.0.6: version "1.0.10" resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" @@ -1729,7 +3076,7 @@ ethereum-cryptography@^0.1.3: secp256k1 "^4.0.1" setimmediate "^1.0.5" -ethereumjs-util@^7.1.0: +ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.5: version "7.1.5" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== @@ -1740,18 +3087,7 @@ ethereumjs-util@^7.1.0: ethereum-cryptography "^0.1.3" rlp "^2.2.4" -ethers-aws-kms-signer@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/ethers-aws-kms-signer/-/ethers-aws-kms-signer-1.3.2.tgz#af4e3686f79feff82cca94cf39279fd4c45f7fbc" - integrity sha512-A/xsjCtUGXybpo7imThn4wWcOazHKQi9wnfs9ArPrgp4TmD7dH0bw0FsX71rr9QWsP6RCj0FAGsAxCKNWgEP/g== - dependencies: - asn1.js "^5.4.1" - aws-sdk "^2.922.0" - bn.js "^5.2.0" - debug "^4.3.1" - ethers "^5.4.1" - -ethers@5, ethers@^5.4.1: +ethers@5, ethers@5.7.2, ethers@^5.7.0: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== @@ -1800,15 +3136,20 @@ event-target-shim@^5.0.0: resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== -eventemitter3@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.0.tgz#084eb7f5b5388df1451e63f4c2aafd71b217ccb3" - integrity sha512-riuVbElZZNXLeLEoprfNYoDSwTBRR44X3mnhdI1YcnENpWTCsTTVZ2zFuqQcpoyqPQIUXdiPEU0ECAq0KQRaHg== +eventemitter3@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== -events@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" - integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== +eventemitter3@^4.0.4, eventemitter3@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +eventemitter3@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== events@^3.3.0: version "3.3.0" @@ -1823,18 +3164,65 @@ evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -executioner@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/executioner/-/executioner-2.0.1.tgz#add328e03bc45dd598f358fbb529fc0be0ec6fcd" - integrity sha512-idZAlKsxEZASjaIqP4PQ1txyS1bOcDwWCHy/8p5oMmLGV0XNCQPD6WWAOwJCUVsWItWzAN2BEash5N78PliaIw== +express@^4.17.1, express@^4.18.2: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.7.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== dependencies: - mixly "^1.0.0" + type "^2.7.2" + +eyes@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0" + integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ== fast-content-type-parse@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fast-content-type-parse/-/fast-content-type-parse-1.0.0.tgz#cddce00df7d7efb3727d375a598e4904bfcb751c" integrity sha512-Xbc4XcysUXcsP5aHUU7Nq3OwvHq97C+WnbkeIefpeYLX+ryzFJlU6OStFJhs6Ol0LkUGpcK+wL0JwfM+FCU5IA== +fast-copy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/fast-copy/-/fast-copy-3.0.1.tgz#9e89ef498b8c04c1cd76b33b8e14271658a732aa" + integrity sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA== + fast-decode-uri-component@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz#46f8b6c22b30ff7a81357d4f59abfae938202543" @@ -1845,10 +3233,26 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-json-stringify@^5.0.0: - version "5.6.2" - resolved "https://registry.yarnpkg.com/fast-json-stringify/-/fast-json-stringify-5.6.2.tgz#1ea6c2b8d0f27f297f682d1af039398a603af507" - integrity sha512-F6xkRrXvtGbAiDSEI5Rk7qk2P63Y9kc8bO6Dnsd3Rt6sBNr2QxNFWs0JbKftgiyOfGxnJaRoHe4SizCTqeAyrA== +fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-json-stringify@^5.7.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/fast-json-stringify/-/fast-json-stringify-5.7.0.tgz#b0a04c848fdeb6ecd83440c71a4db35067023bed" + integrity sha512-sBVPTgnAZseLu1Qgj6lUbQ0HfjFhZWXAmpZ5AaSGkyLh5gAXBga/uPJjQPHpDFjC9adWIpdOcCLSDTgrZ7snoQ== dependencies: "@fastify/deepmerge" "^1.0.0" ajv "^8.10.0" @@ -1857,6 +3261,11 @@ fast-json-stringify@^5.0.0: fast-uri "^2.1.0" rfdc "^1.2.0" +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + fast-querystring@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/fast-querystring/-/fast-querystring-1.1.1.tgz#f4c56ef56b1a954880cfd8c01b83f9e1a3d3fda2" @@ -1864,35 +3273,44 @@ fast-querystring@^1.0.0: dependencies: fast-decode-uri-component "^1.0.1" -fast-redact@^3.1.1: +fast-redact@^3.0.0, fast-redact@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.1.2.tgz#d58e69e9084ce9fa4c1a6fa98a3e1ecf5d7839aa" integrity sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw== +fast-safe-stringify@^2.0.6, fast-safe-stringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + +fast-stable-stringify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313" + integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag== + fast-uri@^2.0.0, fast-uri@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-2.2.0.tgz#519a0f849bef714aad10e9753d69d8f758f7445a" integrity sha512-cIusKBIt/R/oI6z/1nyfe2FvGKVTohVRfvkOhvx0nCEW+xf5NoCXjAHcWp93uOUBchzYcsvPlrapAdX1uW+YGg== -fast-xml-parser@4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz#5a98c18238d28a57bbdfa9fe4cda01211fff8f4a" - integrity sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg== - dependencies: - strnum "^1.0.5" +fastify-plugin@^4.0.0, fastify-plugin@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/fastify-plugin/-/fastify-plugin-4.5.0.tgz#8b853923a0bba6ab6921bb8f35b81224e6988d91" + integrity sha512-79ak0JxddO0utAXAQ5ccKhvs6vX2MGyHHMMsmZkBANrq3hXc1CHzvNPHOcvTsVMEPl5I+NT+RO4YKMGehOfSIg== -fastify@^4.13.0: - version "4.13.0" - resolved "https://registry.yarnpkg.com/fastify/-/fastify-4.13.0.tgz#5726d4c63acae1b5e34c7643e233a0be8169009a" - integrity sha512-p9ibdFWH3pZ7KPgmfHPKGUy2W4EWU2TEpwlcu58w4CwGyU3ARFfh2kwq6zpZ5W2ZGVbufi4tZbqHIHAlX/9Z/A== +fastify@^4.15.0: + version "4.17.0" + resolved "https://registry.yarnpkg.com/fastify/-/fastify-4.17.0.tgz#b2c8245e572edef0b02a167d2d411a3c8a46d01a" + integrity sha512-tzuY1tgWJo2Y6qEKwmLhFvACUmr68Io2pqP/sDKU71KRM6A6R3DrCDqLGqANbeLZcKUfdfY58ut35CGqemcTgg== dependencies: - "@fastify/ajv-compiler" "^3.3.1" + "@fastify/ajv-compiler" "^3.5.0" "@fastify/error" "^3.0.0" - "@fastify/fast-json-stringify-compiler" "^4.1.0" + "@fastify/fast-json-stringify-compiler" "^4.3.0" abstract-logging "^2.0.1" avvio "^8.2.0" fast-content-type-parse "^1.0.0" - find-my-way "^7.3.0" + fast-json-stringify "^5.7.0" + find-my-way "^7.6.0" light-my-request "^5.6.1" pino "^8.5.0" process-warning "^2.0.0" @@ -1900,30 +3318,99 @@ fastify@^4.13.0: rfdc "^1.3.0" secure-json-parse "^2.5.0" semver "^7.3.7" - tiny-lru "^10.0.0" + tiny-lru "^11.0.1" -fastq@^1.6.1: +fastq@^1.6.0, fastq@^1.6.1: version "1.15.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: - to-regex-range "^5.0.1" + to-regex-range "^5.0.1" + +filter-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" + integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-my-way@^7.6.0: + version "7.6.2" + resolved "https://registry.yarnpkg.com/find-my-way/-/find-my-way-7.6.2.tgz#4dd40200d3536aeef5c7342b10028e04cf79146c" + integrity sha512-0OjHn1b1nCX3eVbm9ByeEHiscPYiHLfhei1wOUU9qffQkk98wE0Lo8VrVYfSGMgnSnDh86DxedduAnBf4nwUEw== + dependencies: + fast-deep-equal "^3.1.3" + fast-querystring "^1.0.0" + safe-regex2 "^2.0.0" + +find-up@5.0.0, find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" -find-my-way@^7.3.0: - version "7.5.0" - resolved "https://registry.yarnpkg.com/find-my-way/-/find-my-way-7.5.0.tgz#8e5e97e5429b660469ea7c2caecf6a3b733c106d" - integrity sha512-3ehydSBhGcS0TtMA/BYEyMAKi9Sv0MqF8aqiMO5oGBXyCcSlyEJyfGWsbNxAx7BekTNWUwD1ttLJLURni2vmJg== +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: - fast-deep-equal "^3.1.3" - fast-querystring "^1.0.0" - safe-regex2 "^2.0.0" + flatted "^3.1.0" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +follow-redirects@^1.14.0, follow-redirects@^1.14.9: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== for-each@^0.3.3: version "0.3.3" @@ -1932,6 +3419,14 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -1946,21 +3441,36 @@ forwarded@0.2.0: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +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.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -fulcon@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/fulcon/-/fulcon-1.0.2.tgz#8a4dfda4c73fcd9cc62a79d5045c392b45547320" - integrity sha512-vYwUBqbdo9XK0NmN7cFmURmy2T1YHpEsTCbxGO3aErxx6a0Z/HkWXcqcPkk7yOuJ74mSAHGWGBSBBd6v3GKebA== - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== + get-intrinsic@^1.0.2, get-intrinsic@^1.1.3: version "1.2.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" @@ -1970,13 +3480,93 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.3: has "^1.0.3" has-symbols "^1.0.3" -glob-parent@~5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^10.0.0: + version "10.2.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.2.2.tgz#ce2468727de7e035e8ecf684669dc74d0526ab75" + integrity sha512-Xsa0BcxIC6th9UwNjZkhrMtNo/MnyRL8jGCP+uEwhA5oFOCY1f2s1/oNKY47xQ0Bg5nkjsfAEIej1VeH62bDDQ== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.0.3" + minimatch "^9.0.0" + minipass "^5.0.0" + path-scurry "^1.7.0" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.0.0, glob@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +global@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +globals@^13.19.0: + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + dependencies: + type-fest "^0.20.2" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -1984,6 +3574,11 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + hamt-sharding@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/hamt-sharding/-/hamt-sharding-2.0.1.tgz#f45686d0339e74b03b233bee1bde9587727129b6" @@ -1997,6 +3592,11 @@ has-flag@^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-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" @@ -2033,6 +3633,29 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: inherits "^2.0.3" minimalistic-assert "^1.0.1" +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +help-me@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/help-me/-/help-me-4.2.0.tgz#50712bfd799ff1854ae1d312c36eafcea85b0563" + integrity sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA== + dependencies: + glob "^8.0.0" + readable-stream "^3.6.0" + +hey-listen@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" + integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== + +highlight.js@^10.7.1: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -2042,12 +3665,47 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -ieee754@1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== +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== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" + integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== + +http-status-codes@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-2.2.0.tgz#bb2efe63d941dfc2be18e15f703da525169622be" + integrity sha512-feERVo9iWxvnejp3SEfm/+oNG517npqL2/PIA8ORjyOZjGC7TwCRQsZylciLS64i6pJ0wRYz3rkXLRwbtFa8Ng== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" -ieee754@^1.1.4, ieee754@^1.2.1: +husky@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" + integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +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== @@ -2057,23 +3715,42 @@ ignore-by-default@^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== +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== -inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, 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== -install-peers@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/install-peers/-/install-peers-1.0.4.tgz#0fcfe18d223a72bb39ddeca09394ce50e3305c79" - integrity sha512-0POFG2zRn/rt0uO1tUekCDhq6t6l3HDjxR42+Hcbjmj75Gv4yuqEfMe63HC76piO1lsctAp/cQW+Ny+i/SxTlg== - dependencies: - executioner "^2.0.1" - interface-ipld-format@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/interface-ipld-format/-/interface-ipld-format-1.0.1.tgz#bee39c70c584a033e186ff057a2be89f215963e3" @@ -2154,6 +3831,16 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +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-function@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + is-generator-function@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" @@ -2161,7 +3848,7 @@ is-generator-function@^1.0.7: dependencies: has-tostringtag "^1.0.0" -is-glob@^4.0.1, is-glob@~4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -2178,6 +3865,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + is-plain-obj@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" @@ -2194,10 +3886,25 @@ is-typed-array@^1.1.10, is-typed-array@^1.1.3: gopd "^1.0.1" has-tostringtag "^1.0.0" -isarray@^1.0.0: +is-typedarray@1.0.0, is-typedarray@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isomorphic-ws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" + integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== it-all@^1.0.5: version "1.0.6" @@ -2221,22 +3928,104 @@ it-parallel-batch@^1.0.9: dependencies: it-batch "^1.0.9" -jmespath@0.16.0: - version "0.16.0" - resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" - integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw== +jackspeak@^2.0.3: + version "2.2.0" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.0.tgz#497cbaedc902ec3f31d5d61be804d2364ff9ddad" + integrity sha512-r5XBrqIJfwRIjRt/Xr5fv9Wh09qyhHfKnYddDlpM+ibRR20qrYActpCAgU6U+d53EOEjzkvxPMVHSlgR7leXrQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jayson@^3.4.4: + version "3.7.0" + resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.7.0.tgz#b735b12d06d348639ae8230d7a1e2916cb078f25" + integrity sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ== + dependencies: + "@types/connect" "^3.4.33" + "@types/node" "^12.12.54" + "@types/ws" "^7.4.4" + JSONStream "^1.3.5" + commander "^2.20.3" + delay "^5.0.0" + es6-promisify "^5.0.0" + eyes "^0.1.8" + isomorphic-ws "^4.0.1" + json-stringify-safe "^5.0.1" + lodash "^4.17.20" + uuid "^8.3.2" + ws "^7.4.5" + +joycon@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" + integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== + +js-sdsl@^4.1.4: + version "4.4.0" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.0.tgz#8b437dbe642daa95760400b602378ed8ffea8430" + integrity sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg== js-sha3@0.8.0, js-sha3@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== +js-yaml@4.1.0, js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-rpc-engine@6.1.0, json-rpc-engine@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-6.1.0.tgz#bf5ff7d029e1c1bf20cb6c0e9f348dcd8be5a393" + integrity sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ== + dependencies: + "@metamask/safe-event-emitter" "^2.0.0" + eth-rpc-errors "^4.0.2" + +json-rpc-random-id@^1.0.0, json-rpc-random-id@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8" + integrity sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA== + +json-schema-resolver@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/json-schema-resolver/-/json-schema-resolver-2.0.0.tgz#d17fdf53560e6bc9af084b930fee27f6ce4a03b6" + integrity sha512-pJ4XLQP4Q9HTxl6RVDLJ8Cyh1uitSs0CzDBAz1uoJ4sRD/Bk7cFSXL1FUXDW3zJ7YnfliJx6eu8Jn283bpZ4Yg== + dependencies: + debug "^4.1.1" + rfdc "^1.1.4" + uri-js "^4.2.2" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + json-schema-traverse@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -keccak@^3.0.0: +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +keccak@^3.0.0, keccak@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.3.tgz#4bc35ad917be1ef54ff246f904c2bbbf9ac61276" integrity sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ== @@ -2245,6 +4034,19 @@ keccak@^3.0.0: node-gyp-build "^4.2.0" readable-stream "^3.6.0" +keyvaluestorage-interface@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz#13ebdf71f5284ad54be94bd1ad9ed79adad515ff" + integrity sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + lie@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" @@ -2261,18 +4063,87 @@ light-my-request@^5.6.1: process-warning "^2.0.0" set-cookie-parser "^2.4.1" -localforage@^1.10.0: +lit-element@^3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/lit-element/-/lit-element-3.3.2.tgz#9913bf220b85065f0e5f1bb8878cc44f36b50cfa" + integrity sha512-xXAeVWKGr4/njq0rGC9dethMnYCq5hpKYrgQZYTzawt9YQhMiXfD+T1RgrdY3NamOxwq2aXlb0vOI6e29CKgVQ== + dependencies: + "@lit-labs/ssr-dom-shim" "^1.1.0" + "@lit/reactive-element" "^1.3.0" + lit-html "^2.7.0" + +lit-html@^2.7.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/lit-html/-/lit-html-2.7.3.tgz#903bfa61f9d3296a0ec94128695e452beb9b1a3a" + integrity sha512-9DyLzcn/kbRGowz2vFmSANFbRZTxYUgYYFqzie89w6GLpPUiBCDHfcdeRUV/k3Q2ueYxNjfv46yPCtKAEAPOVw== + dependencies: + "@types/trusted-types" "^2.0.2" + +lit@2.7.3: + version "2.7.3" + resolved "https://registry.yarnpkg.com/lit/-/lit-2.7.3.tgz#7f7920dbaba12828d359ca3439cd6f73619061da" + integrity sha512-0a+u+vVbmgSfPu+fyvqjMPBX0Kwbyj9QOv9MbQFZhWGlV2cyk3lEwgfUQgYN+i/lx++1Z3wZknSIp3QCKxHLyg== + dependencies: + "@lit/reactive-element" "^1.6.0" + lit-element "^3.3.0" + lit-html "^2.7.0" + +localforage@^1.7.4: version "1.10.0" resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4" integrity sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg== dependencies: lie "3.1.1" +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.isequal@4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash@^4.17.20: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + long@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== +loupe@^2.3.1: + version "2.3.6" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" + integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== + dependencies: + get-func-name "^2.0.0" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -2280,6 +4151,21 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru-cache@^9.0.0: + version "9.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.1.tgz#c58a93de58630b688de39ad04ef02ef26f1902f1" + integrity sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A== + +magic-sdk@^13.6.2: + version "13.6.2" + resolved "https://registry.yarnpkg.com/magic-sdk/-/magic-sdk-13.6.2.tgz#68766fd9d1805332d2a00e5da1bd30fce251a6ac" + integrity sha512-ZjIZM2gqaxxOR+ZAyKVw50akjfdyo0q5hZzrCMiqyCqh4BXulU7yqHgUa/5/nJ+0/4xBgUejoOcDEm+UdmzLjA== + dependencies: + "@magic-sdk/commons" "^9.6.2" + "@magic-sdk/provider" "^13.6.2" + "@magic-sdk/types" "^11.6.2" + localforage "^1.7.4" + make-error@^1.1.1: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" @@ -2294,6 +4180,16 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + merge-options@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-3.0.4.tgz#84709c2aa2a4b24c1981f66c179fe5565cc6dbb7" @@ -2301,6 +4197,11 @@ merge-options@^3.0.4: dependencies: is-plain-obj "^2.1.0" +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + merkletreejs@^0.2.24: version "0.2.32" resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.2.32.tgz#cf1c0760e2904e4a1cc269108d6009459fd06223" @@ -2312,18 +4213,48 @@ merkletreejs@^0.2.24: treeify "^1.1.0" web3-utils "^1.3.4" +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12: +mime-types@^2.1.12, 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" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== + dependencies: + dom-walk "^0.1.0" + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -2334,31 +4265,106 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -minimatch@^3.1.2: +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimist@^1.2.5: +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.0.tgz#bfc8e88a1c40ffd40c172ddac3decb8451503b56" + integrity sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -mixly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mixly/-/mixly-1.0.0.tgz#9b5a2e1f63e6dfba0d30e6797ffae62ab1dc24ef" - integrity sha512-ks+xIMVeIDwuYK4LnOMXTfmiEI8oo3tFNFirpHd60C4r2H0wMwKN5/qHCrFBKFK+BYx2Gp7qs+evUJw7QO9D2w== - dependencies: - fulcon "^1.0.1" +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +mkdirp@^2.1.3: + version "2.1.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" + integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== + +mnemonist@0.39.5: + version "0.39.5" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.39.5.tgz#5850d9b30d1b2bc57cc8787e5caa40f6c3420477" + integrity sha512-FPUtkhtJ0efmEFGpU14x7jGbTB+s18LrzRL2KgoWz9YvcY3cPomz8tih01GbHwnGk/OmkOKfqd/RAQoc8Lm7DQ== + dependencies: + obliterator "^2.0.1" + +mocha@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" + integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== + dependencies: + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + nanoid "3.3.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +motion@10.15.5: + version "10.15.5" + resolved "https://registry.yarnpkg.com/motion/-/motion-10.15.5.tgz#d336ddbdd37bc28bb99fbb243fe309df6c685ad6" + integrity sha512-ejP6KioN4pigTGxL93APzOnvtLklParL59UQB2T3HWXQBxFcIp5/7YXFmkgiA6pNKKzjvnLhnonRBN5iSFMnNw== + dependencies: + "@motionone/animation" "^10.15.1" + "@motionone/dom" "^10.15.5" + "@motionone/svelte" "^10.15.5" + "@motionone/types" "^10.15.1" + "@motionone/utils" "^10.15.1" + "@motionone/vue" "^10.15.5" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -2378,6 +4384,11 @@ multicodec@^3.0.1: uint8arrays "^3.0.0" varint "^6.0.0" +multiformats@^11.0.2: + version "11.0.2" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-11.0.2.tgz#b14735efc42cd8581e73895e66bebb9752151b60" + integrity sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg== + multiformats@^9.4.2: version "9.9.0" resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" @@ -2409,6 +4420,40 @@ murmurhash3js-revisited@^3.0.0: resolved "https://registry.yarnpkg.com/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.0.tgz#6bd36e25de8f73394222adc6e41fa3fac08a5869" integrity sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g== +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +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== + +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + node-addon-api@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" @@ -2421,22 +4466,22 @@ node-fetch@2.6.7: dependencies: whatwg-url "^5.0.0" -node-fetch@^2.6.1: - version "2.6.9" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" - integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== +node-fetch@^2.6.1, node-fetch@^2.6.7: + version "2.6.11" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25" + integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== dependencies: whatwg-url "^5.0.0" -node-gyp-build@^4.2.0: +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: version "4.6.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== -nodemon@^2.0.20: - version "2.0.20" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.20.tgz#e3537de768a492e8d74da5c5813cb0c7486fc701" - integrity sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw== +nodemon@^2.0.21: + version "2.0.22" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258" + integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== dependencies: chokidar "^3.5.2" debug "^3.2.7" @@ -2469,11 +4514,179 @@ number-to-bn@1.7.0: bn.js "4.11.6" strip-hex-prefix "1.0.0" +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +obliterator@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" + integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== + +oboe@2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" + integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== + dependencies: + http-https "^1.0.0" + +on-exit-leak-free@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz#b39c9e3bf7690d890f4861558b0d7b90a442d209" + integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== + on-exit-leak-free@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz#5c703c968f7e7f851885f6459bf8a8a57edc9cc4" integrity sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w== +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.1, 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== + dependencies: + wrappy "1" + +openapi-types@^12.0.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/openapi-types/-/openapi-types-12.1.0.tgz#bd01acc937b73c9f6db2ac2031bf0231e21ebff0" + integrity sha512-XpeCy01X6L5EpP+6Hc3jWN7rMZJ+/k1lwki/kTmWzbVhdPie3jd5O2ZtedEx8Yp58icJ0osVldLMrTB/zslQXA== + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +packet-reader@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" + integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-headers@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" + integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== + +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +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== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-scurry@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.7.0.tgz#99c741a2cfbce782294a39994d63748b5a24f6db" + integrity sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg== + dependencies: + lru-cache "^9.0.0" + minipass "^5.0.0" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + pbkdf2@^3.0.17: version "3.1.2" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" @@ -2485,12 +4698,73 @@ pbkdf2@^3.0.17: safe-buffer "^5.0.1" sha.js "^2.4.8" -picomatch@^2.0.4, picomatch@^2.2.1: +pg-connection-string@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.5.0.tgz#538cadd0f7e603fc09a12590f3b8a452c2c0cf34" + integrity sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ== + +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.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.0.tgz#3190df3e4747a0d23e5e9e8045bcd99bda0a712e" + integrity sha512-clFRf2ksqd+F497kWFyM21tMjeikn60oGDmqMT8UBrynEwVEX/5R5xd2sdvdo1cZCFlguORNpVuqxIj+aK4cfQ== + +pg-protocol@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.0.tgz#4c91613c0315349363af2084608db843502f8833" + integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q== + +pg-types@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" + integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== + dependencies: + pg-int8 "1.0.1" + postgres-array "~2.0.0" + postgres-bytea "~1.0.0" + postgres-date "~1.0.4" + postgres-interval "^1.1.0" + +pg@^8.10.0: + version "8.10.0" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.10.0.tgz#5b8379c9b4a36451d110fc8cd98fc325fe62ad24" + integrity sha512-ke7o7qSTMb47iwzOSaZMfeR7xToFdkE71ifIipOAAaLIM0DYzfOAXlgFFmYUIE2BcJtvnVlGCID84ZzCegE8CQ== + dependencies: + buffer-writer "2.0.0" + packet-reader "1.0.0" + pg-connection-string "^2.5.0" + pg-pool "^3.6.0" + pg-protocol "^1.6.0" + pg-types "^2.1.0" + pgpass "1.x" + +pgpass@1.x: + 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, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pino-abstract-transport@v1.0.0: +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + +pino-abstract-transport@^1.0.0, pino-abstract-transport@v1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz#cc0d6955fffcadb91b7b49ef220a6cc111d48bb3" integrity sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA== @@ -2498,15 +4772,65 @@ pino-abstract-transport@v1.0.0: readable-stream "^4.0.0" split2 "^4.0.0" +pino-abstract-transport@v0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz#4b54348d8f73713bfd14e3dc44228739aa13d9c0" + integrity sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ== + dependencies: + duplexify "^4.1.2" + split2 "^4.0.0" + +pino-pretty@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-10.0.0.tgz#fd2f307ee897289f63d09b0b804ac2ecc9a18516" + integrity sha512-zKFjYXBzLaLTEAN1ayKpHXtL5UeRQC7R3lvhKe7fWs7hIVEjKGG/qIXwQt9HmeUp71ogUd/YcW+LmMwRp4KT6Q== + dependencies: + colorette "^2.0.7" + dateformat "^4.6.3" + fast-copy "^3.0.0" + fast-safe-stringify "^2.1.1" + help-me "^4.0.1" + joycon "^3.1.1" + minimist "^1.2.6" + on-exit-leak-free "^2.1.0" + pino-abstract-transport "^1.0.0" + pump "^3.0.0" + readable-stream "^4.0.0" + secure-json-parse "^2.4.0" + sonic-boom "^3.0.0" + strip-json-comments "^3.1.1" + +pino-std-serializers@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz#1791ccd2539c091ae49ce9993205e2cd5dbba1e2" + integrity sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== + pino-std-serializers@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-6.1.0.tgz#307490fd426eefc95e06067e85d8558603e8e844" - integrity sha512-KO0m2f1HkrPe9S0ldjx7za9BJjeHqBku5Ch8JyxETxT8dEFGz1PwgrHaOQupVYitpzbFSYm7nnljxD8dik2c+g== + version "6.2.1" + resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-6.2.1.tgz#369f4ae2a19eb6d769ddf2c88a2164b76879a284" + integrity sha512-wHuWB+CvSVb2XqXM0W/WOYUkVSPbiJb9S5fNB7TBhd8s892Xq910bRxwHtC4l71hgztObTjXL6ZheZXFjhDrDQ== + +pino@7.11.0: + version "7.11.0" + resolved "https://registry.yarnpkg.com/pino/-/pino-7.11.0.tgz#0f0ea5c4683dc91388081d44bff10c83125066f6" + integrity sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg== + dependencies: + atomic-sleep "^1.0.0" + fast-redact "^3.0.0" + on-exit-leak-free "^0.2.0" + pino-abstract-transport v0.5.0 + pino-std-serializers "^4.0.0" + process-warning "^1.0.0" + quick-format-unescaped "^4.0.3" + real-require "^0.1.0" + safe-stable-stringify "^2.1.0" + sonic-boom "^2.2.1" + thread-stream "^0.15.1" pino@^8.5.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/pino/-/pino-8.11.0.tgz#2a91f454106b13e708a66c74ebc1c2ab7ab38498" - integrity sha512-Z2eKSvlrl2rH8p5eveNUnTdd4AjJk8tAsLkHYZQKGHP4WTh2Gi1cOSOs3eWPqaj+niS3gj4UkoreoaWgF3ZWYg== + version "8.14.1" + resolved "https://registry.yarnpkg.com/pino/-/pino-8.14.1.tgz#bb38dcda8b500dd90c1193b6c9171eb777a47ac8" + integrity sha512-8LYNv7BKWXSfS+k6oEc6occy5La+q2sPwU3q2ljTX5AZk7v+5kND2o5W794FyRaqha6DJajmkNRsWtPpFyMUdw== dependencies: atomic-sleep "^1.0.0" fast-redact "^3.1.1" @@ -2520,17 +4844,65 @@ pino@^8.5.0: sonic-boom "^3.1.0" thread-stream "^2.0.0" -prisma@^4.11.0: - version "4.11.0" - resolved "https://registry.yarnpkg.com/prisma/-/prisma-4.11.0.tgz#9695ba4129a43eab3e76b5f7a033c6c020377725" - integrity sha512-4zZmBXssPUEiX+GeL0MUq/Yyie4ltiKmGu7jCJFnYMamNrrulTBc+D+QwAQSJ01tyzeGHlD13kOnqPwRipnlNw== +pngjs@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" + integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== + +postgres-array@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" + integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== + +postgres-bytea@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" + integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== + +postgres-date@~1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" + integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== + +postgres-interval@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" + integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== + dependencies: + xtend "^4.0.0" + +posthog-node@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/posthog-node/-/posthog-node-3.1.1.tgz#f92c44a871552c9bfb98bf4cc8fd326d36af6cbd" + integrity sha512-OUSYcnLHbzvY/dxNsbUGoYuTZz5XNx48BkfiCkOIJZMFvot5VPQ0KWEjX+kzYxEwHeXbjW9plqsOVcYCYfidgg== dependencies: - "@prisma/engines" "4.11.0" + axios "^0.27.0" + rusha "^0.8.14" + +preact@^10.12.0, preact@^10.5.9: + version "10.13.2" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.13.2.tgz#2c40c73d57248b57234c4ae6cd9ab9d8186ebc0a" + integrity sha512-q44QFLhOhty2Bd0Y46fnYW0gD/cbVM9dUVtNTDKPcdXSMA7jfY+Jpd6rk3GB0lcQss0z5s/6CmVP0Z/hV+g6pw== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier@^2.8.7: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +process-warning@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616" + integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== process-warning@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-2.1.0.tgz#1e60e3bfe8183033bbc1e702c2da74f099422d1a" - integrity sha512-9C20RLxrZU/rFnxWncDkuF6O999NdIf3E1ws4B0ZeY3sRVPzWBMsYDE2lxjxhiXxg464cQTgKUGm8/i6y2YGXg== + version "2.2.0" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-2.2.0.tgz#008ec76b579820a8e5c35d81960525ca64feb626" + integrity sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg== process@^0.11.10: version "0.11.10" @@ -2556,7 +4928,7 @@ protobufjs@^6.10.2: "@types/node" ">=13.7.0" long "^4.0.0" -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== @@ -2564,25 +4936,86 @@ proxy-addr@^2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-compare@2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/proxy-compare/-/proxy-compare-2.5.0.tgz#0387c5e4d283ba9b1c0353bb20def4449b06bbd2" + integrity sha512-f1us0OsVAJ3tdIMXGQx2lmseYS4YXe4W+sKF5g5ww/jV+5ogMadPt+sIZ+88Ga9kvMJsrRNWzCrKPpr6pMWYbA== + 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== -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" punycode@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== +qrcode@1.5.3, qrcode@^1.5.1: + version "1.5.3" + resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.3.tgz#03afa80912c0dccf12bc93f615a535aad1066170" + integrity sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg== + dependencies: + dijkstrajs "^1.0.1" + encode-utf8 "^1.0.3" + pngjs "^5.0.0" + yargs "^15.3.1" + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +qs@^6.10.3: + version "6.11.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.1.tgz#6c29dff97f0c0060765911ba65cbc9764186109f" + integrity sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ== + dependencies: + side-channel "^1.0.4" + +query-string@7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.1.tgz#754620669db978625a90f635f12617c271a088e1" + integrity sha512-MplouLRDHBZSG9z7fpuAAcI7aAYjDLhtsiVZsevsfaHWDS2IDdORKbSd1kWUA+V4zyva/HZoSfpwnYMMQDhb0w== + dependencies: + decode-uri-component "^0.2.0" + filter-obj "^1.1.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +query-string@^6.13.5: + version "6.14.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" + integrity sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw== + dependencies: + decode-uri-component "^0.2.0" + filter-obj "^1.1.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quick-format-unescaped@^4.0.3: version "4.0.4" @@ -2608,19 +5041,44 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.1.tgz#f9f9b5f536920253b3d26e7660e7da4ccff9bb62" - integrity sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ== +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== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" util-deprecate "^1.0.1" readable-stream@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.3.0.tgz#0914d0c72db03b316c9733bb3461d64a3cc50cba" - integrity sha512-MuEnA0lbSi7JS8XM+WNJlWZkHAAdm7gETHdFK//Q/mChGyj2akEFtdLZh32jSdkWGbRwCW9pn6g3LWDdDeZnBQ== + version "4.4.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.0.tgz#55ce132d60a988c460d75c631e9ccf6a7229b468" + integrity sha512-kDMOq0qLtxV9f/SQv522h8cxZBqNZXuXNyjyezmfAAuribMyVXziljpQ/uQhfE1XLg2/TLTW2DsnoE4VAi/krg== dependencies: abort-controller "^3.0.0" buffer "^6.0.3" @@ -2634,16 +5092,46 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +real-require@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.1.0.tgz#736ac214caa20632847b7ca8c1056a0767df9381" + integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== + real-require@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== +reflect-metadata@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +require-directory@^2.1.1: + version "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== + require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + ret@~0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/ret/-/ret-0.2.2.tgz#b6861782a1f4762dce43402a71eb7a283f44573c" @@ -2654,11 +5142,25 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rfdc@^1.2.0, rfdc@^1.3.0: +rfdc@^1.1.4, rfdc@^1.2.0, rfdc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rimraf@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.0.tgz#5bda14e410d7e4dd522154891395802ce032c2cb" + integrity sha512-Jf9llaP+RvaEVS5nPShYFhtXIrb3LRKP281ib3So0KkeZKo2wIKyq0Re7TOSwanasA423PSr6CCIL4bP6T040g== + dependencies: + glob "^10.0.0" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -2674,11 +5176,48 @@ rlp@^2.2.4: dependencies: bn.js "^5.2.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +rpc-websockets@^7.5.1: + version "7.5.1" + resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.5.1.tgz#e0a05d525a97e7efc31a0617f093a13a2e10c401" + integrity sha512-kGFkeTsmd37pHPMaHIgN1LVKXMi0JD782v4Ds9ZKtLlwdTKjn+CxM9A9/gLT2LaOuEcEFGL98h1QWQtlOIdW0w== + dependencies: + "@babel/runtime" "^7.17.2" + eventemitter3 "^4.0.7" + uuid "^8.3.2" + ws "^8.5.0" + optionalDependencies: + bufferutil "^4.0.1" + utf-8-validate "^5.0.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rusha@^0.8.14: + version "0.8.14" + resolved "https://registry.yarnpkg.com/rusha/-/rusha-0.8.14.tgz#a977d0de9428406138b7bb90d3de5dcd024e2f68" + integrity sha512-cLgakCUf6PedEu15t8kbsjnwIFFR2D4RfL+W3iWFJ4iac7z4B0ZI8fxy4R3J956kAI68HclCFGL8MPoUVC3qVA== + +rxjs@^6.6.3: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-json-utils@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/safe-json-utils/-/safe-json-utils-1.1.1.tgz#0e883874467d95ab914c3f511096b89bfb3e63b1" + integrity sha512-SAJWGKDs50tAbiDXLf89PDwt9XYkWyANFWVzn4dTXl5QyI8t2o/bW5/OJl3lvc2WVU4MEpTo9Yz5NVFNsp+OJQ== + safe-regex2@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/safe-regex2/-/safe-regex2-2.0.0.tgz#b287524c397c7a2994470367e0185e1916b1f5b9" @@ -2686,26 +5225,16 @@ safe-regex2@^2.0.0: dependencies: ret "~0.2.0" -safe-stable-stringify@^2.3.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.2.tgz#ec7b037768098bf65310d1d64370de0dc02353aa" - integrity sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA== +safe-stable-stringify@^2.1.0, safe-stable-stringify@^2.3.1: + version "2.4.3" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" + integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== -safer-buffer@^2.1.0: +"safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" - integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== - -sax@>=0.6.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - scrypt-js@3.0.1, scrypt-js@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" @@ -2720,7 +5249,7 @@ secp256k1@^4.0.1: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" -secure-json-parse@^2.5.0: +secure-json-parse@^2.4.0, secure-json-parse@^2.5.0: version "2.7.0" resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== @@ -2730,10 +5259,10 @@ semver@^5.7.1: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^7.3.7: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== +semver@^7.3.7, semver@^7.3.8: + version "7.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" + integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== dependencies: lru-cache "^6.0.0" @@ -2742,17 +5271,63 @@ semver@~7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + set-cookie-parser@^2.4.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz#ddd3e9a566b0e8e0862aca974a6ac0e01349430b" - integrity sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ== + version "2.6.0" + resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51" + integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== -sha.js@^2.4.0, sha.js@^2.4.8: +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== @@ -2760,6 +5335,46 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.1.tgz#96a61033896120ec9335d96851d902cc98f0ba2a" + integrity sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^2.7.0: + version "2.8.2" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.2.tgz#5708fb0919d440657326cd5fe7d2599d07705019" + integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + simple-update-notifier@^1.0.7: version "1.1.0" resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" @@ -2767,10 +5382,22 @@ simple-update-notifier@^1.0.7: dependencies: semver "~7.0.0" -sonic-boom@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.2.1.tgz#972ceab831b5840a08a002fa95a672008bda1c38" - integrity sha512-iITeTHxy3B9FGu8aVdiDXUVAcHMF9Ss0cCsAOo2HfCrmVGT3/DT5oYaeu0M/YKZDlKTvChEyPq0zI9Hf33EX6A== +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +sonic-boom@^2.2.1: + version "2.8.0" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611" + integrity sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg== + dependencies: + atomic-sleep "^1.0.0" + +sonic-boom@^3.0.0, sonic-boom@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.3.0.tgz#cffab6dafee3b2bcb88d08d589394198bee1838c" + integrity sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g== dependencies: atomic-sleep "^1.0.0" @@ -2779,16 +5406,72 @@ sparse-array@^1.3.1: resolved "https://registry.yarnpkg.com/sparse-array/-/sparse-array-1.3.2.tgz#0e1a8b71706d356bc916fe754ff496d450ec20b0" integrity sha512-ZT711fePGn3+kQyLuv1fpd3rNSkNF8vd5Kv2D+qnOANeyKs3fx6bUMGWRPvgTTcYV64QMqZKZwcuaQSP3AZ0tg== -split2@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.1.0.tgz#101907a24370f85bb782f08adaabe4e281ecf809" - integrity sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ== +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + +split2@^4.0.0, split2@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== stable@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== +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== + +stream-browserify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" + integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== + dependencies: + inherits "~2.0.4" + readable-stream "^3.5.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== + +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== + +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -2796,6 +5479,20 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + strip-hex-prefix@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" @@ -2803,10 +5500,27 @@ strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed "1.0.0" -strnum@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" - integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +superstruct@^0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b" + integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ== + +superstruct@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-1.0.3.tgz#de626a5b49c6641ff4d37da3c7598e7a87697046" + integrity sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg== + +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" supports-color@^5.5.0: version "5.5.0" @@ -2815,6 +5529,44 @@ supports-color@^5.5.0: dependencies: has-flag "^3.0.0" +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +text-encoding-utf-8@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" + integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +thread-stream@^0.15.1: + version "0.15.2" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-0.15.2.tgz#fb95ad87d2f1e28f07116eb23d85aba3bc0425f4" + integrity sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA== + dependencies: + real-require "^0.1.0" + thread-stream@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.3.0.tgz#4fc07fb39eff32ae7bad803cb7dd9598349fed33" @@ -2822,15 +5574,25 @@ thread-stream@^2.0.0: dependencies: real-require "^0.2.0" +"through@>=2.2.7 <3": + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== + tiny-invariant@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== -tiny-lru@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/tiny-lru/-/tiny-lru-10.0.1.tgz#aaf5d22207e641ed1b176ac2e616d6cc2fc9ef66" - integrity sha512-Vst+6kEsWvb17Zpz14sRJV/f8bUWKhqm6Dc+v08iShmIJ/WxqWytHzCTd6m88pS33rE2zpX34TRmOpAJPloNCA== +tiny-lru@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/tiny-lru/-/tiny-lru-11.0.1.tgz#629d6ddd88bd03c0929722680167f1feadf576f2" + integrity sha512-iNgFugVuQgBKrqeO/mpiTTgmBsTP0WL6yeuLfLs/Ctf0pI/ixGqIRm8sDCwMcXGe9WWvt2sGXI5mNqZbValmJg== to-regex-range@^5.0.1: version "5.0.1" @@ -2839,6 +5601,16 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +toggle-selection@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" + integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== + +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.0" resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" @@ -2875,25 +5647,95 @@ ts-node@^10.9.1: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tslib@^1.11.1: +tslib@1.14.1, tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.3.1: +tslib@^2.0.0, tslib@^2.3.1, tslib@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + tweetnacl@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== -typescript@^4.9.3: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== + +typedarray-to-buffer@3.1.5, typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typeorm@^0.3.15: + version "0.3.16" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.16.tgz#a001d77b36cfaaf9ff495e15805dd17883116b7b" + integrity sha512-wJ4Qy1oqRKNDdZiBTTaVMqwo/XxC52Q7uNPTjltPgLhvIW173bL6Iad0lhptMOsFlpixFPaUu3PNziaRBwX2Zw== + dependencies: + "@sqltools/formatter" "^1.2.5" + app-root-path "^3.1.0" + buffer "^6.0.3" + chalk "^4.1.2" + cli-highlight "^2.1.11" + date-fns "^2.29.3" + debug "^4.3.4" + dotenv "^16.0.3" + glob "^8.1.0" + mkdirp "^2.1.3" + reflect-metadata "^0.1.13" + sha.js "^2.4.11" + tslib "^2.5.0" + uuid "^9.0.0" + yargs "^17.6.2" + +typescript@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" + integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw== uint8arrays@^2.0.5, uint8arrays@^2.1.2: version "2.1.10" @@ -2902,7 +5744,7 @@ uint8arrays@^2.0.5, uint8arrays@^2.1.2: dependencies: multiformats "^9.4.2" -uint8arrays@^3.0.0: +uint8arrays@^3.0.0, uint8arrays@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0" integrity sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg== @@ -2914,6 +5756,11 @@ undefsafe@^2.0.5: resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -2921,13 +5768,22 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" -url@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" - integrity sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ== +url-set-query@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" + integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== + +use-sync-external-store@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + +utf-8-validate@^5.0.2: + version "5.0.10" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" + integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== dependencies: - punycode "1.3.2" - querystring "0.2.0" + node-gyp-build "^4.3.0" utf8@3.0.0: version "3.0.0" @@ -2939,7 +5795,7 @@ util-deprecate@^1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.12.4: +util@^0.12.0, util@^0.12.4, util@^0.12.5: version "0.12.5" resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== @@ -2950,10 +5806,10 @@ util@^0.12.4: is-typed-array "^1.1.3" which-typed-array "^1.1.2" -uuid@8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c" - integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== uuid@^8.3.2: version "8.3.2" @@ -2970,6 +5826,14 @@ 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== +valtio@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/valtio/-/valtio-1.10.4.tgz#762647d102f14060111ed21e8afa28f424c2be78" + integrity sha512-gqGWh0DjtDMAy8Jaui8ufFoxlQB1k1NiA/QHrpKoTUk9EeY331WKeYhvtGn1u703RcefrDCez7PT+qeCu9lWEw== + dependencies: + proxy-compare "2.5.0" + use-sync-external-store "1.2.0" + varint@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" @@ -2980,10 +5844,213 @@ varint@^6.0.0: resolved "https://registry.yarnpkg.com/varint/-/varint-6.0.0.tgz#9881eb0ce8feaea6512439d19ddf84bf551661d0" integrity sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg== -web3-utils@^1.3.4: - version "1.8.2" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.8.2.tgz#c32dec5e9b955acbab220eefd7715bc540b75cc9" - integrity sha512-v7j6xhfLQfY7xQDrUP0BKbaNrmZ2/+egbqP9q3KYmOiPpnvAfol+32slgL0WX/5n8VPvKCK5EZ1HGrAVICSToA== +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== + +web3-core-helpers@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.5.2.tgz#b6bd5071ca099ba3f92dfafb552eed2b70af2795" + integrity sha512-U7LJoeUdQ3aY9t5gU7t/1XpcApsWm+4AcW5qKl/44ZxD44w0Dmsq1c5zJm3GuLr/a9MwQfXK4lpmvxVQWHHQRg== + dependencies: + web3-eth-iban "1.5.2" + web3-utils "1.5.2" + +web3-core-helpers@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.9.0.tgz#a1ca4ac7b9cec822886643312d2e98b0e4d8f1bc" + integrity sha512-NeJzylAp9Yj9xAt2uTT+kyug3X0DLnfBdnAcGZuY6HhoNPDIfQRA9CkJjLngVRlGTLZGjNp9x9eR+RyZQgUlXg== + dependencies: + web3-eth-iban "1.9.0" + web3-utils "1.9.0" + +web3-core-method@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.5.2.tgz#d1d602657be1000a29d11e3ca3bf7bc778dea9a5" + integrity sha512-/mC5t9UjjJoQmJJqO5nWK41YHo+tMzFaT7Tp7jDCQsBkinE68KsUJkt0jzygpheW84Zra0DVp6q19gf96+cugg== + dependencies: + "@ethereumjs/common" "^2.4.0" + "@ethersproject/transactions" "^5.0.0-beta.135" + web3-core-helpers "1.5.2" + web3-core-promievent "1.5.2" + web3-core-subscriptions "1.5.2" + web3-utils "1.5.2" + +web3-core-method@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.9.0.tgz#81da8aa21503b470537c9f075f30adfad194a2d8" + integrity sha512-sswbNsY2xRBBhGeaLt9c/eDc+0yDDhi6keUBAkgIRa9ueSx/VKzUY9HMqiV6bXDcGT2fJyejq74FfEB4lc/+/w== + dependencies: + "@ethersproject/transactions" "^5.6.2" + web3-core-helpers "1.9.0" + web3-core-promievent "1.9.0" + web3-core-subscriptions "1.9.0" + web3-utils "1.9.0" + +web3-core-promievent@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.5.2.tgz#2dc9fe0e5bbeb7c360fc1aac5f12b32d9949a59b" + integrity sha512-5DacbJXe98ozSor7JlkTNCy6G8945VunRRkPxMk98rUrg60ECVEM/vuefk1atACzjQsKx6tmLZuHxbJQ64TQeQ== + dependencies: + eventemitter3 "4.0.4" + +web3-core-promievent@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.9.0.tgz#2598a4d91b4edd3607366529f52bc96dee9f6d83" + integrity sha512-PHG1Mn23IGwMZhnPDN8dETKypqsFbHfiyRqP+XsVMPmTHkVfzDQTCBU/c2r6hUktBDoGKut5xZQpGfhFk71KbQ== + dependencies: + eventemitter3 "4.0.4" + +web3-core-requestmanager@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.5.2.tgz#43ccc00779394c941b28e6e07e217350fd1ded71" + integrity sha512-oRVW9OrAsXN2JIZt68OEg1Mb1A9a/L3JAGMv15zLEFEnJEGw0KQsGK1ET2kvZBzvpFd5G0EVkYCnx7WDe4HSNw== + dependencies: + util "^0.12.0" + web3-core-helpers "1.5.2" + web3-providers-http "1.5.2" + web3-providers-ipc "1.5.2" + web3-providers-ws "1.5.2" + +web3-core-requestmanager@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.9.0.tgz#9d7d0e7f890cf7a24e9c568b9772c64d57fc4fcd" + integrity sha512-hcJ5PCtTIJpj+8qWxoseqlCovDo94JJjTX7dZOLXgwp8ah7E3WRYozhGyZocerx+KebKyg1mCQIhkDpMwjfo9Q== + dependencies: + util "^0.12.5" + web3-core-helpers "1.9.0" + web3-providers-http "1.9.0" + web3-providers-ipc "1.9.0" + web3-providers-ws "1.9.0" + +web3-core-subscriptions@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.5.2.tgz#8eaebde44f81fc13c45b555c4422fe79393da9cf" + integrity sha512-hapI4rKFk22yurtIv0BYvkraHsM7epA4iI8Np+HuH6P9DD0zj/llaps6TXLM9HyacLBRwmOLZmr+pHBsPopUnQ== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.5.2" + +web3-core-subscriptions@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.9.0.tgz#dc67b478875dab1875844df3307a986dd7d468dd" + integrity sha512-MaIo29yz7hTV8X8bioclPDbHFOVuHmnbMv+D3PDH12ceJFJAXGyW8GL5KU1DYyWIj4TD1HM4WknyVA/YWBiiLA== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.9.0" + +web3-core@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.5.2.tgz#ca2b9b1ed3cf84d48b31c9bb91f7628f97cfdcd5" + integrity sha512-sebMpQbg3kbh3vHUbHrlKGKOxDWqjgt8KatmTBsTAWj/HwWYVDzeX+2Q84+swNYsm2DrTBVFlqTErFUwPBvyaA== + dependencies: + "@types/bn.js" "^4.11.5" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.5.2" + web3-core-method "1.5.2" + web3-core-requestmanager "1.5.2" + web3-utils "1.5.2" + +web3-core@^1.8.1: + version "1.9.0" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.9.0.tgz#9cfafb2f8c01931429108af75205610406a5a1ab" + integrity sha512-DZ+TPmq/ZLlx4LSVzFgrHCP/QFpKDbGWO4HoquZSdu24cjk5SZ+FEU1SZB2OaK3/bgBh+25mRbmv8y56ysUu1w== + dependencies: + "@types/bn.js" "^5.1.1" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.9.0" + web3-core-method "1.9.0" + web3-core-requestmanager "1.9.0" + web3-utils "1.9.0" + +web3-eth-iban@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.5.2.tgz#f390ad244ef8a6c94de7c58736b0b80a484abc8e" + integrity sha512-C04YDXuSG/aDwOHSX+HySBGb0KraiAVt+/l1Mw7y/fCUrKC/K0yYzMYqY/uYOcvLtepBPsC4ZfUYWUBZ2PO8Vg== + dependencies: + bn.js "^4.11.9" + web3-utils "1.5.2" + +web3-eth-iban@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.9.0.tgz#a8f838e42c20d49ff58aaa9f67ece47a968e40b1" + integrity sha512-jPAm77PuEs1kE/UrrBFJdPD2PN42pwfXA0gFuuw35bZezhskYML9W4QCxcqnUtceyEA4FUn7K2qTMuCk+23fog== + dependencies: + bn.js "^5.2.1" + web3-utils "1.9.0" + +web3-providers-http@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.5.2.tgz#94f95fe5572ca54aa2c2ffd42c63956436c9eb0a" + integrity sha512-dUNFJc9IMYDLZnkoQX3H4ZjvHjGO6VRVCqrBrdh84wPX/0da9dOA7DwIWnG0Gv3n9ybWwu5JHQxK4MNQ444lyA== + dependencies: + web3-core-helpers "1.5.2" + xhr2-cookies "1.1.0" + +web3-providers-http@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.9.0.tgz#93cd3eb42fff974c9f7634ede1a9795d6435c3fe" + integrity sha512-5+dMNDAE0rRFz6SJpfnBqlVi2J5bB/Ivr2SanMt2YUrkxW5t8betZbzVwRkTbwtUvkqgj3xeUQzqpOttiv+IqQ== + dependencies: + abortcontroller-polyfill "^1.7.3" + cross-fetch "^3.1.4" + es6-promise "^4.2.8" + web3-core-helpers "1.9.0" + +web3-providers-ipc@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.5.2.tgz#68a516883c998eeddf60df4cead77baca4fb4aaa" + integrity sha512-SJC4Sivt4g9LHKlRy7cs1jkJgp7bjrQeUndE6BKs0zNALKguxu6QYnzbmuHCTFW85GfMDjhvi24jyyZHMnBNXQ== + dependencies: + oboe "2.1.5" + web3-core-helpers "1.5.2" + +web3-providers-ipc@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.9.0.tgz#db486cb0dde9062ac6055478861e3d37535924d2" + integrity sha512-cPXU93Du40HCylvjaa5x62DbnGqH+86HpK/+kMcFIzF6sDUBhKpag2tSbYhGbj7GMpfkmDTUiiMLdWnFV6+uBA== + dependencies: + oboe "2.1.5" + web3-core-helpers "1.9.0" + +web3-providers-ws@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.5.2.tgz#d336a93ed608b40cdcadfadd1f1bc8d32ea046e0" + integrity sha512-xy9RGlyO8MbJDuKv2vAMDkg+en+OvXG0CGTCM2BTl6l1vIdHpCa+6A/9KV2rK8aU9OBZ7/Pf+Y19517kHVl9RA== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.5.2" + websocket "^1.0.32" + +web3-providers-ws@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.9.0.tgz#568330766e8abbb6eb43e1153a72fb24398fcb7e" + integrity sha512-JRVsnQZ7j2k1a2yzBNHe39xqk1ijOv01dfIBFw52VeEkSRzvrOcsPIM/ttSyBuJqt70ntMxXY0ekCrqfleKH/w== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.9.0" + websocket "^1.0.32" + +web3-utils@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.5.2.tgz#150982dcb1918ffc54eba87528e28f009ebc03aa" + integrity sha512-quTtTeQJHYSxAwIBOCGEcQtqdVcFWX6mCFNoqnp+mRbq+Hxbs8CGgO/6oqfBx4OvxIOfCpgJWYVHswRXnbEu9Q== + dependencies: + bn.js "^4.11.9" + eth-lib "0.2.8" + ethereum-bloom-filters "^1.0.6" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +web3-utils@1.9.0, web3-utils@^1.3.4, web3-utils@^1.8.1: + version "1.9.0" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.9.0.tgz#7c5775a47586cefb4ad488831be8f6627be9283d" + integrity sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ== dependencies: bn.js "^5.2.1" ethereum-bloom-filters "^1.0.6" @@ -2998,6 +6065,18 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== +websocket@^1.0.32: + version "1.0.34" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" + integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== + dependencies: + bufferutil "^4.0.1" + debug "^2.2.0" + es5-ext "^0.10.50" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" + whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -3006,6 +6085,11 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" +which-module@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + which-typed-array@^1.1.2: version "1.1.9" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" @@ -3018,40 +6102,224 @@ which-typed-array@^1.1.2: has-tostringtag "^1.0.0" is-typed-array "^1.1.10" +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + ws@7.4.6: version "7.4.6" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -xml2js@0.4.19: - version "0.4.19" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" - integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== +ws@^7.4.0, ws@^7.4.5, ws@^7.5.1: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +ws@^8.5.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +xhr-request-promise@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" + integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== + dependencies: + xhr-request "^1.1.0" + +xhr-request@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" + integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== + dependencies: + buffer-to-arraybuffer "^0.0.5" + object-assign "^4.1.1" + query-string "^5.0.1" + simple-get "^2.7.0" + timed-out "^4.0.1" + url-set-query "^1.0.0" + xhr "^2.0.4" + +xhr2-cookies@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz#7d77449d0999197f155cb73b23df72505ed89d48" + integrity sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g== + dependencies: + cookiejar "^2.1.1" + +xhr@^2.0.4: + version "2.6.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== dependencies: - sax ">=0.6.0" - xmlbuilder "~9.0.1" + global "~4.4.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" -xmlbuilder@~9.0.1: - version "9.0.7" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" - integrity sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ== +xtend@^4.0.0, xtend@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yaeti@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" + integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.1.tgz#3014bf0482dcd15147aa8e56109ce8632cd60ce4" - integrity sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw== +yaml@^2.1.1, yaml@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.2.tgz#ec551ef37326e6d42872dad1970300f8eb83a073" + integrity sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.1.1: + version "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-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0, yargs@^16.0.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^15.3.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yargs@^17.6.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== -zod@^3.11.6: - version "3.20.6" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.20.6.tgz#2f2f08ff81291d47d99e86140fedb4e0db08361a" - integrity sha512-oyu0m54SGCtzh6EClBVqDDlAYRz4jrVtKwQ7ZnsEmMI9HnzuZFj8QFwAY1M5uniIYACdGvv0PBWPF2kO0aNofA== +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zod@^3.20.2: + version "3.21.4" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.21.4.tgz#10882231d992519f0a10b5dd58a38c9dabbb64db" + integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw== From 2c2f8645472fbc80fe47420cd60f0f62439f1b64 Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Tue, 9 May 2023 17:54:28 -0700 Subject: [PATCH 02/24] added read end-point. add SDK instantiation. Brought back Analytics service. Need to remove more comments --- README.md | 2 +- .../keys/list.ts => contracts/read/read.ts} | 50 +++++++------- src/api/index.ts | 6 +- src/api/v1/keys/create.ts | 68 ------------------- src/api/v1/keys/use.ts | 2 +- src/constants/errors.ts | 17 +---- src/errorHandler.ts | 2 + src/helpers/call.ts | 24 +++++++ src/helpers/schema.ts | 26 +++++++ src/helpers/sdk.ts | 17 +++++ src/index.ts | 52 ++------------ src/services/AnalyticsService.ts | 41 +++++++++++ 12 files changed, 145 insertions(+), 162 deletions(-) rename src/api/{v1/keys/list.ts => contracts/read/read.ts} (52%) delete mode 100644 src/api/v1/keys/create.ts create mode 100644 src/helpers/call.ts create mode 100644 src/helpers/schema.ts create mode 100644 src/helpers/sdk.ts create mode 100644 src/services/AnalyticsService.ts diff --git a/README.md b/README.md index ed6fe68ac..117ae1db4 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,6 @@ Thirdweb's Web3-API server. - [X] Add API-Key validation as middleware - [ ] Make API-Key Validation work with ThirdWeb Access check - [ ] Add wallet-id validation as middleware -- [ ] Add Read End-point +- [X] Add Read End-point - [ ] Add Write End-point - [ ] Add Deplyer End-point diff --git a/src/api/v1/keys/list.ts b/src/api/contracts/read/read.ts similarity index 52% rename from src/api/v1/keys/list.ts rename to src/api/contracts/read/read.ts index 90fdb6058..0d4492e36 100644 --- a/src/api/v1/keys/list.ts +++ b/src/api/contracts/read/read.ts @@ -2,61 +2,59 @@ import { FastifyInstance, RouteGenericInterface } from 'fastify'; import { Static, Type } from '@sinclair/typebox'; import { baseReplyErrorSchema } from '../../../sharedApiSchemas'; import { StatusCodes } from 'http-status-codes'; -// import { ApiKeyService } from '../../../services/ApiKeyService'; import { FastifySchema } from 'fastify/types/schema'; -// import { AnalyticsService } from '../../../services/AnalyticsService'; import { GenericThirdwebRequestContext } from '../../../types/fastify'; -import { ThirdwebAuthUser } from '@thirdweb-dev/auth/dist/declarations/src/express/types'; +import { getSDK } from "../../../helpers/sdk"; + +const requestParamSchema = Type.Object({ + chain_name: Type.String(), + contract_address: Type.String(), +}); const replyBodySchema = Type.Object({ - keys: Type.Array( + result: Type.Array( Type.Object({ - key: Type.String(), - creatorWalletAddress: Type.String(), - revoked: Type.Boolean(), + chain_name: Type.String(), + contract_address: Type.String(), }) ), error: baseReplyErrorSchema, }); const fullRouteSchema: FastifySchema = { + params: requestParamSchema, response: { - [StatusCodes.OK]: replyBodySchema, + [StatusCodes.OK]: replyBodySchema }, }; interface schemaTypes extends RouteGenericInterface { + Params: Static; Reply: Static; } -export async function listApiKeysRoute(fastify: FastifyInstance) { +// updated chain to chain_name as I saw SDK needs chain_name +// can update the implementation to retrive chain_name wrt to the chainId passed +export async function readContract(fastify: FastifyInstance) { fastify.route({ method: 'GET', - url: '/v1/keys', + url: '/contracts/:chain_name/:contract_address/read', schema: fullRouteSchema, handler: async (request, reply) => { - const user = request.context.config.apiCallerIdentity - .thirdwebAuthUser as ThirdwebAuthUser; - - // const apiKeyInfo = await ApiKeyService.prisma.apiKeyInfo.findMany({ - // where: { - // creatorWalletAddress: user.address, - // }, - // }); - - // Track event - // AnalyticsService.trackEvent({ - // apiCallerIdentity: request.context.config.apiCallerIdentity, - // eventName: 'api_keys.list', - // }); - + const { chain_name, contract_address } = request.params; + const sdk = await getSDK(chain_name); + const contract = await sdk.getContract(contract_address); + reply.status(StatusCodes.OK).send({ // keys: apiKeyInfo.map((keyInfo) => ({ // key: keyInfo.key, // creatorWalletAddress: keyInfo.creatorWalletAddress, // revoked: keyInfo.revoked, // })), - keys: [], + result: [{ + chain_name, + contract_address + }], error: null, }); }, diff --git a/src/api/index.ts b/src/api/index.ts index a7b020cab..c104d2054 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -1,12 +1,10 @@ import { FastifyInstance } from 'fastify'; import { useApiKeyRoute } from './v1/keys/use'; -import { createApiKeyRoute } from './v1/keys/create'; -import { listApiKeysRoute } from './v1/keys/list'; +import { readContract } from './contracts/read/read'; import { revokeApiKeyRoute } from './v1/keys/revoke'; export const apiRoutes = async (fastify: FastifyInstance) => { - await fastify.register(createApiKeyRoute); - await fastify.register(listApiKeysRoute); + await fastify.register(readContract); await fastify.register(revokeApiKeyRoute); await fastify.register(useApiKeyRoute); }; diff --git a/src/api/v1/keys/create.ts b/src/api/v1/keys/create.ts deleted file mode 100644 index 4ed2793ce..000000000 --- a/src/api/v1/keys/create.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { FastifyInstance, RouteGenericInterface } from 'fastify'; -import { Static, Type } from '@sinclair/typebox'; -import { baseReplyErrorSchema } from '../../../sharedApiSchemas'; -import { StatusCodes } from 'http-status-codes'; -// import { ApiKeyService } from '../../../services/ApiKeyService'; -import { API_KEY_REPLY_ERRORS } from '../../../constants/errors'; -import { FastifySchema } from 'fastify/types/schema'; -// import { AnalyticsService } from '../../../services/AnalyticsService'; -import { GenericThirdwebRequestContext } from '../../../types/fastify'; -import { ThirdwebAuthUser } from '@thirdweb-dev/auth/dist/declarations/src/express/types'; - -const requestBodySchema = Type.Object({}); - -const replyBodySchema = Type.Object({ - key: Type.Optional(Type.String()), - error: baseReplyErrorSchema, -}); - -const fullRouteSchema: FastifySchema = { - body: requestBodySchema, - response: { - [StatusCodes.OK]: replyBodySchema, - }, -}; - -interface schemaTypes extends RouteGenericInterface { - Body: Static; - Reply: Static; -} - -export async function createApiKeyRoute(fastify: FastifyInstance) { - fastify.route({ - method: 'POST', - url: '/v1/keys', - schema: fullRouteSchema, - handler: async (request, reply) => { - const user = request.context.config.apiCallerIdentity - .thirdwebAuthUser as ThirdwebAuthUser; - // Don't allow users to create more than the max number of keys - // if ( - // await ApiKeyService.checkReachedApiKeyLimit({ - // creatorWalletAddress: user.address, - // }) - // ) { - // reply.status(API_KEY_REPLY_ERRORS.TOO_MANY_KEYS.statusCode).send({ - // error: API_KEY_REPLY_ERRORS.TOO_MANY_KEYS, - // }); - // return; - // } - - // Create the key - // const apiKeyInfo = await ApiKeyService.createApiKey({ - // creatorWalletAddress: user.address, - // }); - - // // Track event - // AnalyticsService.trackEvent({ - // apiCallerIdentity: request.context.config.apiCallerIdentity, - // eventName: 'api_keys.create', - // }); - - reply.status(StatusCodes.OK).send({ - key: 'apiKeyInfo.key', - error: null, - }); - }, - }); -} diff --git a/src/api/v1/keys/use.ts b/src/api/v1/keys/use.ts index 23ba7c454..b4db561e4 100644 --- a/src/api/v1/keys/use.ts +++ b/src/api/v1/keys/use.ts @@ -41,7 +41,7 @@ export async function useApiKeyRoute(fastify: FastifyInstance) { // Track event const apiCallerIdentity = request.context.config.apiCallerIdentity; // AnalyticsService.trackEvent({ - // eventName: `api_keys.use.${request.body.scope}`, + // eventName: `${request.body.scope}`, // apiCallerIdentity, // }); diff --git a/src/constants/errors.ts b/src/constants/errors.ts index 7a7d4f257..45af2eb1e 100644 --- a/src/constants/errors.ts +++ b/src/constants/errors.ts @@ -41,19 +41,4 @@ export const API_KEY_REPLY_ERRORS: Record< message: 'You have reached the maximum number of API keys.', statusCode: StatusCodes.TOO_MANY_REQUESTS, }, -}; - -/** - * Authorization header reply errors - */ -export const AUTHORIZATION_HEADER_REPLY_ERRORS: Record< - string, - Static -> = { - MISSING_BEARER_TOKEN: { - code: 'MISSING_BEARER_TOKEN', - message: - "The bearer token is missing. Please include it in the 'Authorization' header.", - statusCode: StatusCodes.BAD_REQUEST, - }, -}; +}; \ No newline at end of file diff --git a/src/errorHandler.ts b/src/errorHandler.ts index 87ff7745f..51c93b0dd 100644 --- a/src/errorHandler.ts +++ b/src/errorHandler.ts @@ -5,12 +5,14 @@ import { FastifyInstance } from 'fastify'; export const errorHandler = async (server: FastifyInstance) => { server.setErrorHandler((error, request, reply) => { + console.log("===>", error); // Transform unexpected errors into a standard payload const statusCode = error.statusCode ?? StatusCodes.INTERNAL_SERVER_ERROR; const code = error.code ?? getCodeFromStatusCode(statusCode) ?? StatusCodes.INTERNAL_SERVER_ERROR; + const message = error.message ?? ReasonPhrases.INTERNAL_SERVER_ERROR; reply.status(statusCode).send({ data: null, diff --git a/src/helpers/call.ts b/src/helpers/call.ts new file mode 100644 index 000000000..e853641bb --- /dev/null +++ b/src/helpers/call.ts @@ -0,0 +1,24 @@ +import { NextFunction } from "express"; + +interface EnforceCallParams { + call: () => Promise; + error: string; + next: NextFunction; +} + +export async function enforceCall({ + call, + error, + next, +}: EnforceCallParams): Promise { + try { + const result = await call(); + return result; + } catch (err) { + console.error(err); + return next({ + message: error, + details: [], + }) as T; + } +} diff --git a/src/helpers/schema.ts b/src/helpers/schema.ts new file mode 100644 index 000000000..4dbdc6f72 --- /dev/null +++ b/src/helpers/schema.ts @@ -0,0 +1,26 @@ +import { z } from "zod"; +import { NextFunction } from "express"; + +interface EnforceSchemaParams { + data: any; + schema: T; + next: NextFunction; + error: string; +} + +export function enforceSchema({ + data, + schema, + next, + error, +}: EnforceSchemaParams): z.output { + const parsed = schema.safeParse(data); + if (!parsed.success) { + return next({ + message: error, + details: parsed.error.issues, + }); + } + + return parsed.data; +} diff --git a/src/helpers/sdk.ts b/src/helpers/sdk.ts new file mode 100644 index 000000000..f4b5353ec --- /dev/null +++ b/src/helpers/sdk.ts @@ -0,0 +1,17 @@ +import { ThirdwebSDK, ChainOrRpc } from "@thirdweb-dev/sdk"; +// import { AwsKmsWallet } from "@thirdweb-dev/sdk/evm/wallets"; + +// Cache the SDK in memory so it doesn't get reinstantiated unless the server crashes +// This saves us from making a request to get the private key for reinstantiation on every request +const sdkMap: Partial> = {}; + +export async function getSDK(chainName: ChainOrRpc): Promise { + if (!!sdkMap[chainName]) { + return sdkMap[chainName] as ThirdwebSDK; + } + + // Need to make this instantiate SDK with read/write. For that will need wallet information + // Currently only doing read-only mode as per Docs + sdkMap[chainName] = new ThirdwebSDK(chainName); + return sdkMap[chainName] as ThirdwebSDK; +} diff --git a/src/index.ts b/src/index.ts index 761f8b646..bfd97cd86 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,17 +5,14 @@ import fastifyExpress from '@fastify/express'; import { TypeBoxTypeProvider } from '@fastify/type-provider-typebox'; import { openapi } from './openapi'; import { errorHandler } from './errorHandler'; -import { ThirdwebAuth } from '@thirdweb-dev/auth/express'; -import { PrivateKeyWallet } from '@thirdweb-dev/auth/evm'; import fastifyCors from '@fastify/cors'; -// import { checkApiAccess } from './auth/checkApiAccess'; import { apiRoutes } from './api'; import { GenericApiReply, GenericApiRequest } from './types/fastify'; import cookie, { FastifyCookieOptions } from '@fastify/cookie'; import { apiKeyValidator } from "./middleware/apiKeyValidator"; const logSettings: any = { - // development: { + // local: { // transport: { // target: 'pino-pretty', // options: { @@ -25,7 +22,7 @@ const logSettings: any = { // }, // }, // production: true, - // test: false, + // development: true, }; const main = async () => { const server: FastifyInstance = fastify({ @@ -34,36 +31,7 @@ const main = async () => { await server.register(errorHandler); - await server.register(fastifyCors, { - origin: function (origin, callback) { - if (!origin) { - return callback(null, false); - } - - // Check if the origin is localhost - // const isLocalhost = - // getEnv('NODE_ENV') !== 'production' && - // (origin.startsWith('http://localhost') || - // origin.startsWith('http://127.0.0.1')); - - // // Check if the origin is thirdweb.com - // const isThirdWeb = origin === 'https://thirdweb.com'; - - // // Check if the origin is a subdomain of thirdweb-preview.com - // const isThirdWebPreview = /^https?:\/\/.*\.thirdweb-preview\.com$/.test( - // origin - // ); - - // // Allow requests if the origin matches any of the above conditions - // if (isLocalhost || isThirdWeb || isThirdWebPreview) { - // callback(null, true); - // } else { - // callback(null, false); - // } - callback(null, true); - }, - credentials: true, - }); + await server.register(fastifyCors); server.register(cookie, { parseOptions: {}, // options for parsing cookies @@ -71,21 +39,13 @@ const main = async () => { await server.register(fastifyExpress); - const { authRouter, authMiddleware, getUser } = ThirdwebAuth({ - domain: process.env.THIRDWEB_AUTH_DOMAIN || 'localhost:3005', - wallet: new PrivateKeyWallet( - process.env.THIRDWEB_AUTH_PRIVATE_KEY || - 'dc91391b486c6ccdf0b705af8b3776360145e2c1ddbff9f524648cae12c1ae56' - ), - }); - await server.register(openapi); await server.register(apiRoutes); - await server.addHook('onRequest', async (req, res) => { - await apiKeyValidator(req, res); - }); + // await server.addHook('onRequest', async (req, res) => { + // await apiKeyValidator(req, res); + // }); await server.ready(); await server.listen({ diff --git a/src/services/AnalyticsService.ts b/src/services/AnalyticsService.ts new file mode 100644 index 000000000..748b8a311 --- /dev/null +++ b/src/services/AnalyticsService.ts @@ -0,0 +1,41 @@ +import { PostHog } from 'posthog-node'; +import { getEnv } from '../loadEnv'; +import { ApiCallerIdentity } from '../types/fastify'; + +const posthogClient = new PostHog(getEnv('POSTHOG_API_KEY'), { + host: 'https://a.thirdweb.com', +}); + +export class AnalyticsService { + static trackEvent(args: { + eventName: string; + apiCallerIdentity: ApiCallerIdentity; + data?: any; + }) { + try { + const apiCallerIdentity = args.apiCallerIdentity; + const distinctId = ( + apiCallerIdentity.identityType === 'thirdwebAuthJwt' + ? apiCallerIdentity.thirdwebAuthUser?.address + : apiCallerIdentity.apiKeyInfo?.key + ) as string; + posthogClient.capture({ + distinctId, + event: args.eventName, + properties: { + ...args.data, + authenticationType: apiCallerIdentity.identityType, + jwtWalletAddress: apiCallerIdentity.thirdwebAuthUser?.address, + apiKeyCreatorWalletAddress: + apiCallerIdentity.apiKeyInfo?.creatorWalletAddress, + distinctId, + }, + }); + } catch (e: any) { + console.error( + `AnalyticsService: Failed to send analytics to 3rd party service:`, + e + ); + } + } +} From 36c40e088427182fa700a9d6541e6cf391c6d91a Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Wed, 10 May 2023 12:35:51 -0700 Subject: [PATCH 03/24] Deployed NFT contract on Dashboard. updated Read to call function on contract. --- Dockerfile | 6 +- src/api/{contracts => contract}/read/read.ts | 33 +++++----- src/api/contract/write/write.ts | 63 ++++++++++++++++++++ src/api/index.ts | 2 +- src/api/v1/keys/revoke.ts | 1 - src/helpers/sdk.ts | 18 +++++- src/types/fastify.d.ts | 2 +- 7 files changed, 104 insertions(+), 21 deletions(-) rename src/api/{contracts => contract}/read/read.ts (75%) create mode 100644 src/api/contract/write/write.ts diff --git a/Dockerfile b/Dockerfile index 47c1c5012..570f68cd2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,6 +4,8 @@ WORKDIR /app RUN apk --no-cache --virtual build-dependencies add g++ make py3-pip COPY . . +COPY package*.json . +COPY yarn*.json . EXPOSE 3005 @@ -13,13 +15,15 @@ ENV NODE_ENV="local" RUN yarn install RUN apk del build-dependencies +ENV PATH /app/node_modules/.bin:$PATH + CMD [ "yarn", "dev" ] FROM base AS dev ENV NODE_ENV="development" - RUN yarn install + CMD [ "yarn", "dev" ] FROM base AS prod diff --git a/src/api/contracts/read/read.ts b/src/api/contract/read/read.ts similarity index 75% rename from src/api/contracts/read/read.ts rename to src/api/contract/read/read.ts index 0d4492e36..4776e1a71 100644 --- a/src/api/contracts/read/read.ts +++ b/src/api/contract/read/read.ts @@ -11,18 +11,21 @@ const requestParamSchema = Type.Object({ contract_address: Type.String(), }); +const requestQuerySchema = Type.Object({ + function_name: Type.String(), + args: Type.Array(Type.String()), +}); + const replyBodySchema = Type.Object({ - result: Type.Array( - Type.Object({ - chain_name: Type.String(), - contract_address: Type.String(), - }) - ), + result: Type.Object({ + data: Type.String(), + }), error: baseReplyErrorSchema, }); const fullRouteSchema: FastifySchema = { params: requestParamSchema, + querystring: requestQuerySchema, response: { [StatusCodes.OK]: replyBodySchema }, @@ -30,6 +33,7 @@ const fullRouteSchema: FastifySchema = { interface schemaTypes extends RouteGenericInterface { Params: Static; + Querystring: Static; Reply: Static; } @@ -38,23 +42,20 @@ interface schemaTypes extends RouteGenericInterface { export async function readContract(fastify: FastifyInstance) { fastify.route({ method: 'GET', - url: '/contracts/:chain_name/:contract_address/read', + url: '/contract/:chain_name/:contract_address/read', schema: fullRouteSchema, handler: async (request, reply) => { const { chain_name, contract_address } = request.params; + const { function_name, args } = request.query; const sdk = await getSDK(chain_name); const contract = await sdk.getContract(contract_address); + + const returnData: any = await contract.call(function_name); reply.status(StatusCodes.OK).send({ - // keys: apiKeyInfo.map((keyInfo) => ({ - // key: keyInfo.key, - // creatorWalletAddress: keyInfo.creatorWalletAddress, - // revoked: keyInfo.revoked, - // })), - result: [{ - chain_name, - contract_address - }], + result: { + data: returnData + }, error: null, }); }, diff --git a/src/api/contract/write/write.ts b/src/api/contract/write/write.ts new file mode 100644 index 000000000..9d2385394 --- /dev/null +++ b/src/api/contract/write/write.ts @@ -0,0 +1,63 @@ +import { FastifyInstance, RouteGenericInterface } from 'fastify'; +import { Static, Type } from '@sinclair/typebox'; +import { baseReplyErrorSchema } from '../../../sharedApiSchemas'; +import { StatusCodes } from 'http-status-codes'; +import { FastifySchema } from 'fastify/types/schema'; +import { GenericThirdwebRequestContext } from '../../../types/fastify'; +import { getSDK } from "../../../helpers/sdk"; + +const requestParamSchema = Type.Object({ + chain_name: Type.String(), + contract_address: Type.String(), +}); + +const requestQuerySchema = Type.Object({ + function_name: Type.String(), + args: Type.Array(Type.String()), +}); + +const replyBodySchema = Type.Object({ + result: Type.Object({ + data: Type.String(), + }), + error: baseReplyErrorSchema, +}); + +const fullRouteSchema: FastifySchema = { + params: requestParamSchema, + querystring: requestQuerySchema, + response: { + [StatusCodes.OK]: replyBodySchema + }, +}; + +interface schemaTypes extends RouteGenericInterface { + Params: Static; + Querystring: Static; + Reply: Static; +} + +// updated chain to chain_name as I saw SDK needs chain_name +// can update the implementation to retrive chain_name wrt to the chainId passed +export async function readContract(fastify: FastifyInstance) { + fastify.route({ + method: 'POST', + url: '/contract/:chain_name/:contract_address/write', + schema: fullRouteSchema, + handler: async (request, reply) => { + const { chain_name, contract_address } = request.params; + const { function_name, args } = request.query; + const sdk = await getSDK(chain_name); + const contract = await sdk.getContract(contract_address); + + const returnData: any = await contract.call(function_name); + + reply.status(StatusCodes.OK).send({ + result: { + data: returnData + }, + error: null, + }); + }, + }); +} diff --git a/src/api/index.ts b/src/api/index.ts index c104d2054..45782046e 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -1,6 +1,6 @@ import { FastifyInstance } from 'fastify'; import { useApiKeyRoute } from './v1/keys/use'; -import { readContract } from './contracts/read/read'; +import { readContract } from './contract/read/read'; import { revokeApiKeyRoute } from './v1/keys/revoke'; export const apiRoutes = async (fastify: FastifyInstance) => { diff --git a/src/api/v1/keys/revoke.ts b/src/api/v1/keys/revoke.ts index 6df57406f..320f52ba1 100644 --- a/src/api/v1/keys/revoke.ts +++ b/src/api/v1/keys/revoke.ts @@ -2,7 +2,6 @@ import { FastifyInstance, RouteGenericInterface } from 'fastify'; import { Static, Type } from '@sinclair/typebox'; import { baseReplyErrorSchema } from '../../../sharedApiSchemas'; import { StatusCodes } from 'http-status-codes'; -// import { ApiKeyService } from '../../../services/ApiKeyService'; import { API_KEY_REPLY_ERRORS } from '../../../constants/errors'; import { FastifySchema } from 'fastify/types/schema'; // import { AnalyticsService } from '../../../services/AnalyticsService'; diff --git a/src/helpers/sdk.ts b/src/helpers/sdk.ts index f4b5353ec..56da1506a 100644 --- a/src/helpers/sdk.ts +++ b/src/helpers/sdk.ts @@ -1,4 +1,5 @@ import { ThirdwebSDK, ChainOrRpc } from "@thirdweb-dev/sdk"; +import { getEnv } from '../loadEnv'; // import { AwsKmsWallet } from "@thirdweb-dev/sdk/evm/wallets"; // Cache the SDK in memory so it doesn't get reinstantiated unless the server crashes @@ -12,6 +13,21 @@ export async function getSDK(chainName: ChainOrRpc): Promise { // Need to make this instantiate SDK with read/write. For that will need wallet information // Currently only doing read-only mode as per Docs - sdkMap[chainName] = new ThirdwebSDK(chainName); + if (getEnv('NODE_ENV') === 'local'){ + sdkMap[chainName] = await ThirdwebSDK.fromPrivateKey(getEnv('WALLET_PRIVATE_KEY'), chainName); + } + // else if (getEnv('USE_WALLET') === 'true') { + // const wallet = new AwsKmsWallet({ + // region: getEnv('AWS_REGION') as string, + // accessKeyId: getEnv('AWS_ACCESS_KEY_ID') as string, + // secretAccessKey: getEnv('AWS_SECRET_ACCESS_KEY') as string, + // keyId: getEnv('AWS_KMS_KEY_ID') as string, + // }); + // sdkMap[chainName] = await ThirdwebSDK.fromWallet(wallet, chainName); + // } + else { + sdkMap[chainName] = new ThirdwebSDK(chainName); + } + return sdkMap[chainName] as ThirdwebSDK; } diff --git a/src/types/fastify.d.ts b/src/types/fastify.d.ts index 76dae9c3d..e8e48b91e 100644 --- a/src/types/fastify.d.ts +++ b/src/types/fastify.d.ts @@ -40,6 +40,6 @@ export type GenericApiRequest = FastifyRequest< RawRequestDefaultExpression, FastifySchema, FastifyTypeProviderDefault, - GenericThirdwebRequestContext + GenericThirdwebRequestContext, >; export type GenericApiReply = FastifyReply; From 6728ee288b9f331606c206f57598cda8449316de Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Wed, 10 May 2023 14:55:12 -0700 Subject: [PATCH 04/24] Added winston. updated sharedAPISchema to have all schemas. Updated Read to use args --- README.md | 3 +- package.json | 1 + src/api/contract/read/read.ts | 41 +++------ src/sharedApiSchemas.ts | 28 ++++++ src/utilities/logger.ts | 84 ++++++++++++++++++ yarn.lock | 159 +++++++++++++++++++++++++++++++++- 6 files changed, 285 insertions(+), 31 deletions(-) create mode 100644 src/utilities/logger.ts diff --git a/README.md b/README.md index 117ae1db4..af0819976 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,10 @@ Thirdweb's Web3-API server. - [X] Fastify Server Up & Running - [X] Dockerize the Server +- [X] Add logging capabilty with winston - [X] Add API-Key validation as middleware - [ ] Make API-Key Validation work with ThirdWeb Access check - [ ] Add wallet-id validation as middleware - [X] Add Read End-point - [ ] Add Write End-point -- [ ] Add Deplyer End-point +- [ ] Add Deployer End-point diff --git a/package.json b/package.json index 99e0b6f1c..35388748a 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "reflect-metadata": "^0.1.13", "typeorm": "^0.3.15", "uuid": "^9.0.0", + "winston": "^3.8.2", "yaml": "^2.2.1" }, "devDependencies": { diff --git a/src/api/contract/read/read.ts b/src/api/contract/read/read.ts index 4776e1a71..ba2c663f3 100644 --- a/src/api/contract/read/read.ts +++ b/src/api/contract/read/read.ts @@ -1,35 +1,10 @@ import { FastifyInstance, RouteGenericInterface } from 'fastify'; -import { Static, Type } from '@sinclair/typebox'; -import { baseReplyErrorSchema } from '../../../sharedApiSchemas'; import { StatusCodes } from 'http-status-codes'; -import { FastifySchema } from 'fastify/types/schema'; import { GenericThirdwebRequestContext } from '../../../types/fastify'; import { getSDK } from "../../../helpers/sdk"; - -const requestParamSchema = Type.Object({ - chain_name: Type.String(), - contract_address: Type.String(), -}); - -const requestQuerySchema = Type.Object({ - function_name: Type.String(), - args: Type.Array(Type.String()), -}); - -const replyBodySchema = Type.Object({ - result: Type.Object({ - data: Type.String(), - }), - error: baseReplyErrorSchema, -}); - -const fullRouteSchema: FastifySchema = { - params: requestParamSchema, - querystring: requestQuerySchema, - response: { - [StatusCodes.OK]: replyBodySchema - }, -}; +import { Static } from '@sinclair/typebox'; +import { replyBodySchema, requestParamSchema, requestQuerySchema, fullRouteSchema } from "../../../sharedApiSchemas"; +import { logger } from "../../../utilities/logger"; interface schemaTypes extends RouteGenericInterface { Params: Static; @@ -47,10 +22,18 @@ export async function readContract(fastify: FastifyInstance) { handler: async (request, reply) => { const { chain_name, contract_address } = request.params; const { function_name, args } = request.query; + + logger.info("Inside Read Function"); + logger.silly(`Chain : ${chain_name}`) + logger.silly(`Contract Address : ${contract_address}`); + + logger.silly(`Function Name : ${function_name}`) + logger.silly(`Contract Address : ${contract_address}`); + const sdk = await getSDK(chain_name); const contract = await sdk.getContract(contract_address); - const returnData: any = await contract.call(function_name); + const returnData: any = await contract.call(function_name, args ?? []); reply.status(StatusCodes.OK).send({ result: { diff --git a/src/sharedApiSchemas.ts b/src/sharedApiSchemas.ts index a93970520..53364a3e1 100644 --- a/src/sharedApiSchemas.ts +++ b/src/sharedApiSchemas.ts @@ -1,4 +1,6 @@ import { TSchema, Type } from '@sinclair/typebox'; +import { FastifySchema } from 'fastify/types/schema'; +import { StatusCodes } from 'http-status-codes'; /** * Requests to this server follow a pretty basic format. @@ -45,3 +47,29 @@ export const dashboardRequestHeaderSchema = Type.Object({ // Optional because the API key is not required for all routes. Authorization: Type.String(), }); + +export const requestParamSchema = Type.Object({ + chain_name: Type.String(), + contract_address: Type.String(), +}); + +export const requestQuerySchema = Type.Object({ + function_name: Type.String(), + args: Type.Optional(Type.Array(Type.Any())), +}); + +export const replyBodySchema = Type.Object({ + result: Type.Object({ + data: Type.String(), + transaction: Type.Optional(Type.Any()) + }), + error: baseReplyErrorSchema, +}); + +export const fullRouteSchema: FastifySchema = { + params: requestParamSchema, + querystring: requestQuerySchema, + response: { + [StatusCodes.OK]: replyBodySchema + }, +}; diff --git a/src/utilities/logger.ts b/src/utilities/logger.ts new file mode 100644 index 000000000..d34da4a9c --- /dev/null +++ b/src/utilities/logger.ts @@ -0,0 +1,84 @@ +import { createLogger, transports, format} from "winston"; +import { getEnv } from "../loadEnv"; + +let log_level = "info"; +if (getEnv('NODE_ENV') !== 'production') { + log_level = "silly"; +} + +export const logger = createLogger({ + level: log_level, + levels: { + debug: 0, + info: 1, + silly: 2, + warn: 3, + error: 4, + }, + format: format.combine( + format.timestamp({ + format: "YYYY-MM-DD HH:mm:ss", + }), + format.errors({stack: true}), + format.splat(), + format.json() + ), + // timestamp: true, + // expressFormat: true, + defaultMeta: { service: "web3-api"}, + // transport: {}, + // handleExceptions: true, + // humanReadableUnhandledException: true, + // exitOnError: false +}); + +if (getEnv('NODE_ENV') !== "production"){ + logger.add( + new transports.Console({ + level: log_level || "silly", + format: format.combine( + format.colorize(), + format.prettyPrint(), + format.splat(), + format.printf((info: any) => { + if ("stack" in info) { + return `[${info.level}] : ${info.timestamp} : ${info.stack}`; + } + if (typeof info.message === "object") { + info.message = JSON.stringify(info.message, null, 4); + } + return `[${info.level}] : ${info.timestamp} : ${info.message}`; + }), + ), + }), + ); +} else { + logger.add( + new transports.Console({ + level: log_level, + format: format.combine( + format.splat(), + format.printf((info: any) => { + if ("stack" in info) { + return `[${info.level}] : ${info.timestamp} : ${info.stack}`; + } + if (typeof info.message === "object") { + info.message = JSON.stringify(info.message, null, 4); + } + return `[${info.level}] : ${info.timestamp} : ${info.message}`; + }), + ), + }), + ); +} + +logger.exceptions.handle(new transports.Console()); +process.on("unhandledRejection", (ex) => { + logger.error("Unhandled Rejection Error"); + logger.error(ex); +}); + +process.on("uncaughtException", (ex) => { + logger.error("uncaught Exception Error"); + logger.error(ex); +}); diff --git a/yarn.lock b/yarn.lock index 0dd8cc462..908780814 100644 --- a/yarn.lock +++ b/yarn.lock @@ -70,6 +70,11 @@ stream-browserify "^3.0.0" util "^0.12.4" +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -77,6 +82,15 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" +"@dabh/diagnostics@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" + integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== + dependencies: + colorspace "1.1.x" + enabled "2.0.x" + kuler "^2.0.0" + "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -1422,6 +1436,11 @@ "@types/mime" "*" "@types/node" "*" +"@types/triple-beam@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.2.tgz#38ecb64f01aa0d02b7c8f4222d7c38af6316fef8" + integrity sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g== + "@types/trusted-types@^2.0.2": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.3.tgz#a136f83b0758698df454e328759dbd3d44555311" @@ -2068,6 +2087,11 @@ async-mutex@^0.2.6: dependencies: tslib "^2.0.0" +async@^3.2.3: + version "3.2.4" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -2477,6 +2501,13 @@ clsx@^1.1.0: resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== +color-convert@^1.9.3: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -2484,16 +2515,45 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@~1.1.4: +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +color-string@^1.6.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.1.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== + dependencies: + color-convert "^1.9.3" + color-string "^1.6.0" + colorette@^2.0.7: version "2.0.20" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== +colorspace@1.1.x: + version "1.1.4" + resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== + dependencies: + color "^3.1.3" + text-hex "1.0.x" + combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -2806,6 +2866,11 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +enabled@2.0.x: + version "2.0.0" + resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== + encode-utf8@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" @@ -3327,6 +3392,11 @@ fastq@^1.6.0, fastq@^1.6.1: dependencies: reusify "^1.0.4" +fecha@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" + integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -3407,6 +3477,11 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== +fn.name@1.x.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== + follow-redirects@^1.14.0, follow-redirects@^1.14.9: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" @@ -3814,6 +3889,11 @@ is-arguments@^1.0.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + 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" @@ -3875,6 +3955,11 @@ is-plain-obj@^2.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + is-typed-array@^1.1.10, is-typed-array@^1.1.3: version "1.1.10" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" @@ -4039,6 +4124,11 @@ keyvaluestorage-interface@^1.0.0: resolved "https://registry.yarnpkg.com/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz#13ebdf71f5284ad54be94bd1ad9ed79adad515ff" integrity sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g== +kuler@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== + levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -4132,6 +4222,18 @@ log-symbols@4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" +logform@^2.3.2, logform@^2.4.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/logform/-/logform-2.5.1.tgz#44c77c34becd71b3a42a3970c77929e52c6ed48b" + integrity sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg== + dependencies: + "@colors/colors" "1.5.0" + "@types/triple-beam" "^1.3.2" + fecha "^4.2.0" + ms "^2.1.1" + safe-stable-stringify "^2.3.1" + triple-beam "^1.3.0" + long@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" @@ -4560,6 +4662,13 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" +one-time@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== + dependencies: + fn.name "1.x.x" + openapi-types@^12.0.0: version "12.1.0" resolved "https://registry.yarnpkg.com/openapi-types/-/openapi-types-12.1.0.tgz#bd01acc937b73c9f6db2ac2031bf0231e21ebff0" @@ -5375,6 +5484,13 @@ simple-get@^2.7.0: once "^1.3.1" simple-concat "^1.0.0" +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== + dependencies: + is-arrayish "^0.3.1" + simple-update-notifier@^1.0.7: version "1.1.0" resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" @@ -5421,6 +5537,11 @@ stable@^0.1.8: resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== +stack-trace@0.0.x: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== + statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" @@ -5541,6 +5662,11 @@ text-encoding-utf-8@^1.0.2: resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== +text-hex@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -5628,6 +5754,11 @@ treeify@^1.1.0: resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== +triple-beam@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9" + integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw== + ts-node@^10.9.1: version "10.9.1" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" @@ -6109,6 +6240,32 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +winston-transport@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.5.0.tgz#6e7b0dd04d393171ed5e4e4905db265f7ab384fa" + integrity sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q== + dependencies: + logform "^2.3.2" + readable-stream "^3.6.0" + triple-beam "^1.3.0" + +winston@^3.8.2: + version "3.8.2" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.8.2.tgz#56e16b34022eb4cff2638196d9646d7430fdad50" + integrity sha512-MsE1gRx1m5jdTTO9Ld/vND4krP2To+lgDoMEHGGa4HIlAUyXJtfc7CxQcGXVyz2IBpw5hbFkj2b/AtUdQwyRew== + dependencies: + "@colors/colors" "1.5.0" + "@dabh/diagnostics" "^2.0.2" + async "^3.2.3" + is-stream "^2.0.0" + logform "^2.4.0" + one-time "^1.0.0" + readable-stream "^3.4.0" + safe-stable-stringify "^2.3.1" + stack-trace "0.0.x" + triple-beam "^1.3.0" + winston-transport "^4.5.0" + word-wrap@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" From d7da05c91806f89c0236c447273aaf64b4282c3b Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Wed, 10 May 2023 17:04:54 -0700 Subject: [PATCH 05/24] Added write end-point. updated scehma details for args --- README.md | 2 +- package.json | 2 +- src/api/contract/read/read.ts | 4 +-- src/api/contract/write/write.ts | 51 ++++++++++++--------------------- src/api/index.ts | 2 ++ src/helpers/sdk.ts | 3 +- src/sharedApiSchemas.ts | 4 +-- 7 files changed, 28 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index af0819976..4138eda03 100644 --- a/README.md +++ b/README.md @@ -17,5 +17,5 @@ Thirdweb's Web3-API server. - [ ] Make API-Key Validation work with ThirdWeb Access check - [ ] Add wallet-id validation as middleware - [X] Add Read End-point -- [ ] Add Write End-point +- [X] Add Write End-point - [ ] Add Deployer End-point diff --git a/package.json b/package.json index 35388748a..ca857c7f2 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "scripts": { "build": "yarn && rimraf dist && tsc -p ./tsconfig.json --outDir dist", "start": "node --experimental-specifier-resolution=node dist/index.js", - "dev": "NODE_ENV=development nodemon --watch 'src/**/*.ts' --exec 'ts-node' --files src/index.ts", + "dev": "nodemon --watch 'src/**/*.ts' --exec 'ts-node' --files src/index.ts", "infra": "docker compose --env-file ./.env up", "lint": "eslint 'src/**/*.ts'", "lint:fix": "eslint --fix 'src/**/*.ts'", diff --git a/src/api/contract/read/read.ts b/src/api/contract/read/read.ts index ba2c663f3..872ca6b70 100644 --- a/src/api/contract/read/read.ts +++ b/src/api/contract/read/read.ts @@ -28,12 +28,12 @@ export async function readContract(fastify: FastifyInstance) { logger.silly(`Contract Address : ${contract_address}`); logger.silly(`Function Name : ${function_name}`) - logger.silly(`Contract Address : ${contract_address}`); + logger.silly(`Args : ${args}`); const sdk = await getSDK(chain_name); const contract = await sdk.getContract(contract_address); - const returnData: any = await contract.call(function_name, args ?? []); + const returnData: any = await contract.call(function_name, args ? args.split(",") : []); reply.status(StatusCodes.OK).send({ result: { diff --git a/src/api/contract/write/write.ts b/src/api/contract/write/write.ts index 9d2385394..d8e83864a 100644 --- a/src/api/contract/write/write.ts +++ b/src/api/contract/write/write.ts @@ -1,35 +1,11 @@ +import { getAllDetectedFeatureNames } from "@thirdweb-dev/sdk"; import { FastifyInstance, RouteGenericInterface } from 'fastify'; import { Static, Type } from '@sinclair/typebox'; -import { baseReplyErrorSchema } from '../../../sharedApiSchemas'; import { StatusCodes } from 'http-status-codes'; -import { FastifySchema } from 'fastify/types/schema'; import { GenericThirdwebRequestContext } from '../../../types/fastify'; import { getSDK } from "../../../helpers/sdk"; - -const requestParamSchema = Type.Object({ - chain_name: Type.String(), - contract_address: Type.String(), -}); - -const requestQuerySchema = Type.Object({ - function_name: Type.String(), - args: Type.Array(Type.String()), -}); - -const replyBodySchema = Type.Object({ - result: Type.Object({ - data: Type.String(), - }), - error: baseReplyErrorSchema, -}); - -const fullRouteSchema: FastifySchema = { - params: requestParamSchema, - querystring: requestQuerySchema, - response: { - [StatusCodes.OK]: replyBodySchema - }, -}; +import { replyBodySchema, requestParamSchema, requestQuerySchema, fullRouteSchema } from "../../../sharedApiSchemas"; +import { logger } from "../../../utilities/logger"; interface schemaTypes extends RouteGenericInterface { Params: Static; @@ -39,7 +15,7 @@ interface schemaTypes extends RouteGenericInterface { // updated chain to chain_name as I saw SDK needs chain_name // can update the implementation to retrive chain_name wrt to the chainId passed -export async function readContract(fastify: FastifyInstance) { +export async function writeToContract(fastify: FastifyInstance) { fastify.route({ method: 'POST', url: '/contract/:chain_name/:contract_address/write', @@ -47,17 +23,26 @@ export async function readContract(fastify: FastifyInstance) { handler: async (request, reply) => { const { chain_name, contract_address } = request.params; const { function_name, args } = request.query; - const sdk = await getSDK(chain_name); - const contract = await sdk.getContract(contract_address); + + logger.info("Inside Read Function"); + logger.silly(`Chain : ${chain_name}`) + logger.silly(`Contract Address : ${contract_address}`); + + logger.silly(`Function Name : ${function_name}`) + logger.silly(`Contract Address : ${contract_address}`); + logger.silly(`Function Arguments : ${args}`); - const returnData: any = await contract.call(function_name); + const sdk = await getSDK(chain_name); + const contract:any = await sdk.getContract(contract_address); + + const returnData: any = await contract.call(function_name, args ? args.split(",") : []); reply.status(StatusCodes.OK).send({ result: { - data: returnData + transaction: returnData?.receipt }, error: null, }); }, }); -} +} \ No newline at end of file diff --git a/src/api/index.ts b/src/api/index.ts index 45782046e..8b43f92af 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -2,9 +2,11 @@ import { FastifyInstance } from 'fastify'; import { useApiKeyRoute } from './v1/keys/use'; import { readContract } from './contract/read/read'; import { revokeApiKeyRoute } from './v1/keys/revoke'; +import { writeToContract } from './contract/write/write'; export const apiRoutes = async (fastify: FastifyInstance) => { await fastify.register(readContract); + await fastify.register(writeToContract); await fastify.register(revokeApiKeyRoute); await fastify.register(useApiKeyRoute); }; diff --git a/src/helpers/sdk.ts b/src/helpers/sdk.ts index 56da1506a..b858556b9 100644 --- a/src/helpers/sdk.ts +++ b/src/helpers/sdk.ts @@ -1,5 +1,6 @@ import { ThirdwebSDK, ChainOrRpc } from "@thirdweb-dev/sdk"; import { getEnv } from '../loadEnv'; +import { logger } from "../utilities/logger"; // import { AwsKmsWallet } from "@thirdweb-dev/sdk/evm/wallets"; // Cache the SDK in memory so it doesn't get reinstantiated unless the server crashes @@ -30,4 +31,4 @@ export async function getSDK(chainName: ChainOrRpc): Promise { } return sdkMap[chainName] as ThirdwebSDK; -} +} \ No newline at end of file diff --git a/src/sharedApiSchemas.ts b/src/sharedApiSchemas.ts index 53364a3e1..626d197c3 100644 --- a/src/sharedApiSchemas.ts +++ b/src/sharedApiSchemas.ts @@ -55,12 +55,12 @@ export const requestParamSchema = Type.Object({ export const requestQuerySchema = Type.Object({ function_name: Type.String(), - args: Type.Optional(Type.Array(Type.Any())), + args: Type.Optional(Type.String()), }); export const replyBodySchema = Type.Object({ result: Type.Object({ - data: Type.String(), + data: Type.Optional(Type.String()), transaction: Type.Optional(Type.Any()) }), error: baseReplyErrorSchema, From 010443cbce61214f9777be785ceb1c1991cec1ab Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Wed, 10 May 2023 17:08:05 -0700 Subject: [PATCH 06/24] update write end-point --- src/api/contract/write/write.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/contract/write/write.ts b/src/api/contract/write/write.ts index d8e83864a..92453da12 100644 --- a/src/api/contract/write/write.ts +++ b/src/api/contract/write/write.ts @@ -24,7 +24,7 @@ export async function writeToContract(fastify: FastifyInstance) { const { chain_name, contract_address } = request.params; const { function_name, args } = request.query; - logger.info("Inside Read Function"); + logger.info("Inside Write Function"); logger.silly(`Chain : ${chain_name}`) logger.silly(`Contract Address : ${contract_address}`); From 13c0cdda462ef36425c329ba93dd3170d164cbac Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Thu, 11 May 2023 16:32:55 -0700 Subject: [PATCH 07/24] 1st version of OpenAPI/Swagger imeplemented --- README.md | 1 + docker-compose.yml | 5 + package.json | 13 +- src/api/contract/read/read.ts | 7 +- src/api/contract/write/write.ts | 8 +- src/api/v1/keys/revoke.ts | 29 +-- src/api/v1/keys/use.ts | 27 +-- src/constants/errors.ts | 7 + src/index.ts | 7 +- src/openapi.ts | 37 +++- src/sharedApiSchemas.ts | 61 +++++- yarn.lock | 346 ++++++-------------------------- 12 files changed, 197 insertions(+), 351 deletions(-) diff --git a/README.md b/README.md index 4138eda03..eab4dbbba 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ Thirdweb's Web3-API server. - [X] Fastify Server Up & Running - [X] Dockerize the Server - [X] Add logging capabilty with winston +- [ ] Add OpenAPI/Swagger Document Generation - [X] Add API-Key validation as middleware - [ ] Make API-Key Validation work with ThirdWeb Access check - [ ] Add wallet-id validation as middleware diff --git a/docker-compose.yml b/docker-compose.yml index 72c496f92..8928ddbbd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,6 +2,11 @@ version: '3.8' services: web3-api: + # environment: + # - PORT=3005 + # - OPENAPI_BASE_ORIGIN="http://localhost:3005" + # - HOST="0.0.0.0" + # - WALLET_PRIVATE_KEY="" build: dockerfile: Dockerfile context: . diff --git a/package.json b/package.json index ca857c7f2..e89d47cf7 100644 --- a/package.json +++ b/package.json @@ -19,31 +19,22 @@ "@fastify/cors": "^8.2.1", "@fastify/express": "^2.3.0", "@fastify/swagger": "^8.3.1", + "@fastify/swagger-ui": "^1.8.1", "@fastify/type-provider-typebox": "^3.0.0", "@sinclair/typebox": "^0.27.8", "@thirdweb-dev/auth": "3.0.16-nightly-72b8b982-20230503002100", "body-parser": "^1.20.2", - "busboy": "^1.6.0", "cookie": "^0.5.0", - "cookie-parser": "^1.4.6", "dotenv": "^16.0.3", "ethers": "5", "express": "^4.18.2", "fastify": "^4.15.0", "fastify-plugin": "^4.5.0", "http-status-codes": "^2.2.0", - "multiformats": "^11.0.2", - "pg": "^8.10.0", - "posthog-node": "^3.1.1", - "reflect-metadata": "^0.1.13", - "typeorm": "^0.3.15", - "uuid": "^9.0.0", - "winston": "^3.8.2", - "yaml": "^2.2.1" + "winston": "^3.8.2" }, "devDependencies": { "@swc/core": "^1.3.41", - "@types/busboy": "^1.5.0", "@types/cookie": "^0.5.1", "@types/express": "^4.17.17", "@types/node": "^18.15.4", diff --git a/src/api/contract/read/read.ts b/src/api/contract/read/read.ts index 872ca6b70..957d36600 100644 --- a/src/api/contract/read/read.ts +++ b/src/api/contract/read/read.ts @@ -18,7 +18,12 @@ export async function readContract(fastify: FastifyInstance) { fastify.route({ method: 'GET', url: '/contract/:chain_name/:contract_address/read', - schema: fullRouteSchema, + schema: { + description: 'Read From Contract', + tags: ['read'], + operationId: 'read', + ...fullRouteSchema, + }, handler: async (request, reply) => { const { chain_name, contract_address } = request.params; const { function_name, args } = request.query; diff --git a/src/api/contract/write/write.ts b/src/api/contract/write/write.ts index 92453da12..70f1884c9 100644 --- a/src/api/contract/write/write.ts +++ b/src/api/contract/write/write.ts @@ -1,4 +1,3 @@ -import { getAllDetectedFeatureNames } from "@thirdweb-dev/sdk"; import { FastifyInstance, RouteGenericInterface } from 'fastify'; import { Static, Type } from '@sinclair/typebox'; import { StatusCodes } from 'http-status-codes'; @@ -19,7 +18,12 @@ export async function writeToContract(fastify: FastifyInstance) { fastify.route({ method: 'POST', url: '/contract/:chain_name/:contract_address/write', - schema: fullRouteSchema, + schema: { + description: 'Write From Contract', + tags: ['write'], + operationId: 'read', + ...fullRouteSchema + }, handler: async (request, reply) => { const { chain_name, contract_address } = request.params; const { function_name, args } = request.query; diff --git a/src/api/v1/keys/revoke.ts b/src/api/v1/keys/revoke.ts index 320f52ba1..017b45581 100644 --- a/src/api/v1/keys/revoke.ts +++ b/src/api/v1/keys/revoke.ts @@ -1,31 +1,14 @@ import { FastifyInstance, RouteGenericInterface } from 'fastify'; import { Static, Type } from '@sinclair/typebox'; -import { baseReplyErrorSchema } from '../../../sharedApiSchemas'; import { StatusCodes } from 'http-status-codes'; -import { API_KEY_REPLY_ERRORS } from '../../../constants/errors'; -import { FastifySchema } from 'fastify/types/schema'; // import { AnalyticsService } from '../../../services/AnalyticsService'; import { GenericThirdwebRequestContext } from '../../../types/fastify'; import { ThirdwebAuthUser } from '@thirdweb-dev/auth/dist/declarations/src/express/types'; - -const requestBodySchema = Type.Object({ - key: Type.String(), -}); - -const replyBodySchema = Type.Object({ - error: baseReplyErrorSchema, -}); - -const fullRouteSchema: FastifySchema = { - body: requestBodySchema, - response: { - [StatusCodes.OK]: replyBodySchema, - [API_KEY_REPLY_ERRORS.INVALID_API_KEY.statusCode]: replyBodySchema, - }, -}; +import { replyBodySchema, requestBodySchemaForRevoke, fullRouteSchema } from "../../../sharedApiSchemas"; +import { logger } from "../../../utilities/logger"; interface schemaTypes extends RouteGenericInterface { - Body: Static; + Body: Static; Reply: Static; } @@ -33,7 +16,11 @@ export async function revokeApiKeyRoute(fastify: FastifyInstance) { fastify.route({ method: 'POST', url: '/v1/keys/revoke', - schema: fullRouteSchema, + schema: { + description: 'Keys Revoke End-Point', + tags: ['api'], + ...fullRouteSchema + }, handler: async (request, reply) => { // console.log('routeConfig', request.context) const user = request.context.config.apiCallerIdentity diff --git a/src/api/v1/keys/use.ts b/src/api/v1/keys/use.ts index b4db561e4..b20b8f4b5 100644 --- a/src/api/v1/keys/use.ts +++ b/src/api/v1/keys/use.ts @@ -8,27 +8,12 @@ import { StatusCodes } from 'http-status-codes'; // import { AnalyticsService } from '../../../services/AnalyticsService'; import { FastifySchema } from 'fastify/types/schema'; import { GenericThirdwebRequestContext } from '../../../types/fastify'; - -const requestBodySchema = Type.Object({ - scope: Type.String(), -}); - -const replyBodySchema = Type.Object({ - authorized: Type.Optional(Type.Boolean()), - error: baseReplyErrorSchema, -}); - -const fullRouteSchema: FastifySchema = { - headers: developerRequestHeaderSchema, - body: requestBodySchema, - response: { - [StatusCodes.OK]: replyBodySchema, - }, -}; +import { replyBodySchema, requestBodySchemaForUse, fullRouteSchema } from "../../../sharedApiSchemas"; +import { logger } from "../../../utilities/logger"; interface schemaTypes extends RouteGenericInterface { Headers: Static; - Body: Static; + Body: Static; Reply: Static; } @@ -36,7 +21,11 @@ export async function useApiKeyRoute(fastify: FastifyInstance) { fastify.route({ method: 'POST', url: '/v1/keys/use', - schema: fullRouteSchema, + schema: { + description: 'Keys Use End-Point', + tags: ['api'], + ...fullRouteSchema + }, handler: async (request, reply) => { // Track event const apiCallerIdentity = request.context.config.apiCallerIdentity; diff --git a/src/constants/errors.ts b/src/constants/errors.ts index 45af2eb1e..926929047 100644 --- a/src/constants/errors.ts +++ b/src/constants/errors.ts @@ -41,4 +41,11 @@ export const API_KEY_REPLY_ERRORS: Record< message: 'You have reached the maximum number of API keys.', statusCode: StatusCodes.TOO_MANY_REQUESTS, }, + + UNAUTHORIZED: { + code: 'UNAUTHORIZED', + message: + "API Key provided is not valid", + statusCode: StatusCodes.UNAUTHORIZED, + }, }; \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index bfd97cd86..3573c9c73 100644 --- a/src/index.ts +++ b/src/index.ts @@ -38,16 +38,15 @@ const main = async () => { } as FastifyCookieOptions); await server.register(fastifyExpress); - - await server.register(openapi); - + openapi(server); await server.register(apiRoutes); // await server.addHook('onRequest', async (req, res) => { // await apiKeyValidator(req, res); // }); - + await server.ready(); + server.swagger(); await server.listen({ host: getEnv('HOST'), port: Number(getEnv('PORT')), diff --git a/src/openapi.ts b/src/openapi.ts index 20b27e4a7..282cfbd6e 100644 --- a/src/openapi.ts +++ b/src/openapi.ts @@ -1,9 +1,14 @@ -import fastifySwagger from '@fastify/swagger'; +import swagger from '@fastify/swagger'; +import fastifySwaggerUI from '@fastify/swagger-ui'; import { getEnv } from './loadEnv'; import { FastifyInstance } from 'fastify'; +// fastify-swagger v8 requires the swagger-ui & openapi specs +// to be separate unlike old implementation + export const openapi = async (server: FastifyInstance) => { - server.register(fastifySwagger, { + await server.register(swagger, { + mode:'dynamic', openapi: { info: { title: 'thirdweb web3-API', @@ -16,6 +21,12 @@ export const openapi = async (server: FastifyInstance) => { }, ], components: { + // To show schemas on the Docs if needed, uncomment + // schemas:{ + // "read": { + // "type": "object" + // } + // }, securitySchemes: { apiKey: { type: 'apiKey', @@ -29,6 +40,28 @@ export const openapi = async (server: FastifyInstance) => { }, }, }, + externalDocs: { + url: 'https://thirdweb.com', + description: 'Find more info here' + }, }, }); + + // Not all options are required below + // We can change/remove them too. + await server.register(fastifySwaggerUI, { + routePrefix: '/documentation', + initOAuth: { }, + uiConfig: { + docExpansion: 'list', + deepLinking: true, + displayOperationId: false + }, + uiHooks: { + onRequest: function (request, reply, next) { next() }, + preHandler: function (request, reply, next) { next() } + }, + staticCSP: true, + transformStaticCSP: (header) => header + }) }; diff --git a/src/sharedApiSchemas.ts b/src/sharedApiSchemas.ts index 626d197c3..893a5d0c3 100644 --- a/src/sharedApiSchemas.ts +++ b/src/sharedApiSchemas.ts @@ -1,20 +1,19 @@ import { TSchema, Type } from '@sinclair/typebox'; import { FastifySchema } from 'fastify/types/schema'; import { StatusCodes } from 'http-status-codes'; +import { API_KEY_REPLY_ERRORS } from './constants/errors'; /** * Requests to this server follow a pretty basic format. * * Requests: - * - Have an `input` field that contains the actual input data. + * - Have a `function_name` field that accepts contract function name. + * - Have an `args` field that accepts arguments required for the function_name to be called. * * Responses: - * - Have data stored in the response body JSON. + * - Have a `result` field that contains `data` / `transaction` information in response based on the end-point response * - Have an `error` field that contains application/unexpected errors, or null. * - * Non-GET Handlers always expect the request body to be a JSON object. Per the HTTP spec, POST/PUT/PATCH requests should have a body, even if it's an empoty object. - * - * Similarly, responses always contain an `error` field. If there is no `error`, it is set to `null`. */ export const errorSchema = Type.Object({ @@ -27,6 +26,7 @@ export const errorSchema = Type.Object({ export const Nullable = (type: T) => Type.Union([type, Type.Null()]); + /** * Used to surface application errors to the client. The `code` field is set by the request handler. */ @@ -38,6 +38,7 @@ export const baseReplyErrorSchema = Nullable(errorSchema); export const developerRequestHeaderSchema = Type.Object({ // Optional because the API key is not required for all routes. 'x-api-key': Type.String(), + 'x-wallet-id': Type.String(), }); /** @@ -48,28 +49,72 @@ export const dashboardRequestHeaderSchema = Type.Object({ Authorization: Type.String(), }); +/** + * Basic schema for all Request Parameters + */ export const requestParamSchema = Type.Object({ chain_name: Type.String(), contract_address: Type.String(), }); +/** + * Basic schema for all Request Query String + */ export const requestQuerySchema = Type.Object({ function_name: Type.String(), args: Type.Optional(Type.String()), }); +/** + * Basic schema for all Request Body for v1/use end-point + */ +export const requestBodySchemaForUse = Type.Object({ + scope: Type.String(), +}); + +/** + * Basic schema for all Request Body for v1/revoke end-point + */ +export const requestBodySchemaForRevoke = Type.Object({ + key: Type.String() +}); + +/** + * Basic schema for all Response Body + */ export const replyBodySchema = Type.Object({ - result: Type.Object({ + result: Type.Optional(Type.Object({ data: Type.Optional(Type.String()), transaction: Type.Optional(Type.Any()) - }), + })), error: baseReplyErrorSchema, + authorized: Type.Optional(Type.Boolean()), }); +/** + * Basic Fastify schema for request/response + */ export const fullRouteSchema: FastifySchema = { + headers: developerRequestHeaderSchema, params: requestParamSchema, querystring: requestQuerySchema, response: { - [StatusCodes.OK]: replyBodySchema + [StatusCodes.OK]: replyBodySchema, + [StatusCodes.UNAUTHORIZED]: { + description: "Authentication information is missing or invalid", + ...replyBodySchema, + }, + [StatusCodes.BAD_REQUEST]: { + description: "Bad Request", + ...replyBodySchema, + }, + [StatusCodes.NOT_FOUND]: { + description: "Method Nor Found", + ...replyBodySchema, + }, + [StatusCodes.INTERNAL_SERVER_ERROR]: { + description: "Internal Server Error", + ...replyBodySchema, + } }, }; diff --git a/yarn.lock b/yarn.lock index 908780814..893f37629 100644 --- a/yarn.lock +++ b/yarn.lock @@ -40,7 +40,7 @@ resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.9.4.tgz#a483c54c1253656bb33babd464e3154a173e1577" integrity sha512-HazVq9zwTVwGmqdwYzu7WyQ6FQVZ7SwET0KKQuKm55jD0IfUpZgN0OPIiZG3zV1iSrVYcN0bdwLRXI/VNCYsUA== -"@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2", "@babel/runtime@^7.21.0": +"@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2": version "7.21.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.5.tgz#8492dddda9644ae3bda3b45eabe87382caee7200" integrity sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q== @@ -473,6 +473,11 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" +"@fastify/accept-negotiator@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz#c1c66b3b771c09742a54dd5bc87c582f6b0630ff" + integrity sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ== + "@fastify/ajv-compiler@^3.5.0": version "3.5.0" resolved "https://registry.yarnpkg.com/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz#459bff00fefbf86c96ec30e62e933d2379e46670" @@ -523,6 +528,41 @@ dependencies: fast-json-stringify "^5.7.0" +"@fastify/send@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@fastify/send/-/send-2.1.0.tgz#1aa269ccb4b0940a2dadd1f844443b15d8224ea0" + integrity sha512-yNYiY6sDkexoJR0D8IDy3aRP3+L4wdqCpvx5WP+VtEU58sn7USmKynBzDQex5X42Zzvw2gNzzYgP90UfWShLFA== + dependencies: + "@lukeed/ms" "^2.0.1" + escape-html "~1.0.3" + fast-decode-uri-component "^1.0.1" + http-errors "2.0.0" + mime "^3.0.0" + +"@fastify/static@^6.0.0": + version "6.10.1" + resolved "https://registry.yarnpkg.com/@fastify/static/-/static-6.10.1.tgz#605e6758b7536089581bb59dbb096d80997327b6" + integrity sha512-DNnG+5QenQcTQw37qk0/191STThnN6SbU+2XMpWtpYR3gQUfUvMax14jTT/jqNINNbCkQJaKMnPtpFPKo4/68g== + dependencies: + "@fastify/accept-negotiator" "^1.0.0" + "@fastify/send" "^2.0.0" + content-disposition "^0.5.3" + fastify-plugin "^4.0.0" + glob "^8.0.1" + p-limit "^3.1.0" + readable-stream "^4.0.0" + +"@fastify/swagger-ui@^1.8.1": + version "1.8.1" + resolved "https://registry.yarnpkg.com/@fastify/swagger-ui/-/swagger-ui-1.8.1.tgz#f65a3f78116b8fcb81904aa02385ad1e98750461" + integrity sha512-XMfLGZMXi5dl0Gy6R6tlistA4d0XlJJweUfQkPNVeeBq2hO03DmvtM5yrp8adF392Xoi+6rlGHFaneL9EQdsoA== + dependencies: + "@fastify/static" "^6.0.0" + fastify-plugin "^4.0.0" + openapi-types "^12.0.2" + rfdc "^1.3.0" + yaml "^2.1.3" + "@fastify/swagger@^8.3.1": version "8.3.1" resolved "https://registry.yarnpkg.com/@fastify/swagger/-/swagger-8.3.1.tgz#4ea955723dccd4c4ec43d8431711f4286bfc3b47" @@ -625,6 +665,11 @@ dependencies: "@lit-labs/ssr-dom-shim" "^1.0.0" +"@lukeed/ms@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@lukeed/ms/-/ms-2.0.1.tgz#3c2bbc258affd9cc0e0cc7828477383c73afa6ee" + integrity sha512-Xs/4RZltsAL7pkvaNStUQt7netTkyxrS0K+RILcVr3TRMS/ToOg4I6uNfhB9SlGsnWBym4U+EaXq0f0cEMNkHA== + "@magic-ext/connect@^6.7.0": version "6.7.2" resolved "https://registry.yarnpkg.com/@magic-ext/connect/-/connect-6.7.2.tgz#9b479d2a3b0740e63915c7c7af461af5f3bfbf2a" @@ -958,11 +1003,6 @@ rpc-websockets "^7.5.1" superstruct "^0.14.2" -"@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/aead@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@stablelib/aead/-/aead-1.0.1.tgz#c4b1106df9c23d1b867eb9b276d8f42d5fc4c0c3" @@ -1305,13 +1345,6 @@ "@types/connect" "*" "@types/node" "*" -"@types/busboy@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@types/busboy/-/busboy-1.5.0.tgz#62681556cbbd2afc8d2efa6bafaa15602f0838b9" - integrity sha512-ncOOhwmyFDW76c/Tuvv9MA9VGYUCn8blzyWmzYELcNGDb0WXWLSmFi7hJq25YdRBYJrmMBB5jZZwUjlJe9HCjQ== - dependencies: - "@types/node" "*" - "@types/connect@*", "@types/connect@^3.4.33": version "3.4.35" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" @@ -2032,11 +2065,6 @@ ansi-styles@^6.1.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" @@ -2045,11 +2073,6 @@ anymatch@~3.1.2: 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" - integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA== - archy@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" @@ -2123,7 +2146,7 @@ axios@^0.21.0: dependencies: follow-redirects "^1.14.0" -axios@^0.27.0, axios@^0.27.2: +axios@^0.27.2: version "0.27.2" resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== @@ -2338,11 +2361,6 @@ buffer-to-arraybuffer@^0.0.5: resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== -buffer-writer@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" - integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== - buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -2363,13 +2381,6 @@ bufferutil@^4.0.1: dependencies: node-gyp-build "^4.3.0" -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" @@ -2411,7 +2422,7 @@ chai@^4.3.7: pathval "^1.1.1" type-detect "^4.0.5" -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2457,18 +2468,6 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -cli-highlight@^2.1.11: - version "2.1.11" - resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" - integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== - dependencies: - chalk "^4.0.0" - highlight.js "^10.7.1" - mz "^2.4.0" - parse5 "^5.1.1" - parse5-htmlparser2-tree-adapter "^6.0.0" - yargs "^16.0.0" - cliui@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" @@ -2487,15 +2486,6 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - clsx@^1.1.0: version "1.2.1" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" @@ -2571,7 +2561,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -content-disposition@0.5.4: +content-disposition@0.5.4, content-disposition@^0.5.3: version "0.5.4" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== @@ -2583,24 +2573,11 @@ content-type@~1.0.4, content-type@~1.0.5: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -cookie-parser@^1.4.6: - version "1.4.6" - resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.6.tgz#3ac3a7d35a7a03bbc7e365073a26074824214594" - integrity sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA== - dependencies: - cookie "0.4.1" - cookie-signature "1.0.6" - cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" - integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== - cookie@0.5.0, cookie@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" @@ -2685,13 +2662,6 @@ d@1, d@^1.0.1: es5-ext "^0.10.50" type "^1.0.1" -date-fns@^2.29.3: - version "2.30.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" - integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== - dependencies: - "@babel/runtime" "^7.21.0" - dateformat@^4.6.3: version "4.6.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" @@ -3604,7 +3574,7 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.0, glob@^8.1.0: +glob@^8.0.0, glob@^8.0.1: version "8.1.0" resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== @@ -3726,11 +3696,6 @@ hey-listen@^1.0.8: resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== -highlight.js@^10.7.1: - version "10.7.3" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" - integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== - hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -4345,6 +4310,11 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== +mime@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== + mimic-response@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" @@ -4405,11 +4375,6 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -mkdirp@^2.1.3: - version "2.1.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" - integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== - mnemonist@0.39.5: version "0.39.5" resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.39.5.tgz#5850d9b30d1b2bc57cc8787e5caa40f6c3420477" @@ -4486,11 +4451,6 @@ multicodec@^3.0.1: uint8arrays "^3.0.0" varint "^6.0.0" -multiformats@^11.0.2: - version "11.0.2" - resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-11.0.2.tgz#b14735efc42cd8581e73895e66bebb9752151b60" - integrity sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg== - multiformats@^9.4.2: version "9.9.0" resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" @@ -4522,15 +4482,6 @@ murmurhash3js-revisited@^3.0.0: resolved "https://registry.yarnpkg.com/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.0.tgz#6bd36e25de8f73394222adc6e41fa3fac08a5869" integrity sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g== -mz@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - nanoid@3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" @@ -4616,7 +4567,7 @@ number-to-bn@1.7.0: bn.js "4.11.6" strip-hex-prefix "1.0.0" -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -4669,7 +4620,7 @@ one-time@^1.0.0: dependencies: fn.name "1.x.x" -openapi-types@^12.0.0: +openapi-types@^12.0.0, openapi-types@^12.0.2: version "12.1.0" resolved "https://registry.yarnpkg.com/openapi-types/-/openapi-types-12.1.0.tgz#bd01acc937b73c9f6db2ac2031bf0231e21ebff0" integrity sha512-XpeCy01X6L5EpP+6Hc3jWN7rMZJ+/k1lwki/kTmWzbVhdPie3jd5O2ZtedEx8Yp58icJ0osVldLMrTB/zslQXA== @@ -4693,7 +4644,7 @@ p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -4719,11 +4670,6 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -packet-reader@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" - integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -4736,23 +4682,6 @@ parse-headers@^2.0.0: resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== -parse5-htmlparser2-tree-adapter@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" - integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== - dependencies: - parse5 "^6.0.1" - -parse5@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -parse5@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -4807,57 +4736,6 @@ pbkdf2@^3.0.17: safe-buffer "^5.0.1" sha.js "^2.4.8" -pg-connection-string@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.5.0.tgz#538cadd0f7e603fc09a12590f3b8a452c2c0cf34" - integrity sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ== - -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.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.0.tgz#3190df3e4747a0d23e5e9e8045bcd99bda0a712e" - integrity sha512-clFRf2ksqd+F497kWFyM21tMjeikn60oGDmqMT8UBrynEwVEX/5R5xd2sdvdo1cZCFlguORNpVuqxIj+aK4cfQ== - -pg-protocol@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.0.tgz#4c91613c0315349363af2084608db843502f8833" - integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q== - -pg-types@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" - integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== - dependencies: - pg-int8 "1.0.1" - postgres-array "~2.0.0" - postgres-bytea "~1.0.0" - postgres-date "~1.0.4" - postgres-interval "^1.1.0" - -pg@^8.10.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.10.0.tgz#5b8379c9b4a36451d110fc8cd98fc325fe62ad24" - integrity sha512-ke7o7qSTMb47iwzOSaZMfeR7xToFdkE71ifIipOAAaLIM0DYzfOAXlgFFmYUIE2BcJtvnVlGCID84ZzCegE8CQ== - dependencies: - buffer-writer "2.0.0" - packet-reader "1.0.0" - pg-connection-string "^2.5.0" - pg-pool "^3.6.0" - pg-protocol "^1.6.0" - pg-types "^2.1.0" - pgpass "1.x" - -pgpass@1.x: - 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, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" @@ -4958,36 +4836,6 @@ pngjs@^5.0.0: resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== -postgres-array@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" - integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== - -postgres-bytea@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" - integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== - -postgres-date@~1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" - integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== - -postgres-interval@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" - integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== - dependencies: - xtend "^4.0.0" - -posthog-node@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/posthog-node/-/posthog-node-3.1.1.tgz#f92c44a871552c9bfb98bf4cc8fd326d36af6cbd" - integrity sha512-OUSYcnLHbzvY/dxNsbUGoYuTZz5XNx48BkfiCkOIJZMFvot5VPQ0KWEjX+kzYxEwHeXbjW9plqsOVcYCYfidgg== - dependencies: - axios "^0.27.0" - rusha "^0.8.14" - preact@^10.12.0, preact@^10.5.9: version "10.13.2" resolved "https://registry.yarnpkg.com/preact/-/preact-10.13.2.tgz#2c40c73d57248b57234c4ae6cd9ab9d8186ebc0a" @@ -5211,11 +5059,6 @@ real-require@^0.2.0: resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== -reflect-metadata@^0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" - integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== - regenerator-runtime@^0.13.11: version "0.13.11" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" @@ -5305,11 +5148,6 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rusha@^0.8.14: - version "0.8.14" - resolved "https://registry.yarnpkg.com/rusha/-/rusha-0.8.14.tgz#a977d0de9428406138b7bb90d3de5dcd024e2f68" - integrity sha512-cLgakCUf6PedEu15t8kbsjnwIFFR2D4RfL+W3iWFJ4iac7z4B0ZI8fxy4R3J956kAI68HclCFGL8MPoUVC3qVA== - rxjs@^6.6.3: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" @@ -5527,7 +5365,7 @@ split-on-first@^1.0.0: resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== -split2@^4.0.0, split2@^4.1.0: +split2@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== @@ -5560,11 +5398,6 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" @@ -5575,7 +5408,7 @@ strict-uri-encode@^2.0.0: resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -5672,20 +5505,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - thread-stream@^0.15.1: version "0.15.2" resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-0.15.2.tgz#fb95ad87d2f1e28f07116eb23d85aba3bc0425f4" @@ -5783,7 +5602,7 @@ tslib@1.14.1, tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.3.1, tslib@^2.5.0: +tslib@^2.0.0, tslib@^2.3.1: version "2.5.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== @@ -5842,27 +5661,6 @@ typedarray-to-buffer@3.1.5, typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typeorm@^0.3.15: - version "0.3.16" - resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.16.tgz#a001d77b36cfaaf9ff495e15805dd17883116b7b" - integrity sha512-wJ4Qy1oqRKNDdZiBTTaVMqwo/XxC52Q7uNPTjltPgLhvIW173bL6Iad0lhptMOsFlpixFPaUu3PNziaRBwX2Zw== - dependencies: - "@sqltools/formatter" "^1.2.5" - app-root-path "^3.1.0" - buffer "^6.0.3" - chalk "^4.1.2" - cli-highlight "^2.1.11" - date-fns "^2.29.3" - debug "^4.3.4" - dotenv "^16.0.3" - glob "^8.1.0" - mkdirp "^2.1.3" - reflect-metadata "^0.1.13" - sha.js "^2.4.11" - tslib "^2.5.0" - uuid "^9.0.0" - yargs "^17.6.2" - typescript@^5.0.4: version "5.0.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b" @@ -6385,7 +6183,7 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^2.1.1, yaml@^2.2.1: +yaml@^2.1.1, yaml@^2.1.3: version "2.2.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.2.tgz#ec551ef37326e6d42872dad1970300f8eb83a073" integrity sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA== @@ -6408,11 +6206,6 @@ yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@^21.1.1: - version "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-unparser@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" @@ -6423,7 +6216,7 @@ yargs-unparser@2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" -yargs@16.2.0, yargs@^16.0.0: +yargs@16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== @@ -6453,19 +6246,6 @@ yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^17.6.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" From acf441acc287e3ab0cef8350fb8503d1060b0fbe Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Thu, 11 May 2023 16:37:23 -0700 Subject: [PATCH 08/24] added Note on README --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index eab4dbbba..960c97270 100644 --- a/README.md +++ b/README.md @@ -20,3 +20,8 @@ Thirdweb's Web3-API server. - [X] Add Read End-point - [X] Add Write End-point - [ ] Add Deployer End-point + + +## Note: + +`docker-compose.yaml` has commented out env variables value. You will need to add a PPK of your test wallet and then you should be able to intereact with the APIs \ No newline at end of file From ccb53c175e0693f76862071b70b616e448391dec Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Fri, 12 May 2023 11:33:31 -0700 Subject: [PATCH 09/24] updated param name & Dockerfile commented --- Dockerfile | 20 ++++++++++---------- docker-compose.yml | 2 +- src/api/contract/read/read.ts | 10 ++++------ src/api/contract/write/write.ts | 10 ++++------ src/sharedApiSchemas.ts | 2 +- 5 files changed, 20 insertions(+), 24 deletions(-) diff --git a/Dockerfile b/Dockerfile index 570f68cd2..38bc886d2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,19 +19,19 @@ ENV PATH /app/node_modules/.bin:$PATH CMD [ "yarn", "dev" ] -FROM base AS dev +# FROM base AS dev -ENV NODE_ENV="development" -RUN yarn install +# ENV NODE_ENV="development" +# RUN yarn install -CMD [ "yarn", "dev" ] +# CMD [ "yarn", "dev" ] -FROM base AS prod +# FROM base AS prod -ENV NODE_ENV="production" +# ENV NODE_ENV="production" -RUN yarn install -RUN yarn build +# RUN yarn install +# RUN yarn build -RUN yarn install --production -CMD [ "yarn", "start" ] \ No newline at end of file +# RUN yarn install --production +# CMD [ "yarn", "start" ] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 8928ddbbd..7190e5ebd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,7 @@ services: build: dockerfile: Dockerfile context: . - target: local + target: prod ports: - 3005:3005 volumes: diff --git a/src/api/contract/read/read.ts b/src/api/contract/read/read.ts index 957d36600..1353a3b61 100644 --- a/src/api/contract/read/read.ts +++ b/src/api/contract/read/read.ts @@ -12,12 +12,10 @@ interface schemaTypes extends RouteGenericInterface { Reply: Static; } -// updated chain to chain_name as I saw SDK needs chain_name -// can update the implementation to retrive chain_name wrt to the chainId passed export async function readContract(fastify: FastifyInstance) { fastify.route({ method: 'GET', - url: '/contract/:chain_name/:contract_address/read', + url: '/contract/:chain_or_rpc/:contract_address/read', schema: { description: 'Read From Contract', tags: ['read'], @@ -25,17 +23,17 @@ export async function readContract(fastify: FastifyInstance) { ...fullRouteSchema, }, handler: async (request, reply) => { - const { chain_name, contract_address } = request.params; + const { chain_or_rpc, contract_address } = request.params; const { function_name, args } = request.query; logger.info("Inside Read Function"); - logger.silly(`Chain : ${chain_name}`) + logger.silly(`Chain : ${chain_or_rpc}`) logger.silly(`Contract Address : ${contract_address}`); logger.silly(`Function Name : ${function_name}`) logger.silly(`Args : ${args}`); - const sdk = await getSDK(chain_name); + const sdk = await getSDK(chain_or_rpc); const contract = await sdk.getContract(contract_address); const returnData: any = await contract.call(function_name, args ? args.split(",") : []); diff --git a/src/api/contract/write/write.ts b/src/api/contract/write/write.ts index 70f1884c9..944d658a5 100644 --- a/src/api/contract/write/write.ts +++ b/src/api/contract/write/write.ts @@ -12,12 +12,10 @@ interface schemaTypes extends RouteGenericInterface { Reply: Static; } -// updated chain to chain_name as I saw SDK needs chain_name -// can update the implementation to retrive chain_name wrt to the chainId passed export async function writeToContract(fastify: FastifyInstance) { fastify.route({ method: 'POST', - url: '/contract/:chain_name/:contract_address/write', + url: '/contract/:chain_or_rpc/:contract_address/write', schema: { description: 'Write From Contract', tags: ['write'], @@ -25,18 +23,18 @@ export async function writeToContract(fastify: FastifyInstance) { ...fullRouteSchema }, handler: async (request, reply) => { - const { chain_name, contract_address } = request.params; + const { chain_or_rpc, contract_address } = request.params; const { function_name, args } = request.query; logger.info("Inside Write Function"); - logger.silly(`Chain : ${chain_name}`) + logger.silly(`Chain : ${chain_or_rpc}`) logger.silly(`Contract Address : ${contract_address}`); logger.silly(`Function Name : ${function_name}`) logger.silly(`Contract Address : ${contract_address}`); logger.silly(`Function Arguments : ${args}`); - const sdk = await getSDK(chain_name); + const sdk = await getSDK(chain_or_rpc); const contract:any = await sdk.getContract(contract_address); const returnData: any = await contract.call(function_name, args ? args.split(",") : []); diff --git a/src/sharedApiSchemas.ts b/src/sharedApiSchemas.ts index 893a5d0c3..3af0ee3a0 100644 --- a/src/sharedApiSchemas.ts +++ b/src/sharedApiSchemas.ts @@ -53,7 +53,7 @@ export const dashboardRequestHeaderSchema = Type.Object({ * Basic schema for all Request Parameters */ export const requestParamSchema = Type.Object({ - chain_name: Type.String(), + chain_or_rpc: Type.String(), contract_address: Type.String(), }); From 4801cfc7e5e9a1a03b0d7f0bd972a61cfdb726e0 Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Fri, 12 May 2023 13:19:10 -0700 Subject: [PATCH 10/24] commented out Analytics Service --- src/services/AnalyticsService.ts | 78 ++++++++++++++++---------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/src/services/AnalyticsService.ts b/src/services/AnalyticsService.ts index 748b8a311..61f971802 100644 --- a/src/services/AnalyticsService.ts +++ b/src/services/AnalyticsService.ts @@ -1,41 +1,41 @@ -import { PostHog } from 'posthog-node'; -import { getEnv } from '../loadEnv'; -import { ApiCallerIdentity } from '../types/fastify'; +// import { PostHog } from 'posthog-node'; +// import { getEnv } from '../loadEnv'; +// import { ApiCallerIdentity } from '../types/fastify'; -const posthogClient = new PostHog(getEnv('POSTHOG_API_KEY'), { - host: 'https://a.thirdweb.com', -}); +// const posthogClient = new PostHog(getEnv('POSTHOG_API_KEY'), { +// host: 'https://a.thirdweb.com', +// }); -export class AnalyticsService { - static trackEvent(args: { - eventName: string; - apiCallerIdentity: ApiCallerIdentity; - data?: any; - }) { - try { - const apiCallerIdentity = args.apiCallerIdentity; - const distinctId = ( - apiCallerIdentity.identityType === 'thirdwebAuthJwt' - ? apiCallerIdentity.thirdwebAuthUser?.address - : apiCallerIdentity.apiKeyInfo?.key - ) as string; - posthogClient.capture({ - distinctId, - event: args.eventName, - properties: { - ...args.data, - authenticationType: apiCallerIdentity.identityType, - jwtWalletAddress: apiCallerIdentity.thirdwebAuthUser?.address, - apiKeyCreatorWalletAddress: - apiCallerIdentity.apiKeyInfo?.creatorWalletAddress, - distinctId, - }, - }); - } catch (e: any) { - console.error( - `AnalyticsService: Failed to send analytics to 3rd party service:`, - e - ); - } - } -} +// export class AnalyticsService { +// static trackEvent(args: { +// eventName: string; +// apiCallerIdentity: ApiCallerIdentity; +// data?: any; +// }) { +// try { +// const apiCallerIdentity = args.apiCallerIdentity; +// const distinctId = ( +// apiCallerIdentity.identityType === 'thirdwebAuthJwt' +// ? apiCallerIdentity.thirdwebAuthUser?.address +// : apiCallerIdentity.apiKeyInfo?.key +// ) as string; +// posthogClient.capture({ +// distinctId, +// event: args.eventName, +// properties: { +// ...args.data, +// authenticationType: apiCallerIdentity.identityType, +// jwtWalletAddress: apiCallerIdentity.thirdwebAuthUser?.address, +// apiKeyCreatorWalletAddress: +// apiCallerIdentity.apiKeyInfo?.creatorWalletAddress, +// distinctId, +// }, +// }); +// } catch (e: any) { +// console.error( +// `AnalyticsService: Failed to send analytics to 3rd party service:`, +// e +// ); +// } +// } +// } From e803eb455704342f8f2e3c62cb490601f3f1e1a1 Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Fri, 12 May 2023 14:47:12 -0700 Subject: [PATCH 11/24] Updated the route to show documentation on base url. Added descriptions & examples --- src/index.ts | 2 +- src/openapi.ts | 2 +- src/sharedApiSchemas.ts | 26 ++++++++++++++++++++------ 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/index.ts b/src/index.ts index 3573c9c73..4319cf039 100644 --- a/src/index.ts +++ b/src/index.ts @@ -44,7 +44,7 @@ const main = async () => { // await server.addHook('onRequest', async (req, res) => { // await apiKeyValidator(req, res); // }); - + await server.ready(); server.swagger(); await server.listen({ diff --git a/src/openapi.ts b/src/openapi.ts index 282cfbd6e..369fdb0b9 100644 --- a/src/openapi.ts +++ b/src/openapi.ts @@ -50,7 +50,7 @@ export const openapi = async (server: FastifyInstance) => { // Not all options are required below // We can change/remove them too. await server.register(fastifySwaggerUI, { - routePrefix: '/documentation', + routePrefix: '/', initOAuth: { }, uiConfig: { docExpansion: 'list', diff --git a/src/sharedApiSchemas.ts b/src/sharedApiSchemas.ts index 3af0ee3a0..22ab3999e 100644 --- a/src/sharedApiSchemas.ts +++ b/src/sharedApiSchemas.ts @@ -37,8 +37,12 @@ export const baseReplyErrorSchema = Nullable(errorSchema); */ export const developerRequestHeaderSchema = Type.Object({ // Optional because the API key is not required for all routes. - 'x-api-key': Type.String(), - 'x-wallet-id': Type.String(), + 'x-api-key': Type.String({ + description: "ThirdWeb API Key" + }), + 'x-wallet-id': Type.String({ + description: "Wallet ID (KMS/Secrets Etc)" + }), }); /** @@ -53,16 +57,26 @@ export const dashboardRequestHeaderSchema = Type.Object({ * Basic schema for all Request Parameters */ export const requestParamSchema = Type.Object({ - chain_or_rpc: Type.String(), - contract_address: Type.String(), + chain_or_rpc: Type.String({ + examples: ["mumbai"], + description: "Add Chain ID or Chain Name or RPC" + }), + contract_address: Type.String({ + examples: ["0xc8be6265C06aC376876b4F62670adB3c4d72EABA"], + description: "Contract Addres on the Chain" + }), }); /** * Basic schema for all Request Query String */ export const requestQuerySchema = Type.Object({ - function_name: Type.String(), - args: Type.Optional(Type.String()), + function_name: Type.String({ + description: "Name of the function to call on Contract" + }), + args: Type.Optional(Type.String({ + description: "Arguments for the function. Comma Separated" + })), }); /** From 11f3e3a3950ae7319c2612bbfdb1b1184332a739 Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Fri, 12 May 2023 16:27:29 -0700 Subject: [PATCH 12/24] Fixed header issue. Updates for quotes. removed use & revoke. --- .DS_Store | Bin 6148 -> 6148 bytes .eslintrc.json | 2 +- docker-compose.yml | 2 +- src/api/contract/read/read.ts | 16 +++---- src/api/contract/write/write.ts | 15 +++---- src/api/index.ts | 4 -- src/api/v1/keys/revoke.ts | 70 ------------------------------ src/api/v1/keys/use.ts | 44 ------------------- src/constants/errors.ts | 8 ++-- src/errorHandler.ts | 2 +- src/helpers/call.ts | 2 +- src/helpers/schema.ts | 4 +- src/helpers/sdk.ts | 6 +-- src/index.ts | 10 +---- src/middleware/apiKeyValidator.ts | 55 ----------------------- src/openapi.ts | 23 ++++------ src/services/AnalyticsService.ts | 41 ----------------- src/sharedApiSchemas.ts | 42 +++++------------- src/types/fastify.d.ts | 45 ------------------- src/utilities/logger.ts | 32 +++++++------- 20 files changed, 64 insertions(+), 359 deletions(-) delete mode 100644 src/api/v1/keys/revoke.ts delete mode 100644 src/api/v1/keys/use.ts delete mode 100644 src/middleware/apiKeyValidator.ts delete mode 100644 src/services/AnalyticsService.ts delete mode 100644 src/types/fastify.d.ts diff --git a/.DS_Store b/.DS_Store index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..1ec089663396993bcd97eaa6f1e58fe0edb8946e 100644 GIT binary patch literal 6148 zcmeHK%Z}496uoW>lg>k`Mj*`wDH7XK$_%Phu_>jqV8LdJU;(HkO(|hAcGa|0sH&7T z`~$zhmM`I7Si!lrM{3fttpNE-_VME$U*{yYVe=X`+Ti$`~wW|Be_Gz>3KRj!#R#orz-TRL&2A9c| zRG%?(n80qW?a1Oa@RQkR{@9<&L`i;U?0rNtXu&(XB!0VN=(kmM@e|(bUq%(*PXHAq z7zz0J&hmN^zo+&0i>k97C}6(=?_dY9TnMLtQ{dlHfcFOXI%T43%+K+E7Vr@&4X_zj|fxq$!x delta 66 zcmZoMXfc=|#>AjHu~2NHo+1YW5HK<@2y7PQ5M$Y_z%h$?Gdl-A2T%b}u84%9H(hI5x+KtY8KJ$3PAT diff --git a/.eslintrc.json b/.eslintrc.json index b49b51598..4e71b23f2 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -12,6 +12,6 @@ "no-console": "off", "@typescript-eslint/explicit-function-return-type": "off", "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }] + "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }], } } \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 7190e5ebd..8928ddbbd 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,7 @@ services: build: dockerfile: Dockerfile context: . - target: prod + target: local ports: - 3005:3005 volumes: diff --git a/src/api/contract/read/read.ts b/src/api/contract/read/read.ts index 1353a3b61..9b9eeea5a 100644 --- a/src/api/contract/read/read.ts +++ b/src/api/contract/read/read.ts @@ -1,10 +1,9 @@ import { FastifyInstance, RouteGenericInterface } from 'fastify'; import { StatusCodes } from 'http-status-codes'; -import { GenericThirdwebRequestContext } from '../../../types/fastify'; -import { getSDK } from "../../../helpers/sdk"; +import { getSDK } from '../../../helpers/sdk'; import { Static } from '@sinclair/typebox'; -import { replyBodySchema, requestParamSchema, requestQuerySchema, fullRouteSchema } from "../../../sharedApiSchemas"; -import { logger } from "../../../utilities/logger"; +import { replyBodySchema, requestParamSchema, requestQuerySchema, fullRouteSchema } from '../../../sharedApiSchemas'; +import { logger } from '../../../utilities/logger'; interface schemaTypes extends RouteGenericInterface { Params: Static; @@ -13,20 +12,19 @@ interface schemaTypes extends RouteGenericInterface { } export async function readContract(fastify: FastifyInstance) { - fastify.route({ + fastify.route({ method: 'GET', url: '/contract/:chain_or_rpc/:contract_address/read', schema: { description: 'Read From Contract', - tags: ['read'], + tags: ["ad"], operationId: 'read', ...fullRouteSchema, }, handler: async (request, reply) => { const { chain_or_rpc, contract_address } = request.params; const { function_name, args } = request.query; - - logger.info("Inside Read Function"); + logger.info('Inside Read Function'); logger.silly(`Chain : ${chain_or_rpc}`) logger.silly(`Contract Address : ${contract_address}`); @@ -36,7 +34,7 @@ export async function readContract(fastify: FastifyInstance) { const sdk = await getSDK(chain_or_rpc); const contract = await sdk.getContract(contract_address); - const returnData: any = await contract.call(function_name, args ? args.split(",") : []); + const returnData: any = await contract.call(function_name, args ? args.split(',') : []); reply.status(StatusCodes.OK).send({ result: { diff --git a/src/api/contract/write/write.ts b/src/api/contract/write/write.ts index 944d658a5..80734f4b4 100644 --- a/src/api/contract/write/write.ts +++ b/src/api/contract/write/write.ts @@ -1,10 +1,9 @@ import { FastifyInstance, RouteGenericInterface } from 'fastify'; -import { Static, Type } from '@sinclair/typebox'; +import { Static } from '@sinclair/typebox'; import { StatusCodes } from 'http-status-codes'; -import { GenericThirdwebRequestContext } from '../../../types/fastify'; -import { getSDK } from "../../../helpers/sdk"; -import { replyBodySchema, requestParamSchema, requestQuerySchema, fullRouteSchema } from "../../../sharedApiSchemas"; -import { logger } from "../../../utilities/logger"; +import { getSDK } from '../../../helpers/sdk'; +import { replyBodySchema, requestParamSchema, requestQuerySchema, fullRouteSchema } from '../../../sharedApiSchemas'; +import { logger } from '../../../utilities/logger'; interface schemaTypes extends RouteGenericInterface { Params: Static; @@ -13,7 +12,7 @@ interface schemaTypes extends RouteGenericInterface { } export async function writeToContract(fastify: FastifyInstance) { - fastify.route({ + fastify.route({ method: 'POST', url: '/contract/:chain_or_rpc/:contract_address/write', schema: { @@ -26,7 +25,7 @@ export async function writeToContract(fastify: FastifyInstance) { const { chain_or_rpc, contract_address } = request.params; const { function_name, args } = request.query; - logger.info("Inside Write Function"); + logger.info('Inside Write Function'); logger.silly(`Chain : ${chain_or_rpc}`) logger.silly(`Contract Address : ${contract_address}`); @@ -37,7 +36,7 @@ export async function writeToContract(fastify: FastifyInstance) { const sdk = await getSDK(chain_or_rpc); const contract:any = await sdk.getContract(contract_address); - const returnData: any = await contract.call(function_name, args ? args.split(",") : []); + const returnData: any = await contract.call(function_name, args ? args.split(',') : []); reply.status(StatusCodes.OK).send({ result: { diff --git a/src/api/index.ts b/src/api/index.ts index 8b43f92af..9a02fd659 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -1,12 +1,8 @@ import { FastifyInstance } from 'fastify'; -import { useApiKeyRoute } from './v1/keys/use'; import { readContract } from './contract/read/read'; -import { revokeApiKeyRoute } from './v1/keys/revoke'; import { writeToContract } from './contract/write/write'; export const apiRoutes = async (fastify: FastifyInstance) => { await fastify.register(readContract); await fastify.register(writeToContract); - await fastify.register(revokeApiKeyRoute); - await fastify.register(useApiKeyRoute); }; diff --git a/src/api/v1/keys/revoke.ts b/src/api/v1/keys/revoke.ts deleted file mode 100644 index 017b45581..000000000 --- a/src/api/v1/keys/revoke.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { FastifyInstance, RouteGenericInterface } from 'fastify'; -import { Static, Type } from '@sinclair/typebox'; -import { StatusCodes } from 'http-status-codes'; -// import { AnalyticsService } from '../../../services/AnalyticsService'; -import { GenericThirdwebRequestContext } from '../../../types/fastify'; -import { ThirdwebAuthUser } from '@thirdweb-dev/auth/dist/declarations/src/express/types'; -import { replyBodySchema, requestBodySchemaForRevoke, fullRouteSchema } from "../../../sharedApiSchemas"; -import { logger } from "../../../utilities/logger"; - -interface schemaTypes extends RouteGenericInterface { - Body: Static; - Reply: Static; -} - -export async function revokeApiKeyRoute(fastify: FastifyInstance) { - fastify.route({ - method: 'POST', - url: '/v1/keys/revoke', - schema: { - description: 'Keys Revoke End-Point', - tags: ['api'], - ...fullRouteSchema - }, - handler: async (request, reply) => { - // console.log('routeConfig', request.context) - const user = request.context.config.apiCallerIdentity - .thirdwebAuthUser as ThirdwebAuthUser; - - // const apiKeyInfo = await ApiKeyService.prisma.apiKeyInfo.findFirst({ - // where: { - // key: request.body.key, - // revoked: false, - // }, - // }); - - // Make sure the API key exists - // if (!apiKeyInfo) { - // reply.status(API_KEY_REPLY_ERRORS.INVALID_API_KEY.statusCode).send({ - // error: API_KEY_REPLY_ERRORS.INVALID_API_KEY, - // }); - // return; - // } - - // Make sure the user owns the API key - // if (apiKeyInfo?.creatorWalletAddress !== user?.address) { - // reply - // .status(API_KEY_REPLY_ERRORS.UNAUTHORIZED_REVOCATION.statusCode) - // .send({ - // error: API_KEY_REPLY_ERRORS.UNAUTHORIZED_REVOCATION, - // }); - // return; - // } - - // // Revoke - // await ApiKeyService.revokeApiKey({ - // apiKey: request.body.key, - // }); - - // // Track event - // AnalyticsService.trackEvent({ - // apiCallerIdentity: request.context.config.apiCallerIdentity, - // eventName: 'api_keys.revoke', - // }); - - reply.status(StatusCodes.OK).send({ - error: null, - }); - }, - }); -} diff --git a/src/api/v1/keys/use.ts b/src/api/v1/keys/use.ts deleted file mode 100644 index b20b8f4b5..000000000 --- a/src/api/v1/keys/use.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { FastifyInstance, RouteGenericInterface } from 'fastify'; -import { Static, Type } from '@sinclair/typebox'; -import { - baseReplyErrorSchema, - developerRequestHeaderSchema, -} from '../../../sharedApiSchemas'; -import { StatusCodes } from 'http-status-codes'; -// import { AnalyticsService } from '../../../services/AnalyticsService'; -import { FastifySchema } from 'fastify/types/schema'; -import { GenericThirdwebRequestContext } from '../../../types/fastify'; -import { replyBodySchema, requestBodySchemaForUse, fullRouteSchema } from "../../../sharedApiSchemas"; -import { logger } from "../../../utilities/logger"; - -interface schemaTypes extends RouteGenericInterface { - Headers: Static; - Body: Static; - Reply: Static; -} - -export async function useApiKeyRoute(fastify: FastifyInstance) { - fastify.route({ - method: 'POST', - url: '/v1/keys/use', - schema: { - description: 'Keys Use End-Point', - tags: ['api'], - ...fullRouteSchema - }, - handler: async (request, reply) => { - // Track event - const apiCallerIdentity = request.context.config.apiCallerIdentity; - // AnalyticsService.trackEvent({ - // eventName: `${request.body.scope}`, - // apiCallerIdentity, - // }); - - /* If the request made it this far, the API key is valid */ - reply.status(StatusCodes.OK).send({ - authorized: true, - error: null, - }); - }, - }); -} diff --git a/src/constants/errors.ts b/src/constants/errors.ts index 926929047..f91e09ba7 100644 --- a/src/constants/errors.ts +++ b/src/constants/errors.ts @@ -12,21 +12,21 @@ export const API_KEY_REPLY_ERRORS: Record< MISSING_API_KEY: { code: 'MISSING_API_KEY', message: - "The API key is missing. Make sure 'x-api-key' is included with your request header.", + 'The API key is missing. Make sure 'x-api-key' is included with your request header.', statusCode: StatusCodes.BAD_REQUEST, }, INVALID_API_KEY: { code: 'INVALID_API_KEY', message: - "The API key is invalid. Make sure you've entered the right one, or generate a new one.", + 'The API key is invalid. Make sure you've entered the right one, or generate a new one.', statusCode: StatusCodes.UNAUTHORIZED, }, UNAUTHORIZED_REVOCATION: { code: 'UNAUTHORIZED_REVOCATION', message: - "You are not authorized to revoke this API key. Make sure you've entered the right one.", + 'You are not authorized to revoke this API key. Make sure you've entered the right one.', statusCode: StatusCodes.UNAUTHORIZED, }, @@ -45,7 +45,7 @@ export const API_KEY_REPLY_ERRORS: Record< UNAUTHORIZED: { code: 'UNAUTHORIZED', message: - "API Key provided is not valid", + 'API Key provided is not valid', statusCode: StatusCodes.UNAUTHORIZED, }, }; \ No newline at end of file diff --git a/src/errorHandler.ts b/src/errorHandler.ts index 51c93b0dd..6c58f6bc5 100644 --- a/src/errorHandler.ts +++ b/src/errorHandler.ts @@ -5,7 +5,7 @@ import { FastifyInstance } from 'fastify'; export const errorHandler = async (server: FastifyInstance) => { server.setErrorHandler((error, request, reply) => { - console.log("===>", error); + console.log('===>', error); // Transform unexpected errors into a standard payload const statusCode = error.statusCode ?? StatusCodes.INTERNAL_SERVER_ERROR; const code = diff --git a/src/helpers/call.ts b/src/helpers/call.ts index e853641bb..9792b79bf 100644 --- a/src/helpers/call.ts +++ b/src/helpers/call.ts @@ -1,4 +1,4 @@ -import { NextFunction } from "express"; +import { NextFunction } from 'express'; interface EnforceCallParams { call: () => Promise; diff --git a/src/helpers/schema.ts b/src/helpers/schema.ts index 4dbdc6f72..0944772fb 100644 --- a/src/helpers/schema.ts +++ b/src/helpers/schema.ts @@ -1,5 +1,5 @@ -import { z } from "zod"; -import { NextFunction } from "express"; +import { z } from 'zod'; +import { NextFunction } from 'express'; interface EnforceSchemaParams { data: any; diff --git a/src/helpers/sdk.ts b/src/helpers/sdk.ts index b858556b9..39e048f9e 100644 --- a/src/helpers/sdk.ts +++ b/src/helpers/sdk.ts @@ -1,7 +1,7 @@ -import { ThirdwebSDK, ChainOrRpc } from "@thirdweb-dev/sdk"; +import { ThirdwebSDK, ChainOrRpc } from '@thirdweb-dev/sdk'; import { getEnv } from '../loadEnv'; -import { logger } from "../utilities/logger"; -// import { AwsKmsWallet } from "@thirdweb-dev/sdk/evm/wallets"; +import { logger } from '../utilities/logger'; +// import { AwsKmsWallet } from '@thirdweb-dev/sdk/evm/wallets'; // Cache the SDK in memory so it doesn't get reinstantiated unless the server crashes // This saves us from making a request to get the private key for reinstantiation on every request diff --git a/src/index.ts b/src/index.ts index 4319cf039..f343f9894 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,3 @@ -// import './fastify.d.ts' import { getEnv } from './loadEnv'; import fastify, { FastifyInstance } from 'fastify'; import fastifyExpress from '@fastify/express'; @@ -7,9 +6,8 @@ import { openapi } from './openapi'; import { errorHandler } from './errorHandler'; import fastifyCors from '@fastify/cors'; import { apiRoutes } from './api'; -import { GenericApiReply, GenericApiRequest } from './types/fastify'; import cookie, { FastifyCookieOptions } from '@fastify/cookie'; -import { apiKeyValidator } from "./middleware/apiKeyValidator"; +import { logger } from './utilities/logger'; const logSettings: any = { // local: { @@ -40,10 +38,6 @@ const main = async () => { await server.register(fastifyExpress); openapi(server); await server.register(apiRoutes); - - // await server.addHook('onRequest', async (req, res) => { - // await apiKeyValidator(req, res); - // }); await server.ready(); server.swagger(); @@ -51,7 +45,7 @@ const main = async () => { host: getEnv('HOST'), port: Number(getEnv('PORT')), }, ()=>{ - console.log(`Server listening on ${getEnv('HOST')}:${getEnv('PORT')}`) + logger.info(`Server listening on ${getEnv('HOST')}:${getEnv('PORT')}`) }); }; diff --git a/src/middleware/apiKeyValidator.ts b/src/middleware/apiKeyValidator.ts deleted file mode 100644 index e7f0b9396..000000000 --- a/src/middleware/apiKeyValidator.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { FastifyInstance, FastifyReply, FastifyRequest } from 'fastify'; -import axios, { AxiosResponse } from 'axios'; -import { getEnv } from '../loadEnv'; - -interface ValidationResponse { - data: { - authorized: boolean; - }; - error: { - message: string; - statusCode: number; - }; -} - -export const apiKeyValidator = async (request: FastifyRequest, reply: FastifyReply): Promise => { - const key = request.headers['x-api-key'] as string; - try { - const response: AxiosResponse = await axios.post( - `${getEnv('THIRDWEB_API_ORIGIN')}/v1/keys/use`, - { - body: JSON.stringify({ - scope: 'web3-api', // We will need to change the scope dynamically based on the request - }), - }, - { - headers: { - 'Content-Type': 'application/json', - 'x-api-key': key, - }, - validateStatus: function (status) { - return status < 500; // Resolve only if the status code is less than 500 - }, - } - ); - if (response.data.error) { - reply - .status(response.data.error.statusCode) - .send({ message: response.data.error.message }); - return false; - } - return true; - } catch (error: any) { - console.error(`Error while validating API key: ${error.message}`); - console.error( - 'The API verification server may be down. The client will be permitted to continue.' - ); - - reply - .status(error.statusCode) - .send({ message: error.message }); - return false; - } -}; - -export default apiKeyValidator; \ No newline at end of file diff --git a/src/openapi.ts b/src/openapi.ts index 369fdb0b9..50c65a164 100644 --- a/src/openapi.ts +++ b/src/openapi.ts @@ -23,27 +23,22 @@ export const openapi = async (server: FastifyInstance) => { components: { // To show schemas on the Docs if needed, uncomment // schemas:{ - // "read": { - // "type": "object" + // 'read': { + // 'type': 'object' // } // }, securitySchemes: { - apiKey: { + sharedSecret: { type: 'apiKey', - name: 'x-api-key', - in: 'header', - }, - walletId: { - type: 'apiKey', - name: 'x-wallet-Id', + name: 'x-shared-secret', in: 'header', + description: "For Secure Server-Server Calls" }, }, }, - externalDocs: { - url: 'https://thirdweb.com', - description: 'Find more info here' - }, + security: [{ + sharedSecret: [] + }] }, }); @@ -62,6 +57,6 @@ export const openapi = async (server: FastifyInstance) => { preHandler: function (request, reply, next) { next() } }, staticCSP: true, - transformStaticCSP: (header) => header + transformStaticCSP: (header) => header, }) }; diff --git a/src/services/AnalyticsService.ts b/src/services/AnalyticsService.ts deleted file mode 100644 index 61f971802..000000000 --- a/src/services/AnalyticsService.ts +++ /dev/null @@ -1,41 +0,0 @@ -// import { PostHog } from 'posthog-node'; -// import { getEnv } from '../loadEnv'; -// import { ApiCallerIdentity } from '../types/fastify'; - -// const posthogClient = new PostHog(getEnv('POSTHOG_API_KEY'), { -// host: 'https://a.thirdweb.com', -// }); - -// export class AnalyticsService { -// static trackEvent(args: { -// eventName: string; -// apiCallerIdentity: ApiCallerIdentity; -// data?: any; -// }) { -// try { -// const apiCallerIdentity = args.apiCallerIdentity; -// const distinctId = ( -// apiCallerIdentity.identityType === 'thirdwebAuthJwt' -// ? apiCallerIdentity.thirdwebAuthUser?.address -// : apiCallerIdentity.apiKeyInfo?.key -// ) as string; -// posthogClient.capture({ -// distinctId, -// event: args.eventName, -// properties: { -// ...args.data, -// authenticationType: apiCallerIdentity.identityType, -// jwtWalletAddress: apiCallerIdentity.thirdwebAuthUser?.address, -// apiKeyCreatorWalletAddress: -// apiCallerIdentity.apiKeyInfo?.creatorWalletAddress, -// distinctId, -// }, -// }); -// } catch (e: any) { -// console.error( -// `AnalyticsService: Failed to send analytics to 3rd party service:`, -// e -// ); -// } -// } -// } diff --git a/src/sharedApiSchemas.ts b/src/sharedApiSchemas.ts index 22ab3999e..4103cd468 100644 --- a/src/sharedApiSchemas.ts +++ b/src/sharedApiSchemas.ts @@ -32,38 +32,17 @@ export const Nullable = (type: T) => */ export const baseReplyErrorSchema = Nullable(errorSchema); -/** - * Basic schema for all API request headers. - */ -export const developerRequestHeaderSchema = Type.Object({ - // Optional because the API key is not required for all routes. - 'x-api-key': Type.String({ - description: "ThirdWeb API Key" - }), - 'x-wallet-id': Type.String({ - description: "Wallet ID (KMS/Secrets Etc)" - }), -}); - -/** - * Basic schema for all Dashboard request headers. - */ -export const dashboardRequestHeaderSchema = Type.Object({ - // Optional because the API key is not required for all routes. - Authorization: Type.String(), -}); - /** * Basic schema for all Request Parameters */ export const requestParamSchema = Type.Object({ chain_or_rpc: Type.String({ - examples: ["mumbai"], - description: "Add Chain ID or Chain Name or RPC" + examples: ['mumbai'], + description: 'Add Chain ID or Chain Name or RPC' }), contract_address: Type.String({ - examples: ["0xc8be6265C06aC376876b4F62670adB3c4d72EABA"], - description: "Contract Addres on the Chain" + examples: ['0xc8be6265C06aC376876b4F62670adB3c4d72EABA'], + description: 'Contract Addres on the Chain' }), }); @@ -72,10 +51,10 @@ export const requestParamSchema = Type.Object({ */ export const requestQuerySchema = Type.Object({ function_name: Type.String({ - description: "Name of the function to call on Contract" + description: 'Name of the function to call on Contract' }), args: Type.Optional(Type.String({ - description: "Arguments for the function. Comma Separated" + description: 'Arguments for the function. Comma Separated' })), }); @@ -109,25 +88,24 @@ export const replyBodySchema = Type.Object({ * Basic Fastify schema for request/response */ export const fullRouteSchema: FastifySchema = { - headers: developerRequestHeaderSchema, params: requestParamSchema, querystring: requestQuerySchema, response: { [StatusCodes.OK]: replyBodySchema, [StatusCodes.UNAUTHORIZED]: { - description: "Authentication information is missing or invalid", + description: 'Authentication information is missing or invalid', ...replyBodySchema, }, [StatusCodes.BAD_REQUEST]: { - description: "Bad Request", + description: 'Bad Request', ...replyBodySchema, }, [StatusCodes.NOT_FOUND]: { - description: "Method Nor Found", + description: 'Method Nor Found', ...replyBodySchema, }, [StatusCodes.INTERNAL_SERVER_ERROR]: { - description: "Internal Server Error", + description: 'Internal Server Error', ...replyBodySchema, } }, diff --git a/src/types/fastify.d.ts b/src/types/fastify.d.ts deleted file mode 100644 index e8e48b91e..000000000 --- a/src/types/fastify.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { ApiKeyInfo, PrismaClient } from '@prisma/client'; -import { Json } from '@thirdweb-dev/auth/dist/declarations/src/core/schema'; -import { Request } from 'express'; -import { - ThirdwebAuthContext, - ThirdwebAuthUser, -} from '@thirdweb-dev/auth/dist/declarations/src/express/types'; -import { - FastifyReply, - FastifyRequest, - RawServerDefault, - RouteGenericInterface, -} from 'fastify'; -import { RawRequestDefaultExpression } from 'fastify/types/utils'; -import { FastifySchema } from 'fastify/types/schema'; -import { FastifyTypeProviderDefault } from 'fastify/types/type-provider'; - -declare module 'fastify' { - interface FastifyInstance { - - getUser( - req: Request, - ctx: ThirdwebAuthContext - ): Promise | null>; - } -} - -export interface ApiCallerIdentity { - identityType: 'thirdwebAuthJwt' | 'thirdwebApiKey' | null; - thirdwebAuthUser?: ThirdwebAuthUser; - apiKeyInfo?: ApiKeyInfo; -} -export interface GenericThirdwebRequestContext extends ThirdwebAuthContext { - apiCallerIdentity: ApiCallerIdentity; -} - -export type GenericApiRequest = FastifyRequest< - RouteGenericInterface, - RawServerDefault, - RawRequestDefaultExpression, - FastifySchema, - FastifyTypeProviderDefault, - GenericThirdwebRequestContext, ->; -export type GenericApiReply = FastifyReply; diff --git a/src/utilities/logger.ts b/src/utilities/logger.ts index d34da4a9c..aa6915f14 100644 --- a/src/utilities/logger.ts +++ b/src/utilities/logger.ts @@ -1,9 +1,9 @@ -import { createLogger, transports, format} from "winston"; -import { getEnv } from "../loadEnv"; +import { createLogger, transports, format} from 'winston'; +import { getEnv } from '../loadEnv'; -let log_level = "info"; +let log_level = 'info'; if (getEnv('NODE_ENV') !== 'production') { - log_level = "silly"; + log_level = 'silly'; } export const logger = createLogger({ @@ -17,7 +17,7 @@ export const logger = createLogger({ }, format: format.combine( format.timestamp({ - format: "YYYY-MM-DD HH:mm:ss", + format: 'YYYY-MM-DD HH:mm:ss', }), format.errors({stack: true}), format.splat(), @@ -25,26 +25,26 @@ export const logger = createLogger({ ), // timestamp: true, // expressFormat: true, - defaultMeta: { service: "web3-api"}, + defaultMeta: { service: 'web3-api'}, // transport: {}, // handleExceptions: true, // humanReadableUnhandledException: true, // exitOnError: false }); -if (getEnv('NODE_ENV') !== "production"){ +if (getEnv('NODE_ENV') !== 'production'){ logger.add( new transports.Console({ - level: log_level || "silly", + level: log_level || 'silly', format: format.combine( format.colorize(), format.prettyPrint(), format.splat(), format.printf((info: any) => { - if ("stack" in info) { + if ('stack' in info) { return `[${info.level}] : ${info.timestamp} : ${info.stack}`; } - if (typeof info.message === "object") { + if (typeof info.message === 'object') { info.message = JSON.stringify(info.message, null, 4); } return `[${info.level}] : ${info.timestamp} : ${info.message}`; @@ -59,10 +59,10 @@ if (getEnv('NODE_ENV') !== "production"){ format: format.combine( format.splat(), format.printf((info: any) => { - if ("stack" in info) { + if ('stack' in info) { return `[${info.level}] : ${info.timestamp} : ${info.stack}`; } - if (typeof info.message === "object") { + if (typeof info.message === 'object') { info.message = JSON.stringify(info.message, null, 4); } return `[${info.level}] : ${info.timestamp} : ${info.message}`; @@ -73,12 +73,12 @@ if (getEnv('NODE_ENV') !== "production"){ } logger.exceptions.handle(new transports.Console()); -process.on("unhandledRejection", (ex) => { - logger.error("Unhandled Rejection Error"); +process.on('unhandledRejection', (ex) => { + logger.error('Unhandled Rejection Error'); logger.error(ex); }); -process.on("uncaughtException", (ex) => { - logger.error("uncaught Exception Error"); +process.on('uncaughtException', (ex) => { + logger.error('uncaught Exception Error'); logger.error(ex); }); From fd98be8996c6a92a743a76b049ad8fdae1016233 Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Fri, 12 May 2023 16:33:26 -0700 Subject: [PATCH 13/24] Added API_KEY as ENV --- src/helpers/sdk.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/helpers/sdk.ts b/src/helpers/sdk.ts index 39e048f9e..e832f654d 100644 --- a/src/helpers/sdk.ts +++ b/src/helpers/sdk.ts @@ -14,8 +14,8 @@ export async function getSDK(chainName: ChainOrRpc): Promise { // Need to make this instantiate SDK with read/write. For that will need wallet information // Currently only doing read-only mode as per Docs - if (getEnv('NODE_ENV') === 'local'){ - sdkMap[chainName] = await ThirdwebSDK.fromPrivateKey(getEnv('WALLET_PRIVATE_KEY'), chainName); + if (getEnv('NODE_ENV') === 'local'){) + sdkMap[chainName] = await ThirdwebSDK.fromPrivateKey(getEnv('WALLET_PRIVATE_KEY'), chainName, {thirdwebApiKey: getEnv('API_KEY')}); } // else if (getEnv('USE_WALLET') === 'true') { // const wallet = new AwsKmsWallet({ From c3d6c0683dee995dd10526e77ee5890bbeeee0a5 Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Fri, 12 May 2023 16:34:46 -0700 Subject: [PATCH 14/24] fixed error messages --- src/constants/errors.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/constants/errors.ts b/src/constants/errors.ts index f91e09ba7..1b4c5b151 100644 --- a/src/constants/errors.ts +++ b/src/constants/errors.ts @@ -12,21 +12,21 @@ export const API_KEY_REPLY_ERRORS: Record< MISSING_API_KEY: { code: 'MISSING_API_KEY', message: - 'The API key is missing. Make sure 'x-api-key' is included with your request header.', + "The API key is missing. Make sure 'x-api-key' is included with your request header.", statusCode: StatusCodes.BAD_REQUEST, }, INVALID_API_KEY: { code: 'INVALID_API_KEY', message: - 'The API key is invalid. Make sure you've entered the right one, or generate a new one.', + "The API key is invalid. Make sure you've entered the right one, or generate a new one.", statusCode: StatusCodes.UNAUTHORIZED, }, UNAUTHORIZED_REVOCATION: { code: 'UNAUTHORIZED_REVOCATION', message: - 'You are not authorized to revoke this API key. Make sure you've entered the right one.', + "You are not authorized to revoke this API key. Make sure you've entered the right one.", statusCode: StatusCodes.UNAUTHORIZED, }, From 50c55b152201351e7f398374649f0dcc4f509ef0 Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Fri, 12 May 2023 16:37:39 -0700 Subject: [PATCH 15/24] fixed build error --- src/helpers/sdk.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/helpers/sdk.ts b/src/helpers/sdk.ts index e832f654d..00725f9c1 100644 --- a/src/helpers/sdk.ts +++ b/src/helpers/sdk.ts @@ -14,7 +14,7 @@ export async function getSDK(chainName: ChainOrRpc): Promise { // Need to make this instantiate SDK with read/write. For that will need wallet information // Currently only doing read-only mode as per Docs - if (getEnv('NODE_ENV') === 'local'){) + if (getEnv('NODE_ENV') === 'local'){ sdkMap[chainName] = await ThirdwebSDK.fromPrivateKey(getEnv('WALLET_PRIVATE_KEY'), chainName, {thirdwebApiKey: getEnv('API_KEY')}); } // else if (getEnv('USE_WALLET') === 'true') { From d9395e34513d0aae71ac134d2e52bbaed1c866f0 Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Fri, 12 May 2023 16:41:08 -0700 Subject: [PATCH 16/24] fixed parameter name --- src/api/contract/read/read.ts | 10 +++++----- src/api/contract/write/write.ts | 8 ++++---- src/sharedApiSchemas.ts | 4 ++-- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/api/contract/read/read.ts b/src/api/contract/read/read.ts index 9b9eeea5a..eb50e0b4c 100644 --- a/src/api/contract/read/read.ts +++ b/src/api/contract/read/read.ts @@ -14,24 +14,24 @@ interface schemaTypes extends RouteGenericInterface { export async function readContract(fastify: FastifyInstance) { fastify.route({ method: 'GET', - url: '/contract/:chain_or_rpc/:contract_address/read', + url: '/contract/:chain_name_or_id/:contract_address/read', schema: { description: 'Read From Contract', - tags: ["ad"], + tags: ['read'], operationId: 'read', ...fullRouteSchema, }, handler: async (request, reply) => { - const { chain_or_rpc, contract_address } = request.params; + const { chain_name_or_id, contract_address } = request.params; const { function_name, args } = request.query; logger.info('Inside Read Function'); - logger.silly(`Chain : ${chain_or_rpc}`) + logger.silly(`Chain : ${chain_name_or_id}`) logger.silly(`Contract Address : ${contract_address}`); logger.silly(`Function Name : ${function_name}`) logger.silly(`Args : ${args}`); - const sdk = await getSDK(chain_or_rpc); + const sdk = await getSDK(chain_name_or_id); const contract = await sdk.getContract(contract_address); const returnData: any = await contract.call(function_name, args ? args.split(',') : []); diff --git a/src/api/contract/write/write.ts b/src/api/contract/write/write.ts index 80734f4b4..a3ba90177 100644 --- a/src/api/contract/write/write.ts +++ b/src/api/contract/write/write.ts @@ -14,7 +14,7 @@ interface schemaTypes extends RouteGenericInterface { export async function writeToContract(fastify: FastifyInstance) { fastify.route({ method: 'POST', - url: '/contract/:chain_or_rpc/:contract_address/write', + url: '/contract/:chain_name_or_id/:contract_address/write', schema: { description: 'Write From Contract', tags: ['write'], @@ -22,18 +22,18 @@ export async function writeToContract(fastify: FastifyInstance) { ...fullRouteSchema }, handler: async (request, reply) => { - const { chain_or_rpc, contract_address } = request.params; + const { chain_name_or_id, contract_address } = request.params; const { function_name, args } = request.query; logger.info('Inside Write Function'); - logger.silly(`Chain : ${chain_or_rpc}`) + logger.silly(`Chain : ${chain_name_or_id}`) logger.silly(`Contract Address : ${contract_address}`); logger.silly(`Function Name : ${function_name}`) logger.silly(`Contract Address : ${contract_address}`); logger.silly(`Function Arguments : ${args}`); - const sdk = await getSDK(chain_or_rpc); + const sdk = await getSDK(chain_name_or_id); const contract:any = await sdk.getContract(contract_address); const returnData: any = await contract.call(function_name, args ? args.split(',') : []); diff --git a/src/sharedApiSchemas.ts b/src/sharedApiSchemas.ts index 4103cd468..541d81044 100644 --- a/src/sharedApiSchemas.ts +++ b/src/sharedApiSchemas.ts @@ -36,9 +36,9 @@ export const baseReplyErrorSchema = Nullable(errorSchema); * Basic schema for all Request Parameters */ export const requestParamSchema = Type.Object({ - chain_or_rpc: Type.String({ + chain_name_or_id: Type.String({ examples: ['mumbai'], - description: 'Add Chain ID or Chain Name or RPC' + description: 'Add Chain ID or Chain Name' }), contract_address: Type.String({ examples: ['0xc8be6265C06aC376876b4F62670adB3c4d72EABA'], From 06157e629795b30d989d954cbda18616b668779f Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Fri, 12 May 2023 17:46:10 -0700 Subject: [PATCH 17/24] updated README --- README.md | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 960c97270..b93960a28 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,16 @@ Thirdweb's Web3-API server. +## ENV Variables + +``` +PORT=3005 +OPENAPI_BASE_ORIGIN="http://localhost:3005" +HOST="0.0.0.0" +WALLET_PRIVATE_KEY="" +API_KEY="TEST" +``` + ## Getting Started 1. Install packages: `yarn` @@ -24,4 +34,44 @@ Thirdweb's Web3-API server. ## Note: -`docker-compose.yaml` has commented out env variables value. You will need to add a PPK of your test wallet and then you should be able to intereact with the APIs \ No newline at end of file +`docker-compose.yaml` has commented out env variables value. You will need to add a PPK of your test wallet and then you should be able to intereact with the APIs + +## Example + +``` +Example 1: + - function_name: balanceOf + - args: // My Wallet: 0x1946267d81fb8adeeea28e6b98bcd446c8248473 + - chain_or_rpc: mumbai + - contract_address: 0xc8be6265C06aC376876b4F62670adB3c4d72EABA + - x-api-key : [future iterations will have key checking too] + - x-wallet_id : [future iterations will have wallet checking/retrieval too] + +Response: + +{ + "result": { + "data": "1" //Since my wallet has 1 NFT + }, + "error": null +} + +---------- + +Example 2: + - function_name: name + - args: // Leave Empty + - chain_or_rpc: mumbai + - contract_address: 0xc8be6265C06aC376876b4F62670adB3c4d72EABA + - x-api-key : [future iterations will have key checking too] + - x-wallet_id : [future iterations will have wallet checking/retrieval too] + +Response: + +{ + "result": { + "data": "Mumba" + }, + "error": null +} +``` \ No newline at end of file From 88bce22bca0233722b2a5e18c61b91844759c790 Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Tue, 16 May 2023 16:22:13 -0700 Subject: [PATCH 18/24] Added ERC20 Standard Extensions. Re-organized Schemas, Routes etc --- src/api/contract/extensions/erc1155/read.ts | 42 +++++++++++++++++ src/api/contract/extensions/erc1155/write.ts | 44 +++++++++++++++++ src/api/contract/extensions/erc20/index.ts | 25 ++++++++++ .../extensions/erc20/standard/allowance.ts | 45 ++++++++++++++++++ .../extensions/erc20/standard/allowanceOf.ts | 46 ++++++++++++++++++ .../extensions/erc20/standard/balance.ts | 40 ++++++++++++++++ .../extensions/erc20/standard/balanceOf.ts | 43 +++++++++++++++++ .../contract/extensions/erc20/standard/get.ts | 44 +++++++++++++++++ .../erc20/standard/normalizeAmount.ts | 46 ++++++++++++++++++ .../extensions/erc20/standard/setAllowance.ts | 39 +++++++++++++++ .../extensions/erc20/standard/totalSupply.ts | 47 +++++++++++++++++++ .../extensions/erc20/standard/transfer.ts | 43 +++++++++++++++++ .../extensions/erc20/standard/transferFrom.ts | 44 +++++++++++++++++ src/api/contract/extensions/erc721/read.ts | 41 ++++++++++++++++ src/api/contract/extensions/erc721/write.ts | 43 +++++++++++++++++ src/api/contract/extensions/index.ts | 0 src/api/contract/read/read.ts | 20 ++++---- src/api/contract/write/write.ts | 20 ++++---- src/api/index.ts | 6 +++ src/openapi.ts | 4 ++ src/schemas/contract/index.ts | 35 ++++++++++++++ src/schemas/contract/read.ts | 15 ++++++ src/schemas/contract/write.ts | 15 ++++++ src/schemas/erc20/sharedSchema.ts | 0 src/schemas/erc20/standard/allowance.ts | 31 ++++++++++++ src/schemas/erc20/standard/allowanceOf.ts | 35 ++++++++++++++ src/schemas/erc20/standard/balance.ts | 17 +++++++ src/schemas/erc20/standard/balanceOf.ts | 31 ++++++++++++ src/schemas/erc20/standard/get.ts | 17 +++++++ src/schemas/erc20/standard/normalizeAmount.ts | 24 ++++++++++ src/schemas/erc20/standard/setAllownce.ts | 20 ++++++++ src/schemas/erc20/standard/totalSupply.ts | 19 ++++++++ src/schemas/erc20/standard/transfer.ts | 20 ++++++++ src/schemas/erc20/standard/transferFrom.ts | 24 ++++++++++ src/sharedApiSchemas.ts | 42 ++++------------- tsconfig.json | 2 +- 36 files changed, 976 insertions(+), 53 deletions(-) create mode 100644 src/api/contract/extensions/erc1155/read.ts create mode 100644 src/api/contract/extensions/erc1155/write.ts create mode 100644 src/api/contract/extensions/erc20/index.ts create mode 100644 src/api/contract/extensions/erc20/standard/allowance.ts create mode 100644 src/api/contract/extensions/erc20/standard/allowanceOf.ts create mode 100644 src/api/contract/extensions/erc20/standard/balance.ts create mode 100644 src/api/contract/extensions/erc20/standard/balanceOf.ts create mode 100644 src/api/contract/extensions/erc20/standard/get.ts create mode 100644 src/api/contract/extensions/erc20/standard/normalizeAmount.ts create mode 100644 src/api/contract/extensions/erc20/standard/setAllowance.ts create mode 100644 src/api/contract/extensions/erc20/standard/totalSupply.ts create mode 100644 src/api/contract/extensions/erc20/standard/transfer.ts create mode 100644 src/api/contract/extensions/erc20/standard/transferFrom.ts create mode 100644 src/api/contract/extensions/erc721/read.ts create mode 100644 src/api/contract/extensions/erc721/write.ts create mode 100644 src/api/contract/extensions/index.ts create mode 100644 src/schemas/contract/index.ts create mode 100644 src/schemas/contract/read.ts create mode 100644 src/schemas/contract/write.ts create mode 100644 src/schemas/erc20/sharedSchema.ts create mode 100644 src/schemas/erc20/standard/allowance.ts create mode 100644 src/schemas/erc20/standard/allowanceOf.ts create mode 100644 src/schemas/erc20/standard/balance.ts create mode 100644 src/schemas/erc20/standard/balanceOf.ts create mode 100644 src/schemas/erc20/standard/get.ts create mode 100644 src/schemas/erc20/standard/normalizeAmount.ts create mode 100644 src/schemas/erc20/standard/setAllownce.ts create mode 100644 src/schemas/erc20/standard/totalSupply.ts create mode 100644 src/schemas/erc20/standard/transfer.ts create mode 100644 src/schemas/erc20/standard/transferFrom.ts diff --git a/src/api/contract/extensions/erc1155/read.ts b/src/api/contract/extensions/erc1155/read.ts new file mode 100644 index 000000000..72a965bb8 --- /dev/null +++ b/src/api/contract/extensions/erc1155/read.ts @@ -0,0 +1,42 @@ +import { FastifyInstance, RouteGenericInterface } from 'fastify'; +import { StatusCodes } from 'http-status-codes'; +import { getSDK } from '../../../../helpers/sdk'; +import { Static } from '@sinclair/typebox'; +import { fullRouteSchema, schemaTypes } from '../../../../sharedApiSchemas'; +import { logger } from '../../../../utilities/logger'; + +export async function erc1155ReadContract(fastify: FastifyInstance) { + fastify.route({ + method: 'GET', + url: '/contract/:chain_name_or_id/:contract_address/erc1155/read', + schema: { + description: 'Read From ERC1155 Contract', + tags: ['extensions'], + operationId: 'erc1155Read', + ...fullRouteSchema, + }, + handler: async (request, reply) => { + const { chain_name_or_id, contract_address } = request.params; + const { function_name, args } = request.query; + logger.info('Inside Read Function'); + logger.silly(`Chain : ${chain_name_or_id}`) + logger.silly(`Contract Address : ${contract_address}`); + + logger.silly(`Function Name : ${function_name}`) + logger.silly(`Args : ${args}`); + + const sdk = await getSDK(chain_name_or_id); + const contract = await sdk.getContract(contract_address); + + const returnData: any = "adad"; + // await contract.erc1155.call(function_name, args ? args.split(',') : []); + + reply.status(StatusCodes.OK).send({ + result: { + data: returnData + }, + error: null, + }); + }, + }); +} diff --git a/src/api/contract/extensions/erc1155/write.ts b/src/api/contract/extensions/erc1155/write.ts new file mode 100644 index 000000000..997a639f3 --- /dev/null +++ b/src/api/contract/extensions/erc1155/write.ts @@ -0,0 +1,44 @@ +import { FastifyInstance, RouteGenericInterface } from 'fastify'; +import { StatusCodes } from 'http-status-codes'; +import { getSDK } from '../../../../helpers/sdk'; +import { Static } from '@sinclair/typebox'; +import { fullRouteSchema, schemaTypes } from '../../../../sharedApiSchemas'; +import { logger } from '../../../../utilities/logger'; + +export async function erc1155WriteContract(fastify: FastifyInstance) { + fastify.route({ + method: 'POST', + url: '/contract/:chain_name_or_id/:contract_address/erc1155/write', + schema: { + description: 'Write To ERC1155 Contract', + tags: ['extensions'], + operationId: 'erc1155Write', + ...fullRouteSchema, + }, + handler: async (request, reply) => { + const { chain_name_or_id, contract_address } = request.params; + const { function_name, args } = request.query; + + logger.info('Inside Write Function'); + logger.silly(`Chain : ${chain_name_or_id}`) + logger.silly(`Contract Address : ${contract_address}`); + + logger.silly(`Function Name : ${function_name}`) + logger.silly(`Contract Address : ${contract_address}`); + logger.silly(`Function Arguments : ${args}`); + + const sdk = await getSDK(chain_name_or_id); + const contract:any = await sdk.getContract(contract_address); + + const returnData: any = "asdad"; + // await contract.call(function_name, args ? args.split(',') : []); + + reply.status(StatusCodes.OK).send({ + result: { + transaction: returnData?.receipt + }, + error: null, + }); + }, + }); +} diff --git a/src/api/contract/extensions/erc20/index.ts b/src/api/contract/extensions/erc20/index.ts new file mode 100644 index 000000000..f5e464247 --- /dev/null +++ b/src/api/contract/extensions/erc20/index.ts @@ -0,0 +1,25 @@ +import { FastifyInstance } from 'fastify'; + +import { erc20Allowance } from "./standard/allowance"; +import { erc20AllowanceOf } from "./standard/allowanceOf"; +import { erc20TotalSupply } from "./standard/totalSupply"; +import { erc20Balance } from './standard/balance'; +import { erc20BalanceOf } from './standard/balanceOf'; +import { erc20GetMetadata } from './standard/get'; +import { erc20SetAlowance } from './standard/setAllowance'; +import { erc20NormalizeAmount } from './standard/normalizeAmount'; +import { erc20Transfer } from './standard/transfer'; +import { erc20TransferFrom } from './standard/transferFrom'; + +export const erc20Routes = async (fastify: FastifyInstance) => { + await fastify.register(erc20Allowance); + await fastify.register(erc20AllowanceOf); + await fastify.register(erc20Balance); + await fastify.register(erc20BalanceOf); + await fastify.register(erc20GetMetadata); + await fastify.register(erc20NormalizeAmount); + await fastify.register(erc20SetAlowance); + await fastify.register(erc20TotalSupply); + await fastify.register(erc20Transfer); + await fastify.register(erc20TransferFrom); +}; \ No newline at end of file diff --git a/src/api/contract/extensions/erc20/standard/allowance.ts b/src/api/contract/extensions/erc20/standard/allowance.ts new file mode 100644 index 000000000..0b327d5e6 --- /dev/null +++ b/src/api/contract/extensions/erc20/standard/allowance.ts @@ -0,0 +1,45 @@ +import { FastifyInstance } from 'fastify'; +import { StatusCodes } from 'http-status-codes'; + +import { getSDK } from '../../../../../helpers/sdk'; +import { partialRouteSchema } from '../../../../../sharedApiSchemas'; +import { logger } from '../../../../../utilities/logger'; +import { allowanceRequestQuerySchema, allowanceRouteSchema, allowanceReplyBodySchema } from "../../../../../schemas/erc20/standard/allowance"; + +export async function erc20Allowance(fastify: FastifyInstance) { + fastify.route({ + method: 'GET', + url: '/contract/:chain_name_or_id/:contract_address/erc20/allowance', + schema: { + description: "Get the allowance of another wallet address over the connected (Admin) wallet's funds.", + tags: ['ERC20'], + operationId: 'allowance', + ...partialRouteSchema, + querystring: allowanceRequestQuerySchema, + response: { + [StatusCodes.OK]: allowanceReplyBodySchema + } + }, + handler: async (request, reply) => { + const { chain_name_or_id, contract_address } = request.params; + const { spender_wallet } = request.query; + logger.info('Inside ERC20 Allowance Function'); + logger.silly(`Chain : ${chain_name_or_id}`) + logger.silly(`Contract Address : ${contract_address}`); + + logger.silly(`Spender Wallet : ${spender_wallet}`) + + const sdk = await getSDK(chain_name_or_id); + const contract = await sdk.getContract(contract_address); + + const returnData: any = await contract.erc20.allowance(spender_wallet ? spender_wallet : ""); + + reply.status(StatusCodes.OK).send({ + result: { + data: returnData + }, + error: null, + }); + }, + }); +} diff --git a/src/api/contract/extensions/erc20/standard/allowanceOf.ts b/src/api/contract/extensions/erc20/standard/allowanceOf.ts new file mode 100644 index 000000000..774c0d1fb --- /dev/null +++ b/src/api/contract/extensions/erc20/standard/allowanceOf.ts @@ -0,0 +1,46 @@ +import { FastifyInstance } from 'fastify'; +import { StatusCodes } from 'http-status-codes'; + +import { getSDK } from '../../../../../helpers/sdk'; +import { partialRouteSchema } from '../../../../../sharedApiSchemas'; +import { logger } from '../../../../../utilities/logger'; +import { allowanceOfRequestQuerySchema, allowanceOfRouteSchema, allowanceOfReplyBodySchema } from "../../../../../schemas/erc20/standard/allowanceOf"; + +export async function erc20AllowanceOf(fastify: FastifyInstance) { + fastify.route({ + method: 'GET', + url: '/contract/:chain_name_or_id/:contract_address/erc20/allowanceOf', + schema: { + description: "Get the allowance of the specified wallet address funds.", + tags: ['ERC20'], + operationId: 'allowanceOf', + ...partialRouteSchema, + querystring: allowanceOfRequestQuerySchema, + response: { + [StatusCodes.OK]: allowanceOfReplyBodySchema + } + }, + handler: async (request, reply) => { + const { chain_name_or_id, contract_address } = request.params; + const { spender_wallet, owner_wallet } = request.query; + logger.info('Inside ERC20 AllowanceOf Function'); + logger.silly(`Chain : ${chain_name_or_id}`) + logger.silly(`Contract Address : ${contract_address}`); + + logger.silly(`Owner Wallet : ${owner_wallet}`) + logger.silly(`Spender Wallet : ${spender_wallet}`); + + const sdk = await getSDK(chain_name_or_id); + const contract = await sdk.getContract(contract_address); + + const returnData: any = await contract.erc20.allowanceOf(owner_wallet ? owner_wallet : "", spender_wallet ? spender_wallet : ""); + + reply.status(StatusCodes.OK).send({ + result: { + data: returnData + }, + error: null, + }); + }, + }); +} diff --git a/src/api/contract/extensions/erc20/standard/balance.ts b/src/api/contract/extensions/erc20/standard/balance.ts new file mode 100644 index 000000000..0bc34fed2 --- /dev/null +++ b/src/api/contract/extensions/erc20/standard/balance.ts @@ -0,0 +1,40 @@ +import { FastifyInstance } from 'fastify'; +import { StatusCodes } from 'http-status-codes'; +import { getSDK } from '../../../../../helpers/sdk'; +import { partialRouteSchema, schemaTypes } from '../../../../../sharedApiSchemas'; +import { logger } from '../../../../../utilities/logger'; +import { balanceReplyBodySchema } from '../../../../../schemas/erc20/standard/balance'; + +export async function erc20Balance(fastify: FastifyInstance) { + fastify.route({ + method: 'GET', + url: '/contract/:chain_name_or_id/:contract_address/erc20/balance', + schema: { + description: 'View the balance (i.e. number of tokens) of the connected (Admin) wallet', + tags: ['ERC20'], + operationId: 'balance', + ...partialRouteSchema, + response: { + [StatusCodes.OK]: balanceReplyBodySchema + } + }, + handler: async (request, reply) => { + const { chain_name_or_id, contract_address } = request.params; + logger.info('Inside ERC20 Balance Function'); + logger.silly(`Chain : ${chain_name_or_id}`) + logger.silly(`Contract Address : ${contract_address}`); + + const sdk = await getSDK(chain_name_or_id); + const contract = await sdk.getContract(contract_address); + + const returnData: any = await contract.erc20.totalSupply(); + + reply.status(StatusCodes.OK).send({ + result: { + data: returnData + }, + error: null, + }); + }, + }); +} diff --git a/src/api/contract/extensions/erc20/standard/balanceOf.ts b/src/api/contract/extensions/erc20/standard/balanceOf.ts new file mode 100644 index 000000000..443e33e4b --- /dev/null +++ b/src/api/contract/extensions/erc20/standard/balanceOf.ts @@ -0,0 +1,43 @@ +import { FastifyInstance } from 'fastify'; +import { StatusCodes } from 'http-status-codes'; + +import { getSDK } from '../../../../../helpers/sdk'; +import { partialRouteSchema, } from '../../../../../sharedApiSchemas'; +import { logger } from '../../../../../utilities/logger'; +import { balanceOfRequestQuerySchema, balanceOfRouteSchema, balanceOfReplyBodySchema } from '../../../../../schemas/erc20/standard/balanceOf'; + +export async function erc20BalanceOf(fastify: FastifyInstance) { + fastify.route({ + method: 'GET', + url: '/contract/:chain_name_or_id/:contract_address/erc20/balanceOf', + schema: { + description: 'Check the balance Of the wallet address', + tags: ['ERC20'], + operationId: 'balanceOf', + ...partialRouteSchema, + querystring: balanceOfRequestQuerySchema, + response: { + [StatusCodes.OK]: balanceOfReplyBodySchema + } + }, + handler: async (request, reply) => { + const { chain_name_or_id, contract_address } = request.params; + const { wallet_address } = request.query; + logger.info('Inside ERC20 BalanceOf Function'); + logger.silly(`Chain : ${chain_name_or_id}`) + logger.silly(`Contract Address : ${contract_address}`); + + const sdk = await getSDK(chain_name_or_id); + const contract = await sdk.getContract(contract_address); + + const returnData: any = await contract.erc20.balanceOf(wallet_address); + + reply.status(StatusCodes.OK).send({ + result: { + data: returnData + }, + error: null, + }); + }, + }); +} diff --git a/src/api/contract/extensions/erc20/standard/get.ts b/src/api/contract/extensions/erc20/standard/get.ts new file mode 100644 index 000000000..b075b164d --- /dev/null +++ b/src/api/contract/extensions/erc20/standard/get.ts @@ -0,0 +1,44 @@ +import { FastifyInstance } from 'fastify'; +import { StatusCodes } from 'http-status-codes'; +import { getSDK } from '../../../../../helpers/sdk'; +import { partialRouteSchema, schemaTypes } from '../../../../../sharedApiSchemas'; +import { logger } from '../../../../../utilities/logger'; +import { getReplyBodySchema, getRouteSchema} from '../../../../../schemas/erc20/standard/get' + +export async function erc20GetMetadata(fastify: FastifyInstance) { + fastify.route({ + method: 'GET', + url: '/contract/:chain_name_or_id/:contract_address/erc20/get', + schema: { + description: 'Get the metadata of the token smart contract, such as the name, symbol, and decimals.', + tags: ['ERC20'], + operationId: 'get', + ...partialRouteSchema, + response: { + [StatusCodes.OK]: getReplyBodySchema + } + }, + handler: async (request, reply) => { + const { chain_name_or_id, contract_address } = request.params; + logger.info('Inside ERC20 - Get Function'); + logger.silly(`Chain : ${chain_name_or_id}`) + logger.silly(`Contract Address : ${contract_address}`); + + const sdk = await getSDK(chain_name_or_id); + const contract = await sdk.getContract(contract_address); + + const returnData: any = await contract.erc20.get(); + + reply.status(StatusCodes.OK).send({ + result: { + data: { + symbol: returnData.symbol, + name: returnData.name, + decimals: returnData.decimals, + } + }, + error: null, + }); + }, + }); +} diff --git a/src/api/contract/extensions/erc20/standard/normalizeAmount.ts b/src/api/contract/extensions/erc20/standard/normalizeAmount.ts new file mode 100644 index 000000000..1d7b66437 --- /dev/null +++ b/src/api/contract/extensions/erc20/standard/normalizeAmount.ts @@ -0,0 +1,46 @@ +import { FastifyInstance } from 'fastify'; +import { StatusCodes } from 'http-status-codes'; + +import { getSDK } from '../../../../../helpers/sdk'; +import { partialRouteSchema } from '../../../../../sharedApiSchemas'; +import { logger } from '../../../../../utilities/logger'; +import { normalizeRequestQuerySchema, normalizeAmountRouteSchema, getReplyBodySchema } from '../../../../../schemas/erc20/standard/normalizeAmount'; + +export async function erc20NormalizeAmount(fastify: FastifyInstance) { + fastify.route({ + method: 'GET', + url: '/contract/:chain_name_or_id/:contract_address/erc20/normalizeAmount', + schema: { + description: 'Convert a number of tokens to a number of wei.', + tags: ['ERC20'], + operationId: 'normalizeAmount', + ...partialRouteSchema, + querystring: normalizeRequestQuerySchema, + response: { + [StatusCodes.OK]: getReplyBodySchema + } + }, + handler: async (request, reply) => { + const { chain_name_or_id, contract_address } = request.params; + const { amount } = request.query; + + logger.info('Inside ERC20 Normalize Function'); + logger.silly(`Chain : ${chain_name_or_id}`) + logger.silly(`Contract Address : ${contract_address}`); + + logger.silly(`Amount : ${amount}`) + + const sdk = await getSDK(chain_name_or_id); + const contract = await sdk.getContract(contract_address); + + const returnData: any = await contract.erc20.normalizeAmount(amount); + + reply.status(StatusCodes.OK).send({ + result: { + data: returnData + }, + error: null, + }); + }, + }); +} diff --git a/src/api/contract/extensions/erc20/standard/setAllowance.ts b/src/api/contract/extensions/erc20/standard/setAllowance.ts new file mode 100644 index 000000000..293f6c93c --- /dev/null +++ b/src/api/contract/extensions/erc20/standard/setAllowance.ts @@ -0,0 +1,39 @@ +import { FastifyInstance } from 'fastify'; +import { StatusCodes } from 'http-status-codes'; + +import { getSDK } from '../../../../../helpers/sdk'; +import { partialRouteSchema } from '../../../../../sharedApiSchemas'; +import { logger } from '../../../../../utilities/logger'; +import { setAllowanceRequestQuerySchema, setAllowanceRouteSchema } from '../../../../../schemas/erc20/standard/setAllownce'; + +export async function erc20SetAlowance(fastify: FastifyInstance) { + fastify.route({ + method: 'POST', + url: '/contract/:chain_name_or_id/:contract_address/erc20/setAllowance', + schema: { + description: "Grant allowance to another wallet address to spend the connected (Admin) wallet's funds (of this token).", + tags: ['ERC20'], + operationId: 'setAllowance', + ...partialRouteSchema, + querystring: setAllowanceRequestQuerySchema + }, + handler: async (request, reply) => { + const { chain_name_or_id, contract_address } = request.params; + logger.info('Inside ERC20 Set Allowance Function'); + logger.silly(`Chain : ${chain_name_or_id}`) + logger.silly(`Contract Address : ${contract_address}`); + + const sdk = await getSDK(chain_name_or_id); + const contract = await sdk.getContract(contract_address); + + const returnData: any = await contract.erc20.totalSupply(); + + reply.status(StatusCodes.OK).send({ + result: { + data: returnData + }, + error: null, + }); + }, + }); +} diff --git a/src/api/contract/extensions/erc20/standard/totalSupply.ts b/src/api/contract/extensions/erc20/standard/totalSupply.ts new file mode 100644 index 000000000..612c81d62 --- /dev/null +++ b/src/api/contract/extensions/erc20/standard/totalSupply.ts @@ -0,0 +1,47 @@ +import { FastifyInstance } from 'fastify'; +import { StatusCodes } from 'http-status-codes'; +import { getSDK } from '../../../../../helpers/sdk'; +import { partialRouteSchema, } from '../../../../../sharedApiSchemas'; +import { logger } from '../../../../../utilities/logger'; +import { totalSupplyRouteSchema, totalSupplyReplyBodySchema } from '../../../../../schemas/erc20/standard/totalSupply'; + +export async function erc20TotalSupply(fastify: FastifyInstance) { + fastify.route({ + method: 'GET', + url: '/contract/:chain_name_or_id/:contract_address/erc20/totalSupply', + schema: { + description: 'Get the number of tokens in circulation for the contract.', + tags: ['ERC20'], + operationId: 'totalSupply', + ...partialRouteSchema, + response: { + [StatusCodes.OK]: totalSupplyReplyBodySchema, + } + }, + handler: async (request, reply) => { + const { chain_name_or_id, contract_address } = request.params; + logger.info('Inside ERC20 TotalSupply Function'); + logger.silly(`Chain : ${chain_name_or_id}`) + logger.silly(`Contract Address : ${contract_address}`); + + const sdk = await getSDK(chain_name_or_id); + const contract = await sdk.getContract(contract_address); + + const returnData = await contract.erc20.totalSupply() as unknown as typeof totalSupplyReplyBodySchema; + logger.info(`${JSON.stringify(returnData)}`); + + reply.status(StatusCodes.OK).send({ + result: { + data: { + value: returnData.value, + symbol: returnData.symbol, + name: returnData.name, + decimals: returnData.decimals, + displayValue: returnData.displayValue, + } + }, + error: null, + }); + }, + }); +} diff --git a/src/api/contract/extensions/erc20/standard/transfer.ts b/src/api/contract/extensions/erc20/standard/transfer.ts new file mode 100644 index 000000000..af0d1760a --- /dev/null +++ b/src/api/contract/extensions/erc20/standard/transfer.ts @@ -0,0 +1,43 @@ +import { FastifyInstance } from 'fastify'; +import { StatusCodes } from 'http-status-codes'; + +import { getSDK } from '../../../../../helpers/sdk'; +import { partialRouteSchema } from '../../../../../sharedApiSchemas'; +import { logger } from '../../../../../utilities/logger'; +import { transferRequestQuerySchema, transferRouteSchema } from '../../../../../schemas/erc20/standard/transfer'; + +export async function erc20Transfer(fastify: FastifyInstance) { + fastify.route({ + method: 'POST', + url: '/contract/:chain_name_or_id/:contract_address/erc20/transfer', + schema: { + description: 'Transfer tokens from the connected (Admin) wallet to another wallet.', + tags: ['ERC20'], + operationId: 'transfer', + ...partialRouteSchema, + querystring: transferRequestQuerySchema + }, + handler: async (request, reply) => { + const { chain_name_or_id, contract_address } = request.params; + const { to_address, amount } = request.query; + logger.info('Inside ERC20 - Transfer Function'); + logger.silly(`Chain : ${chain_name_or_id}`) + logger.silly(`Contract Address : ${contract_address}`); + + logger.silly(`To Address : ${to_address}`) + logger.silly(`Amount : ${amount}`); + + const sdk = await getSDK(chain_name_or_id); + const contract = await sdk.getContract(contract_address); + + const returnData: any = await contract.erc20.transfer(to_address, amount); + + reply.status(StatusCodes.OK).send({ + result: { + data: returnData + }, + error: null, + }); + }, + }); +} diff --git a/src/api/contract/extensions/erc20/standard/transferFrom.ts b/src/api/contract/extensions/erc20/standard/transferFrom.ts new file mode 100644 index 000000000..edbf1a1ba --- /dev/null +++ b/src/api/contract/extensions/erc20/standard/transferFrom.ts @@ -0,0 +1,44 @@ +import { FastifyInstance } from 'fastify'; +import { StatusCodes } from 'http-status-codes'; + +import { getSDK } from '../../../../../helpers/sdk'; +import { partialRouteSchema } from '../../../../../sharedApiSchemas'; +import { logger } from '../../../../../utilities/logger'; +import { transferFromRequestQuerySchema, transferFromRouteSchema } from '../../../../../schemas/erc20/standard/transferFrom'; + + +export async function erc20TransferFrom(fastify: FastifyInstance) { + fastify.route({ + method: 'POST', + url: '/contract/:chain_name_or_id/:contract_address/erc20/transferFrom', + schema: { + description: 'Transfer tokens from the connected wallet to another wallet.', + tags: ['ERC20'], + operationId: 'transferFrom', + ...partialRouteSchema, + querystring: transferFromRequestQuerySchema + }, + handler: async (request, reply) => { + const { chain_name_or_id, contract_address } = request.params; + const { from_address, to_address, amount } = request.query; + logger.info('Inside ERC20 - Transfer Function'); + logger.silly(`Chain : ${chain_name_or_id}`) + logger.silly(`Contract Address : ${contract_address}`); + + logger.silly(`To Address : ${to_address}`) + logger.silly(`Amount : ${amount}`); + + const sdk = await getSDK(chain_name_or_id); + const contract = await sdk.getContract(contract_address); + + const returnData: any = await contract.erc20.transferFrom(from_address, to_address, amount); + + reply.status(StatusCodes.OK).send({ + result: { + data: returnData + }, + error: null, + }); + }, + }); +} diff --git a/src/api/contract/extensions/erc721/read.ts b/src/api/contract/extensions/erc721/read.ts new file mode 100644 index 000000000..a2063ee3e --- /dev/null +++ b/src/api/contract/extensions/erc721/read.ts @@ -0,0 +1,41 @@ +import { FastifyInstance } from 'fastify'; +import { StatusCodes } from 'http-status-codes'; +import { getSDK } from '../../../../helpers/sdk'; +import { Static } from '@sinclair/typebox'; +import { fullRouteSchema, schemaTypes } from '../../../../sharedApiSchemas'; +import { logger } from '../../../../utilities/logger'; + +export async function erc721ReadContract(fastify: FastifyInstance) { + fastify.route({ + method: 'GET', + url: '/contract/:chain_name_or_id/:contract_address/erc721/read', + schema: { + description: 'Read From ERC721 Contract', + tags: ['erc721'], + operationId: 'erc721Read', + ...fullRouteSchema, + }, + handler: async (request, reply) => { + const { chain_name_or_id, contract_address } = request.params; + const { function_name, args } = request.query; + logger.info('Inside Read Function'); + logger.silly(`Chain : ${chain_name_or_id}`) + logger.silly(`Contract Address : ${contract_address}`); + + logger.silly(`Function Name : ${function_name}`) + logger.silly(`Args : ${args}`); + + const sdk = await getSDK(chain_name_or_id); + const contract = await sdk.getContract(contract_address); + + const returnData: any = await contract.call(function_name, args ? args.split(',') : []); + + reply.status(StatusCodes.OK).send({ + result: { + data: returnData + }, + error: null, + }); + }, + }); +} diff --git a/src/api/contract/extensions/erc721/write.ts b/src/api/contract/extensions/erc721/write.ts new file mode 100644 index 000000000..59615f438 --- /dev/null +++ b/src/api/contract/extensions/erc721/write.ts @@ -0,0 +1,43 @@ +import { FastifyInstance, RouteGenericInterface } from 'fastify'; +import { StatusCodes } from 'http-status-codes'; +import { getSDK } from '../../../../helpers/sdk'; +import { Static } from '@sinclair/typebox'; +import { fullRouteSchema, schemaTypes } from '../../../../sharedApiSchemas'; +import { logger } from '../../../../utilities/logger'; + +export async function erc721WriteContract(fastify: FastifyInstance) { + fastify.route({ + method: 'POST', + url: '/contract/:chain_name_or_id/:contract_address/erc721/write', + schema: { + description: 'Write To ERC721 Contract', + tags: ['extensions'], + operationId: 'erc721Write', + ...fullRouteSchema, + }, + handler: async (request, reply) => { + const { chain_name_or_id, contract_address } = request.params; + const { function_name, args } = request.query; + + logger.info('Inside Write Function'); + logger.silly(`Chain : ${chain_name_or_id}`) + logger.silly(`Contract Address : ${contract_address}`); + + logger.silly(`Function Name : ${function_name}`) + logger.silly(`Contract Address : ${contract_address}`); + logger.silly(`Function Arguments : ${args}`); + + const sdk = await getSDK(chain_name_or_id); + const contract:any = await sdk.getContract(contract_address); + + const returnData: any = await contract.call(function_name, args ? args.split(',') : []); + + reply.status(StatusCodes.OK).send({ + result: { + transaction: returnData?.receipt + }, + error: null, + }); + }, + }); +} diff --git a/src/api/contract/extensions/index.ts b/src/api/contract/extensions/index.ts new file mode 100644 index 000000000..e69de29bb diff --git a/src/api/contract/read/read.ts b/src/api/contract/read/read.ts index eb50e0b4c..b315297b2 100644 --- a/src/api/contract/read/read.ts +++ b/src/api/contract/read/read.ts @@ -1,25 +1,25 @@ -import { FastifyInstance, RouteGenericInterface } from 'fastify'; +import { FastifyInstance } from 'fastify'; import { StatusCodes } from 'http-status-codes'; -import { getSDK } from '../../../helpers/sdk'; import { Static } from '@sinclair/typebox'; -import { replyBodySchema, requestParamSchema, requestQuerySchema, fullRouteSchema } from '../../../sharedApiSchemas'; +import { getSDK } from '../../../helpers/sdk'; +import { partialRouteSchema, schemaTypes } from '../../../sharedApiSchemas'; import { logger } from '../../../utilities/logger'; +import { readRequestQuerySchema } from '../../../schemas/contract/read'; -interface schemaTypes extends RouteGenericInterface { - Params: Static; - Querystring: Static; - Reply: Static; +interface readSchema extends schemaTypes { + Querystring: Static; } export async function readContract(fastify: FastifyInstance) { - fastify.route({ + fastify.route({ method: 'GET', url: '/contract/:chain_name_or_id/:contract_address/read', schema: { description: 'Read From Contract', - tags: ['read'], + tags: ['Contract'], operationId: 'read', - ...fullRouteSchema, + ...partialRouteSchema, + querystring: readRequestQuerySchema, }, handler: async (request, reply) => { const { chain_name_or_id, contract_address } = request.params; diff --git a/src/api/contract/write/write.ts b/src/api/contract/write/write.ts index a3ba90177..66d5fdaa7 100644 --- a/src/api/contract/write/write.ts +++ b/src/api/contract/write/write.ts @@ -1,25 +1,25 @@ -import { FastifyInstance, RouteGenericInterface } from 'fastify'; -import { Static } from '@sinclair/typebox'; +import { FastifyInstance } from 'fastify'; import { StatusCodes } from 'http-status-codes'; +import { Static } from '@sinclair/typebox'; import { getSDK } from '../../../helpers/sdk'; -import { replyBodySchema, requestParamSchema, requestQuerySchema, fullRouteSchema } from '../../../sharedApiSchemas'; +import { partialRouteSchema, schemaTypes } from '../../../sharedApiSchemas'; import { logger } from '../../../utilities/logger'; +import { writeRequestQuerySchema } from '../../../schemas/contract/write'; -interface schemaTypes extends RouteGenericInterface { - Params: Static; - Querystring: Static; - Reply: Static; +interface writeSchema extends schemaTypes { + Querystring: Static; } export async function writeToContract(fastify: FastifyInstance) { - fastify.route({ + fastify.route({ method: 'POST', url: '/contract/:chain_name_or_id/:contract_address/write', schema: { description: 'Write From Contract', - tags: ['write'], + tags: ['Contract'], operationId: 'read', - ...fullRouteSchema + ...partialRouteSchema, + querystring: writeRequestQuerySchema }, handler: async (request, reply) => { const { chain_name_or_id, contract_address } = request.params; diff --git a/src/api/index.ts b/src/api/index.ts index 9a02fd659..db977ebc7 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -2,7 +2,13 @@ import { FastifyInstance } from 'fastify'; import { readContract } from './contract/read/read'; import { writeToContract } from './contract/write/write'; +// Extensions +import { erc20Routes } from './contract/extensions/erc20/index'; + export const apiRoutes = async (fastify: FastifyInstance) => { await fastify.register(readContract); await fastify.register(writeToContract); + + // ERC20 + await fastify.register(erc20Routes); }; diff --git a/src/openapi.ts b/src/openapi.ts index 50c65a164..0c786c00a 100644 --- a/src/openapi.ts +++ b/src/openapi.ts @@ -14,6 +14,10 @@ export const openapi = async (server: FastifyInstance) => { title: 'thirdweb web3-API', description: 'thirdweb web3-API', version: '1.0.0', + license: { + "name": "Apache 2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0.html" + }, }, servers: [ { diff --git a/src/schemas/contract/index.ts b/src/schemas/contract/index.ts new file mode 100644 index 000000000..3847e1704 --- /dev/null +++ b/src/schemas/contract/index.ts @@ -0,0 +1,35 @@ +import { Type } from '@sinclair/typebox'; +// import { FastifySchema } from 'fastify/types/schema'; +// import { RouteGenericInterface } from 'fastify'; +// import { baseReplyErrorSchema, requestParamSchema } from '../../sharedApiSchemas' + +/** + * Basic schema for all Request Query String + */ +export const requestQuerySchema = Type.Object({ + function_name: Type.String({ + description: 'Name of the function to call on Contract' + }), + args: Type.Optional(Type.String({ + description: 'Arguments for the function. Comma Separated' + })), +}); + +// /** +// * Basic schema for all Response Body +// */ +// const replyBodySchema = Type.Object({ +// result: Type.Optional(Type.Object({ +// data: Type.Optional(Type.String()), +// transaction: Type.Optional(Type.Any()) +// })), +// error: baseReplyErrorSchema, +// authorized: Type.Optional(Type.Boolean()), +// }); + +// /** +// * Basic Fastify schema for request/response +// */ +// export const readRouteSchema: FastifySchema = { +// querystring: requestQuerySchema +// }; \ No newline at end of file diff --git a/src/schemas/contract/read.ts b/src/schemas/contract/read.ts new file mode 100644 index 000000000..49f768810 --- /dev/null +++ b/src/schemas/contract/read.ts @@ -0,0 +1,15 @@ +import { Type } from '@sinclair/typebox'; + +/** + * Basic schema for all Request Query String + */ +export const readRequestQuerySchema = Type.Object({ + function_name: Type.String({ + description: 'Name of the function to call on Contract', + examples: ["balanceOf"] + }), + args: Type.Optional(Type.String({ + description: 'Arguments for the function. Comma Separated', + examples:[""] + })), +}); \ No newline at end of file diff --git a/src/schemas/contract/write.ts b/src/schemas/contract/write.ts new file mode 100644 index 000000000..dbbfbddd9 --- /dev/null +++ b/src/schemas/contract/write.ts @@ -0,0 +1,15 @@ +import { Type } from '@sinclair/typebox'; + +/** + * Basic schema for all Request Query String + */ +export const writeRequestQuerySchema = Type.Object({ + function_name: Type.String({ + description: 'Name of the function to call on Contract', + examples: ["transferFrom"] + }), + args: Type.String({ + description: 'Arguments for the function. Comma Separated', + examples:["0x1946267d81Fb8aDeeEa28e6B98bcD446c8248473,0x3EcDBF3B911d0e9052b64850693888b008e18373,0"] + }), +}); \ No newline at end of file diff --git a/src/schemas/erc20/sharedSchema.ts b/src/schemas/erc20/sharedSchema.ts new file mode 100644 index 000000000..e69de29bb diff --git a/src/schemas/erc20/standard/allowance.ts b/src/schemas/erc20/standard/allowance.ts new file mode 100644 index 000000000..67feae0a9 --- /dev/null +++ b/src/schemas/erc20/standard/allowance.ts @@ -0,0 +1,31 @@ +import { Static, Type } from '@sinclair/typebox'; +import { baseReplyErrorSchema, schemaTypes } from '../../../sharedApiSchemas'; + +/** + * Basic schema for ERC20 - Allowance Request Query String + */ +export const allowanceRequestQuerySchema = Type.Object({ + spender_wallet: Type.String({ + description: 'Address of the wallet to check token allowance', + examples: ["0x1946267d81Fb8aDeeEa28e6B98bcD446c8248473"] + }), +}); + +export interface allowanceRouteSchema extends schemaTypes { + Querystring: Static; +} + +export const allowanceReplyBodySchema = Type.Object({ + result: Type.Optional(Type.Object({ + data: Type.Object({ + "name": Type.String(), + "symbol": Type.String(), + "decimals": Type.String(), + "value": Type.String({ + description: "Allowance Value" + }), + "displayValue": Type.String() + }), + })), + error: baseReplyErrorSchema, +}); \ No newline at end of file diff --git a/src/schemas/erc20/standard/allowanceOf.ts b/src/schemas/erc20/standard/allowanceOf.ts new file mode 100644 index 000000000..6ce5f6422 --- /dev/null +++ b/src/schemas/erc20/standard/allowanceOf.ts @@ -0,0 +1,35 @@ +import { Static, Type } from '@sinclair/typebox'; +import { baseReplyErrorSchema, schemaTypes } from '../../../sharedApiSchemas'; + +/** + * Basic schema for ERC20 - AllowanceOf Request Query String + */ +export const allowanceOfRequestQuerySchema = Type.Object({ + owner_wallet: Type.String({ + description: 'Address of the wallet who owns the funds', + examples: ["0x3EcDBF3B911d0e9052b64850693888b008e18373"] + }), + spender_wallet: Type.String({ + description: 'Address of the wallet to check token allowance', + examples: ["0x1946267d81Fb8aDeeEa28e6B98bcD446c8248473"] + }), +}); + +export interface allowanceOfRouteSchema extends schemaTypes { + Querystring: Static; +} + +export const allowanceOfReplyBodySchema = Type.Object({ + result: Type.Optional(Type.Object({ + data: Type.Object({ + "name": Type.String(), + "symbol": Type.String(), + "decimals": Type.String(), + "value": Type.String({ + description: "Allowance Value" + }), + "displayValue": Type.String() + }), + })), + error: baseReplyErrorSchema, +}); \ No newline at end of file diff --git a/src/schemas/erc20/standard/balance.ts b/src/schemas/erc20/standard/balance.ts new file mode 100644 index 000000000..11e83edf2 --- /dev/null +++ b/src/schemas/erc20/standard/balance.ts @@ -0,0 +1,17 @@ +import { Type } from '@sinclair/typebox'; +import { baseReplyErrorSchema } from '../../../sharedApiSchemas'; + +export const balanceReplyBodySchema = Type.Object({ + result: Type.Optional(Type.Object({ + data: Type.Object({ + "name": Type.String(), + "symbol": Type.String(), + "decimals": Type.String(), + "value": Type.String({ + description: "Balance Value" + }), + "displayValue": Type.String() + }), + })), + error: baseReplyErrorSchema, +}); \ No newline at end of file diff --git a/src/schemas/erc20/standard/balanceOf.ts b/src/schemas/erc20/standard/balanceOf.ts new file mode 100644 index 000000000..4a4b7382b --- /dev/null +++ b/src/schemas/erc20/standard/balanceOf.ts @@ -0,0 +1,31 @@ +import { Static, Type } from '@sinclair/typebox'; +import { baseReplyErrorSchema, schemaTypes } from '../../../sharedApiSchemas'; + +/** + * Basic schema for ERC20 - BalanceOf Request Query String + */ +export const balanceOfRequestQuerySchema = Type.Object({ + wallet_address: Type.String({ + description: 'Address of the wallet to check token balance', + examples: ["0x1946267d81Fb8aDeeEa28e6B98bcD446c8248473"] + }), +}); + +export interface balanceOfRouteSchema extends schemaTypes { + Querystring: Static; +} + +export const balanceOfReplyBodySchema = Type.Object({ + result: Type.Optional(Type.Object({ + data: Type.Object({ + "name": Type.String(), + "symbol": Type.String(), + "decimals": Type.String(), + "value": Type.String({ + description: "Balance Value" + }), + "displayValue": Type.String() + }), + })), + error: baseReplyErrorSchema, +}); \ No newline at end of file diff --git a/src/schemas/erc20/standard/get.ts b/src/schemas/erc20/standard/get.ts new file mode 100644 index 000000000..5b36aa340 --- /dev/null +++ b/src/schemas/erc20/standard/get.ts @@ -0,0 +1,17 @@ +import { Static, Type } from '@sinclair/typebox'; +import { schemaTypes, baseReplyErrorSchema } from '../../../sharedApiSchemas'; + +export const getReplyBodySchema = Type.Object({ + result: Type.Optional(Type.Object({ + data: Type.Object({ + "name": Type.String(), + "symbol": Type.String(), + "decimals": Type.String(), + }), + })), + error: baseReplyErrorSchema, +}); + +export interface getRouteSchema extends schemaTypes { + Reply: Static +} \ No newline at end of file diff --git a/src/schemas/erc20/standard/normalizeAmount.ts b/src/schemas/erc20/standard/normalizeAmount.ts new file mode 100644 index 000000000..7de1a8aa9 --- /dev/null +++ b/src/schemas/erc20/standard/normalizeAmount.ts @@ -0,0 +1,24 @@ +import { Static, Type } from '@sinclair/typebox'; +import { baseReplyErrorSchema, schemaTypes } from '../../../sharedApiSchemas'; + +/** + * Basic schema for ERC20 - Normalize Request Query String + */ +export const normalizeRequestQuerySchema = Type.Object({ + amount: Type.String({ + description: 'Convert a number of tokens to a number of wei.', + examples: ["100"] + }), +}); + +export const getReplyBodySchema = Type.Object({ + result: Type.Optional(Type.Object({ + data: Type.String(), + })), + error: baseReplyErrorSchema, +}); + +export interface normalizeAmountRouteSchema extends schemaTypes { + Reply: Static; + Querystring: Static; +} \ No newline at end of file diff --git a/src/schemas/erc20/standard/setAllownce.ts b/src/schemas/erc20/standard/setAllownce.ts new file mode 100644 index 000000000..f6926115a --- /dev/null +++ b/src/schemas/erc20/standard/setAllownce.ts @@ -0,0 +1,20 @@ +import { Static, Type } from '@sinclair/typebox'; +import { schemaTypes } from '../../../sharedApiSchemas'; + +/** + * Basic schema for ERC20 - Set Allowance Request Query String + */ +export const setAllowanceRequestQuerySchema = Type.Object({ + spender_address: Type.String({ + description: 'Address of the wallet to allow transfers from', + examples: ["0x3EcDBF3B911d0e9052b64850693888b008e18373"] + }), + amount: Type.String({ + description: 'The number of tokens to give as allowance', + examples: ["100"] + }), +}); + +export interface setAllowanceRouteSchema extends schemaTypes { + Querystring: Static; +} \ No newline at end of file diff --git a/src/schemas/erc20/standard/totalSupply.ts b/src/schemas/erc20/standard/totalSupply.ts new file mode 100644 index 000000000..8b095acdc --- /dev/null +++ b/src/schemas/erc20/standard/totalSupply.ts @@ -0,0 +1,19 @@ +import { Static, Type } from '@sinclair/typebox'; +import { schemaTypes, baseReplyErrorSchema } from '../../../sharedApiSchemas'; + +export const totalSupplyReplyBodySchema = Type.Object({ + result: Type.Optional(Type.Object({ + data: Type.Object({ + "name": Type.String(), + "symbol": Type.String(), + "decimals": Type.String(), + "value": Type.String(), + "displayValue": Type.String() + }), + })), + error: baseReplyErrorSchema, +}); + +export interface totalSupplyRouteSchema extends schemaTypes { + Reply: Static +} \ No newline at end of file diff --git a/src/schemas/erc20/standard/transfer.ts b/src/schemas/erc20/standard/transfer.ts new file mode 100644 index 000000000..4593fa8d4 --- /dev/null +++ b/src/schemas/erc20/standard/transfer.ts @@ -0,0 +1,20 @@ +import { Static, Type } from '@sinclair/typebox'; +import { schemaTypes } from '../../../sharedApiSchemas'; + +/** + * Basic schema for ERC20 - Transfer Request Query String + */ +export const transferRequestQuerySchema = Type.Object({ + to_address: Type.String({ + description: 'Address of the wallet you want to send the tokens to', + examples: ["0x3EcDBF3B911d0e9052b64850693888b008e18373"] + }), + amount: Type.String({ + description: 'The amount of tokens you want to send', + examples: ["0.1"] + }), +}); + +export interface transferRouteSchema extends schemaTypes { + Querystring: Static; +} \ No newline at end of file diff --git a/src/schemas/erc20/standard/transferFrom.ts b/src/schemas/erc20/standard/transferFrom.ts new file mode 100644 index 000000000..22611c1fe --- /dev/null +++ b/src/schemas/erc20/standard/transferFrom.ts @@ -0,0 +1,24 @@ +import { Static, Type } from '@sinclair/typebox'; +import { schemaTypes } from '../../../sharedApiSchemas'; + +/** + * Basic schema for ERC20 - Transfer From Request Query String + */ +export const transferFromRequestQuerySchema = Type.Object({ + from_address: Type.String({ + description: 'Address of the wallet sending the tokens', + examples: ["0x..."] + }), + to_address: Type.String({ + description: 'Address of the wallet you want to send the tokens to', + examples: ["0x3EcDBF3B911d0e9052b64850693888b008e18373"] + }), + amount: Type.String({ + description: 'The amount of tokens you want to send', + examples: ["0.1"] + }), +}); + +export interface transferFromRouteSchema extends schemaTypes { + Querystring: Static; +} diff --git a/src/sharedApiSchemas.ts b/src/sharedApiSchemas.ts index 541d81044..968020446 100644 --- a/src/sharedApiSchemas.ts +++ b/src/sharedApiSchemas.ts @@ -1,7 +1,7 @@ -import { TSchema, Type } from '@sinclair/typebox'; +import { TSchema, Type, Static } from '@sinclair/typebox'; import { FastifySchema } from 'fastify/types/schema'; import { StatusCodes } from 'http-status-codes'; -import { API_KEY_REPLY_ERRORS } from './constants/errors'; +import { RouteGenericInterface } from 'fastify'; /** * Requests to this server follow a pretty basic format. @@ -46,38 +46,12 @@ export const requestParamSchema = Type.Object({ }), }); -/** - * Basic schema for all Request Query String - */ -export const requestQuerySchema = Type.Object({ - function_name: Type.String({ - description: 'Name of the function to call on Contract' - }), - args: Type.Optional(Type.String({ - description: 'Arguments for the function. Comma Separated' - })), -}); - -/** - * Basic schema for all Request Body for v1/use end-point - */ -export const requestBodySchemaForUse = Type.Object({ - scope: Type.String(), -}); - -/** - * Basic schema for all Request Body for v1/revoke end-point - */ -export const requestBodySchemaForRevoke = Type.Object({ - key: Type.String() -}); - /** * Basic schema for all Response Body */ -export const replyBodySchema = Type.Object({ +const replyBodySchema = Type.Object({ result: Type.Optional(Type.Object({ - data: Type.Optional(Type.String()), + data: Type.Optional(Type.Union([Type.String(), Type.Object({})])), transaction: Type.Optional(Type.Any()) })), error: baseReplyErrorSchema, @@ -87,9 +61,8 @@ export const replyBodySchema = Type.Object({ /** * Basic Fastify schema for request/response */ -export const fullRouteSchema: FastifySchema = { +export const partialRouteSchema: FastifySchema = { params: requestParamSchema, - querystring: requestQuerySchema, response: { [StatusCodes.OK]: replyBodySchema, [StatusCodes.UNAUTHORIZED]: { @@ -110,3 +83,8 @@ export const fullRouteSchema: FastifySchema = { } }, }; + +export interface schemaTypes extends RouteGenericInterface { + Params: Static; + Reply: Static; +} diff --git a/tsconfig.json b/tsconfig.json index a0cc1e910..80415122a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,7 +10,7 @@ "emitDecoratorMetadata": true, "baseUrl": ".", "skipLibCheck": true, - "allowJs": true + "allowJs": true, }, "ts-node": { "esm": true, From b596e987810d16e7cfde6fc402fa805885b7cf09 Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Tue, 16 May 2023 16:28:54 -0700 Subject: [PATCH 19/24] updated transfer response --- src/api/contract/extensions/erc20/standard/transfer.ts | 2 +- src/api/contract/extensions/erc20/standard/transferFrom.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api/contract/extensions/erc20/standard/transfer.ts b/src/api/contract/extensions/erc20/standard/transfer.ts index af0d1760a..6e9329fdb 100644 --- a/src/api/contract/extensions/erc20/standard/transfer.ts +++ b/src/api/contract/extensions/erc20/standard/transfer.ts @@ -34,7 +34,7 @@ export async function erc20Transfer(fastify: FastifyInstance) { reply.status(StatusCodes.OK).send({ result: { - data: returnData + transaction: returnData?.receipt }, error: null, }); diff --git a/src/api/contract/extensions/erc20/standard/transferFrom.ts b/src/api/contract/extensions/erc20/standard/transferFrom.ts index edbf1a1ba..6b1a17710 100644 --- a/src/api/contract/extensions/erc20/standard/transferFrom.ts +++ b/src/api/contract/extensions/erc20/standard/transferFrom.ts @@ -35,7 +35,7 @@ export async function erc20TransferFrom(fastify: FastifyInstance) { reply.status(StatusCodes.OK).send({ result: { - data: returnData + transaction: returnData?.receipt }, error: null, }); From b9d3031309e0a44f5f57e6ab414623b5f0dc8014 Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Tue, 16 May 2023 16:31:35 -0700 Subject: [PATCH 20/24] commented ERC721 & ERC1155 extensions to avoid build error --- src/api/contract/extensions/erc1155/read.ts | 74 +++++++++---------- src/api/contract/extensions/erc1155/write.ts | 76 ++++++++++---------- src/api/contract/extensions/erc721/read.ts | 72 +++++++++---------- src/api/contract/extensions/erc721/write.ts | 74 +++++++++---------- 4 files changed, 148 insertions(+), 148 deletions(-) diff --git a/src/api/contract/extensions/erc1155/read.ts b/src/api/contract/extensions/erc1155/read.ts index 72a965bb8..e1d8cf15d 100644 --- a/src/api/contract/extensions/erc1155/read.ts +++ b/src/api/contract/extensions/erc1155/read.ts @@ -1,42 +1,42 @@ -import { FastifyInstance, RouteGenericInterface } from 'fastify'; -import { StatusCodes } from 'http-status-codes'; -import { getSDK } from '../../../../helpers/sdk'; -import { Static } from '@sinclair/typebox'; -import { fullRouteSchema, schemaTypes } from '../../../../sharedApiSchemas'; -import { logger } from '../../../../utilities/logger'; +// import { FastifyInstance, RouteGenericInterface } from 'fastify'; +// import { StatusCodes } from 'http-status-codes'; +// import { getSDK } from '../../../../helpers/sdk'; +// import { Static } from '@sinclair/typebox'; +// import { fullRouteSchema, schemaTypes } from '../../../../sharedApiSchemas'; +// import { logger } from '../../../../utilities/logger'; -export async function erc1155ReadContract(fastify: FastifyInstance) { - fastify.route({ - method: 'GET', - url: '/contract/:chain_name_or_id/:contract_address/erc1155/read', - schema: { - description: 'Read From ERC1155 Contract', - tags: ['extensions'], - operationId: 'erc1155Read', - ...fullRouteSchema, - }, - handler: async (request, reply) => { - const { chain_name_or_id, contract_address } = request.params; - const { function_name, args } = request.query; - logger.info('Inside Read Function'); - logger.silly(`Chain : ${chain_name_or_id}`) - logger.silly(`Contract Address : ${contract_address}`); +// export async function erc1155ReadContract(fastify: FastifyInstance) { +// fastify.route({ +// method: 'GET', +// url: '/contract/:chain_name_or_id/:contract_address/erc1155/read', +// schema: { +// description: 'Read From ERC1155 Contract', +// tags: ['extensions'], +// operationId: 'erc1155Read', +// ...fullRouteSchema, +// }, +// handler: async (request, reply) => { +// const { chain_name_or_id, contract_address } = request.params; +// const { function_name, args } = request.query; +// logger.info('Inside Read Function'); +// logger.silly(`Chain : ${chain_name_or_id}`) +// logger.silly(`Contract Address : ${contract_address}`); - logger.silly(`Function Name : ${function_name}`) - logger.silly(`Args : ${args}`); +// logger.silly(`Function Name : ${function_name}`) +// logger.silly(`Args : ${args}`); - const sdk = await getSDK(chain_name_or_id); - const contract = await sdk.getContract(contract_address); +// const sdk = await getSDK(chain_name_or_id); +// const contract = await sdk.getContract(contract_address); - const returnData: any = "adad"; - // await contract.erc1155.call(function_name, args ? args.split(',') : []); +// const returnData: any = "adad"; +// // await contract.erc1155.call(function_name, args ? args.split(',') : []); - reply.status(StatusCodes.OK).send({ - result: { - data: returnData - }, - error: null, - }); - }, - }); -} +// reply.status(StatusCodes.OK).send({ +// result: { +// data: returnData +// }, +// error: null, +// }); +// }, +// }); +// } diff --git a/src/api/contract/extensions/erc1155/write.ts b/src/api/contract/extensions/erc1155/write.ts index 997a639f3..5d0afa619 100644 --- a/src/api/contract/extensions/erc1155/write.ts +++ b/src/api/contract/extensions/erc1155/write.ts @@ -1,44 +1,44 @@ -import { FastifyInstance, RouteGenericInterface } from 'fastify'; -import { StatusCodes } from 'http-status-codes'; -import { getSDK } from '../../../../helpers/sdk'; -import { Static } from '@sinclair/typebox'; -import { fullRouteSchema, schemaTypes } from '../../../../sharedApiSchemas'; -import { logger } from '../../../../utilities/logger'; +// import { FastifyInstance, RouteGenericInterface } from 'fastify'; +// import { StatusCodes } from 'http-status-codes'; +// import { getSDK } from '../../../../helpers/sdk'; +// import { Static } from '@sinclair/typebox'; +// import { fullRouteSchema, schemaTypes } from '../../../../sharedApiSchemas'; +// import { logger } from '../../../../utilities/logger'; -export async function erc1155WriteContract(fastify: FastifyInstance) { - fastify.route({ - method: 'POST', - url: '/contract/:chain_name_or_id/:contract_address/erc1155/write', - schema: { - description: 'Write To ERC1155 Contract', - tags: ['extensions'], - operationId: 'erc1155Write', - ...fullRouteSchema, - }, - handler: async (request, reply) => { - const { chain_name_or_id, contract_address } = request.params; - const { function_name, args } = request.query; +// export async function erc1155WriteContract(fastify: FastifyInstance) { +// fastify.route({ +// method: 'POST', +// url: '/contract/:chain_name_or_id/:contract_address/erc1155/write', +// schema: { +// description: 'Write To ERC1155 Contract', +// tags: ['extensions'], +// operationId: 'erc1155Write', +// ...fullRouteSchema, +// }, +// handler: async (request, reply) => { +// const { chain_name_or_id, contract_address } = request.params; +// const { function_name, args } = request.query; - logger.info('Inside Write Function'); - logger.silly(`Chain : ${chain_name_or_id}`) - logger.silly(`Contract Address : ${contract_address}`); +// logger.info('Inside Write Function'); +// logger.silly(`Chain : ${chain_name_or_id}`) +// logger.silly(`Contract Address : ${contract_address}`); - logger.silly(`Function Name : ${function_name}`) - logger.silly(`Contract Address : ${contract_address}`); - logger.silly(`Function Arguments : ${args}`); +// logger.silly(`Function Name : ${function_name}`) +// logger.silly(`Contract Address : ${contract_address}`); +// logger.silly(`Function Arguments : ${args}`); - const sdk = await getSDK(chain_name_or_id); - const contract:any = await sdk.getContract(contract_address); +// const sdk = await getSDK(chain_name_or_id); +// const contract:any = await sdk.getContract(contract_address); - const returnData: any = "asdad"; - // await contract.call(function_name, args ? args.split(',') : []); +// const returnData: any = "asdad"; +// // await contract.call(function_name, args ? args.split(',') : []); - reply.status(StatusCodes.OK).send({ - result: { - transaction: returnData?.receipt - }, - error: null, - }); - }, - }); -} +// reply.status(StatusCodes.OK).send({ +// result: { +// transaction: returnData?.receipt +// }, +// error: null, +// }); +// }, +// }); +// } diff --git a/src/api/contract/extensions/erc721/read.ts b/src/api/contract/extensions/erc721/read.ts index a2063ee3e..f49db78a3 100644 --- a/src/api/contract/extensions/erc721/read.ts +++ b/src/api/contract/extensions/erc721/read.ts @@ -1,41 +1,41 @@ -import { FastifyInstance } from 'fastify'; -import { StatusCodes } from 'http-status-codes'; -import { getSDK } from '../../../../helpers/sdk'; -import { Static } from '@sinclair/typebox'; -import { fullRouteSchema, schemaTypes } from '../../../../sharedApiSchemas'; -import { logger } from '../../../../utilities/logger'; +// import { FastifyInstance } from 'fastify'; +// import { StatusCodes } from 'http-status-codes'; +// import { getSDK } from '../../../../helpers/sdk'; +// import { Static } from '@sinclair/typebox'; +// import { fullRouteSchema, schemaTypes } from '../../../../sharedApiSchemas'; +// import { logger } from '../../../../utilities/logger'; -export async function erc721ReadContract(fastify: FastifyInstance) { - fastify.route({ - method: 'GET', - url: '/contract/:chain_name_or_id/:contract_address/erc721/read', - schema: { - description: 'Read From ERC721 Contract', - tags: ['erc721'], - operationId: 'erc721Read', - ...fullRouteSchema, - }, - handler: async (request, reply) => { - const { chain_name_or_id, contract_address } = request.params; - const { function_name, args } = request.query; - logger.info('Inside Read Function'); - logger.silly(`Chain : ${chain_name_or_id}`) - logger.silly(`Contract Address : ${contract_address}`); +// export async function erc721ReadContract(fastify: FastifyInstance) { +// fastify.route({ +// method: 'GET', +// url: '/contract/:chain_name_or_id/:contract_address/erc721/read', +// schema: { +// description: 'Read From ERC721 Contract', +// tags: ['erc721'], +// operationId: 'erc721Read', +// ...fullRouteSchema, +// }, +// handler: async (request, reply) => { +// const { chain_name_or_id, contract_address } = request.params; +// const { function_name, args } = request.query; +// logger.info('Inside Read Function'); +// logger.silly(`Chain : ${chain_name_or_id}`) +// logger.silly(`Contract Address : ${contract_address}`); - logger.silly(`Function Name : ${function_name}`) - logger.silly(`Args : ${args}`); +// logger.silly(`Function Name : ${function_name}`) +// logger.silly(`Args : ${args}`); - const sdk = await getSDK(chain_name_or_id); - const contract = await sdk.getContract(contract_address); +// const sdk = await getSDK(chain_name_or_id); +// const contract = await sdk.getContract(contract_address); - const returnData: any = await contract.call(function_name, args ? args.split(',') : []); +// const returnData: any = await contract.call(function_name, args ? args.split(',') : []); - reply.status(StatusCodes.OK).send({ - result: { - data: returnData - }, - error: null, - }); - }, - }); -} +// reply.status(StatusCodes.OK).send({ +// result: { +// data: returnData +// }, +// error: null, +// }); +// }, +// }); +// } diff --git a/src/api/contract/extensions/erc721/write.ts b/src/api/contract/extensions/erc721/write.ts index 59615f438..7c6fe3c62 100644 --- a/src/api/contract/extensions/erc721/write.ts +++ b/src/api/contract/extensions/erc721/write.ts @@ -1,43 +1,43 @@ -import { FastifyInstance, RouteGenericInterface } from 'fastify'; -import { StatusCodes } from 'http-status-codes'; -import { getSDK } from '../../../../helpers/sdk'; -import { Static } from '@sinclair/typebox'; -import { fullRouteSchema, schemaTypes } from '../../../../sharedApiSchemas'; -import { logger } from '../../../../utilities/logger'; +// import { FastifyInstance, RouteGenericInterface } from 'fastify'; +// import { StatusCodes } from 'http-status-codes'; +// import { getSDK } from '../../../../helpers/sdk'; +// import { Static } from '@sinclair/typebox'; +// import { fullRouteSchema, schemaTypes } from '../../../../sharedApiSchemas'; +// import { logger } from '../../../../utilities/logger'; -export async function erc721WriteContract(fastify: FastifyInstance) { - fastify.route({ - method: 'POST', - url: '/contract/:chain_name_or_id/:contract_address/erc721/write', - schema: { - description: 'Write To ERC721 Contract', - tags: ['extensions'], - operationId: 'erc721Write', - ...fullRouteSchema, - }, - handler: async (request, reply) => { - const { chain_name_or_id, contract_address } = request.params; - const { function_name, args } = request.query; +// export async function erc721WriteContract(fastify: FastifyInstance) { +// fastify.route({ +// method: 'POST', +// url: '/contract/:chain_name_or_id/:contract_address/erc721/write', +// schema: { +// description: 'Write To ERC721 Contract', +// tags: ['extensions'], +// operationId: 'erc721Write', +// ...fullRouteSchema, +// }, +// handler: async (request, reply) => { +// const { chain_name_or_id, contract_address } = request.params; +// const { function_name, args } = request.query; - logger.info('Inside Write Function'); - logger.silly(`Chain : ${chain_name_or_id}`) - logger.silly(`Contract Address : ${contract_address}`); +// logger.info('Inside Write Function'); +// logger.silly(`Chain : ${chain_name_or_id}`) +// logger.silly(`Contract Address : ${contract_address}`); - logger.silly(`Function Name : ${function_name}`) - logger.silly(`Contract Address : ${contract_address}`); - logger.silly(`Function Arguments : ${args}`); +// logger.silly(`Function Name : ${function_name}`) +// logger.silly(`Contract Address : ${contract_address}`); +// logger.silly(`Function Arguments : ${args}`); - const sdk = await getSDK(chain_name_or_id); - const contract:any = await sdk.getContract(contract_address); +// const sdk = await getSDK(chain_name_or_id); +// const contract:any = await sdk.getContract(contract_address); - const returnData: any = await contract.call(function_name, args ? args.split(',') : []); +// const returnData: any = await contract.call(function_name, args ? args.split(',') : []); - reply.status(StatusCodes.OK).send({ - result: { - transaction: returnData?.receipt - }, - error: null, - }); - }, - }); -} +// reply.status(StatusCodes.OK).send({ +// result: { +// transaction: returnData?.receipt +// }, +// error: null, +// }); +// }, +// }); +// } From 8d33b12bb2e51f14714e25711ec0b775a4531007 Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Tue, 16 May 2023 17:42:55 -0700 Subject: [PATCH 21/24] Updated READ GET to POST. Added BigNumber conversion --- .../extensions/erc20/standard/allowance.ts | 4 +-- .../extensions/erc20/standard/totalSupply.ts | 6 ++-- src/api/contract/read/read.ts | 14 ++++---- src/api/contract/write/write.ts | 12 +++---- src/schemas/contract/index.ts | 35 ------------------- src/schemas/contract/read.ts | 12 +++---- src/schemas/contract/write.ts | 8 ++--- src/utilities/convertor.ts | 15 ++++++++ 8 files changed, 44 insertions(+), 62 deletions(-) delete mode 100644 src/schemas/contract/index.ts create mode 100644 src/utilities/convertor.ts diff --git a/src/api/contract/extensions/erc20/standard/allowance.ts b/src/api/contract/extensions/erc20/standard/allowance.ts index 0b327d5e6..6dba9982b 100644 --- a/src/api/contract/extensions/erc20/standard/allowance.ts +++ b/src/api/contract/extensions/erc20/standard/allowance.ts @@ -27,12 +27,12 @@ export async function erc20Allowance(fastify: FastifyInstance) { logger.silly(`Chain : ${chain_name_or_id}`) logger.silly(`Contract Address : ${contract_address}`); - logger.silly(`Spender Wallet : ${spender_wallet}`) + logger.silly(`Spender Wallet : ${spender_wallet}`); const sdk = await getSDK(chain_name_or_id); const contract = await sdk.getContract(contract_address); - const returnData: any = await contract.erc20.allowance(spender_wallet ? spender_wallet : ""); + const returnData: any = await contract.erc20.allowance(spender_wallet); reply.status(StatusCodes.OK).send({ result: { diff --git a/src/api/contract/extensions/erc20/standard/totalSupply.ts b/src/api/contract/extensions/erc20/standard/totalSupply.ts index 612c81d62..14b8874b0 100644 --- a/src/api/contract/extensions/erc20/standard/totalSupply.ts +++ b/src/api/contract/extensions/erc20/standard/totalSupply.ts @@ -27,16 +27,16 @@ export async function erc20TotalSupply(fastify: FastifyInstance) { const sdk = await getSDK(chain_name_or_id); const contract = await sdk.getContract(contract_address); - const returnData = await contract.erc20.totalSupply() as unknown as typeof totalSupplyReplyBodySchema; + const returnData = await contract.erc20.totalSupply(); logger.info(`${JSON.stringify(returnData)}`); reply.status(StatusCodes.OK).send({ result: { data: { - value: returnData.value, + value: returnData.value.toString(), symbol: returnData.symbol, name: returnData.name, - decimals: returnData.decimals, + decimals: returnData.decimals.toString(), displayValue: returnData.displayValue, } }, diff --git a/src/api/contract/read/read.ts b/src/api/contract/read/read.ts index b315297b2..028fc8245 100644 --- a/src/api/contract/read/read.ts +++ b/src/api/contract/read/read.ts @@ -4,26 +4,27 @@ import { Static } from '@sinclair/typebox'; import { getSDK } from '../../../helpers/sdk'; import { partialRouteSchema, schemaTypes } from '../../../sharedApiSchemas'; import { logger } from '../../../utilities/logger'; -import { readRequestQuerySchema } from '../../../schemas/contract/read'; +import { readRequestBodySchema } from '../../../schemas/contract/read'; +import { bigNumberReplacer } from '../../../utilities/convertor'; interface readSchema extends schemaTypes { - Querystring: Static; + Body: Static; } export async function readContract(fastify: FastifyInstance) { fastify.route({ - method: 'GET', + method: 'POST', url: '/contract/:chain_name_or_id/:contract_address/read', schema: { description: 'Read From Contract', tags: ['Contract'], operationId: 'read', ...partialRouteSchema, - querystring: readRequestQuerySchema, + body: readRequestBodySchema, }, handler: async (request, reply) => { const { chain_name_or_id, contract_address } = request.params; - const { function_name, args } = request.query; + const { function_name, args } = request.body; logger.info('Inside Read Function'); logger.silly(`Chain : ${chain_name_or_id}`) logger.silly(`Contract Address : ${contract_address}`); @@ -34,7 +35,8 @@ export async function readContract(fastify: FastifyInstance) { const sdk = await getSDK(chain_name_or_id); const contract = await sdk.getContract(contract_address); - const returnData: any = await contract.call(function_name, args ? args.split(',') : []); + let returnData = await contract.call(function_name, args); + returnData = bigNumberReplacer(returnData); reply.status(StatusCodes.OK).send({ result: { diff --git a/src/api/contract/write/write.ts b/src/api/contract/write/write.ts index 66d5fdaa7..bf08d6190 100644 --- a/src/api/contract/write/write.ts +++ b/src/api/contract/write/write.ts @@ -4,10 +4,10 @@ import { Static } from '@sinclair/typebox'; import { getSDK } from '../../../helpers/sdk'; import { partialRouteSchema, schemaTypes } from '../../../sharedApiSchemas'; import { logger } from '../../../utilities/logger'; -import { writeRequestQuerySchema } from '../../../schemas/contract/write'; +import { writeRequestBodySchema } from '../../../schemas/contract/write'; interface writeSchema extends schemaTypes { - Querystring: Static; + Body: Static; } export async function writeToContract(fastify: FastifyInstance) { @@ -17,13 +17,13 @@ export async function writeToContract(fastify: FastifyInstance) { schema: { description: 'Write From Contract', tags: ['Contract'], - operationId: 'read', + operationId: 'write', ...partialRouteSchema, - querystring: writeRequestQuerySchema + body: writeRequestBodySchema }, handler: async (request, reply) => { const { chain_name_or_id, contract_address } = request.params; - const { function_name, args } = request.query; + const { function_name, args } = request.body; logger.info('Inside Write Function'); logger.silly(`Chain : ${chain_name_or_id}`) @@ -36,7 +36,7 @@ export async function writeToContract(fastify: FastifyInstance) { const sdk = await getSDK(chain_name_or_id); const contract:any = await sdk.getContract(contract_address); - const returnData: any = await contract.call(function_name, args ? args.split(',') : []); + const returnData: any = await contract.call(function_name, args); reply.status(StatusCodes.OK).send({ result: { diff --git a/src/schemas/contract/index.ts b/src/schemas/contract/index.ts deleted file mode 100644 index 3847e1704..000000000 --- a/src/schemas/contract/index.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Type } from '@sinclair/typebox'; -// import { FastifySchema } from 'fastify/types/schema'; -// import { RouteGenericInterface } from 'fastify'; -// import { baseReplyErrorSchema, requestParamSchema } from '../../sharedApiSchemas' - -/** - * Basic schema for all Request Query String - */ -export const requestQuerySchema = Type.Object({ - function_name: Type.String({ - description: 'Name of the function to call on Contract' - }), - args: Type.Optional(Type.String({ - description: 'Arguments for the function. Comma Separated' - })), -}); - -// /** -// * Basic schema for all Response Body -// */ -// const replyBodySchema = Type.Object({ -// result: Type.Optional(Type.Object({ -// data: Type.Optional(Type.String()), -// transaction: Type.Optional(Type.Any()) -// })), -// error: baseReplyErrorSchema, -// authorized: Type.Optional(Type.Boolean()), -// }); - -// /** -// * Basic Fastify schema for request/response -// */ -// export const readRouteSchema: FastifySchema = { -// querystring: requestQuerySchema -// }; \ No newline at end of file diff --git a/src/schemas/contract/read.ts b/src/schemas/contract/read.ts index 49f768810..224fb35ed 100644 --- a/src/schemas/contract/read.ts +++ b/src/schemas/contract/read.ts @@ -1,15 +1,15 @@ import { Type } from '@sinclair/typebox'; /** - * Basic schema for all Request Query String + * Basic schema for all Request Body String */ -export const readRequestQuerySchema = Type.Object({ +export const readRequestBodySchema = Type.Object({ function_name: Type.String({ description: 'Name of the function to call on Contract', examples: ["balanceOf"] }), - args: Type.Optional(Type.String({ - description: 'Arguments for the function. Comma Separated', - examples:[""] - })), + args: Type.Optional(Type.Array(Type.String({ + description: 'Arguments for the function. Comma Separated', + examples:[""] + }))), }); \ No newline at end of file diff --git a/src/schemas/contract/write.ts b/src/schemas/contract/write.ts index dbbfbddd9..b21b75a6c 100644 --- a/src/schemas/contract/write.ts +++ b/src/schemas/contract/write.ts @@ -1,15 +1,15 @@ import { Type } from '@sinclair/typebox'; /** - * Basic schema for all Request Query String + * Basic schema for all Request Body String */ -export const writeRequestQuerySchema = Type.Object({ +export const writeRequestBodySchema = Type.Object({ function_name: Type.String({ description: 'Name of the function to call on Contract', examples: ["transferFrom"] }), - args: Type.String({ + args: Type.Array(Type.String({ description: 'Arguments for the function. Comma Separated', examples:["0x1946267d81Fb8aDeeEa28e6B98bcD446c8248473,0x3EcDBF3B911d0e9052b64850693888b008e18373,0"] - }), + })), }); \ No newline at end of file diff --git a/src/utilities/convertor.ts b/src/utilities/convertor.ts new file mode 100644 index 000000000..e605173ef --- /dev/null +++ b/src/utilities/convertor.ts @@ -0,0 +1,15 @@ +import { BigNumber } from 'ethers'; + +export const bigNumberReplacer = (value: any): string => { + // if we find a BigNumber then make it into a string (since that is safe) + if ( + BigNumber.isBigNumber(value) || + (typeof value === "object" && + value !== null && + value.type === "BigNumber" && + "hex" in value) + ) { + return BigNumber.from(value).toString(); + } + return value; +}; \ No newline at end of file From c9ff9ebc71e8c9bcf4f5ed8b8e8f6cf848b5b5a1 Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Tue, 16 May 2023 17:55:16 -0700 Subject: [PATCH 22/24] Added env example file --- .example.env | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .example.env diff --git a/.example.env b/.example.env new file mode 100644 index 000000000..49bb13a2a --- /dev/null +++ b/.example.env @@ -0,0 +1,5 @@ +PORT=3005 +OPENAPI_BASE_ORIGIN="http://localhost:3005" +HOST="0.0.0.0" +WALLET_PRIVATE_KEY="" +API_KEY="TEST" \ No newline at end of file From ab6243672017511f678660da123729417604b163 Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Tue, 16 May 2023 18:27:04 -0700 Subject: [PATCH 23/24] Added POSTMAN collection into scripts folder --- scripts/Web3-API.postman_collection.json | 79 ++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 scripts/Web3-API.postman_collection.json diff --git a/scripts/Web3-API.postman_collection.json b/scripts/Web3-API.postman_collection.json new file mode 100644 index 000000000..846948c4f --- /dev/null +++ b/scripts/Web3-API.postman_collection.json @@ -0,0 +1,79 @@ +{ + "info": { + "_postman_id": "e1257f8e-1174-4235-815e-0b73f7383fe9", + "name": "Web3-API", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", + "_exporter_id": "27458986" + }, + "item": [ + { + "name": "Read - Request", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"function_name\": \"balanceOf\",\n \"args\": [\"0x3EcDBF3B911d0e9052b64850693888b008e18373\"]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:3005/contract/mumbai/0x365b83D67D5539C6583b9c0266A548926Bf216F4/read", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3005", + "path": [ + "contract", + "mumbai", + "0x365b83D67D5539C6583b9c0266A548926Bf216F4", + "read" + ], + "query": [ + { + "key": "args", + "value": "\"\"", + "disabled": true + } + ] + } + }, + "response": [] + }, + { + "name": "Write - Request", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\n \"function_name\": \"transfer\",\n \"args\": [\"0x3EcDBF3B911d0e9052b64850693888b008e18373\", 1]\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:3005/contract/mumbai/0x365b83D67D5539C6583b9c0266A548926Bf216F4/write", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3005", + "path": [ + "contract", + "mumbai", + "0x365b83D67D5539C6583b9c0266A548926Bf216F4", + "write" + ] + } + }, + "response": [] + } + ] +} \ No newline at end of file From a143634bd4ee8d67f30cd7018fbad6a070d0c497 Mon Sep 17 00:00:00 2001 From: Farhan Khwaja Date: Wed, 17 May 2023 10:19:52 -0700 Subject: [PATCH 24/24] updated read (POST) to GET to keep it RESTful --- src/api/contract/read/read.ts | 17 ++++++----------- src/api/contract/write/write.ts | 6 +----- src/schemas/contract/read.ts | 13 +++++++++---- src/schemas/contract/write.ts | 12 +++++++----- 4 files changed, 23 insertions(+), 25 deletions(-) diff --git a/src/api/contract/read/read.ts b/src/api/contract/read/read.ts index 028fc8245..e058ffa25 100644 --- a/src/api/contract/read/read.ts +++ b/src/api/contract/read/read.ts @@ -1,30 +1,25 @@ import { FastifyInstance } from 'fastify'; import { StatusCodes } from 'http-status-codes'; -import { Static } from '@sinclair/typebox'; import { getSDK } from '../../../helpers/sdk'; -import { partialRouteSchema, schemaTypes } from '../../../sharedApiSchemas'; +import { partialRouteSchema } from '../../../sharedApiSchemas'; import { logger } from '../../../utilities/logger'; -import { readRequestBodySchema } from '../../../schemas/contract/read'; +import { readRequestBodySchema, readSchema } from '../../../schemas/contract/read'; import { bigNumberReplacer } from '../../../utilities/convertor'; -interface readSchema extends schemaTypes { - Body: Static; -} - export async function readContract(fastify: FastifyInstance) { fastify.route({ - method: 'POST', + method: 'GET', url: '/contract/:chain_name_or_id/:contract_address/read', schema: { description: 'Read From Contract', tags: ['Contract'], operationId: 'read', ...partialRouteSchema, - body: readRequestBodySchema, + querystring: readRequestBodySchema, }, handler: async (request, reply) => { const { chain_name_or_id, contract_address } = request.params; - const { function_name, args } = request.body; + const { function_name, args } = request.query; logger.info('Inside Read Function'); logger.silly(`Chain : ${chain_name_or_id}`) logger.silly(`Contract Address : ${contract_address}`); @@ -35,7 +30,7 @@ export async function readContract(fastify: FastifyInstance) { const sdk = await getSDK(chain_name_or_id); const contract = await sdk.getContract(contract_address); - let returnData = await contract.call(function_name, args); + let returnData = await contract.call(function_name, args ? args.split(",") : []); returnData = bigNumberReplacer(returnData); reply.status(StatusCodes.OK).send({ diff --git a/src/api/contract/write/write.ts b/src/api/contract/write/write.ts index bf08d6190..57edd441b 100644 --- a/src/api/contract/write/write.ts +++ b/src/api/contract/write/write.ts @@ -4,11 +4,7 @@ import { Static } from '@sinclair/typebox'; import { getSDK } from '../../../helpers/sdk'; import { partialRouteSchema, schemaTypes } from '../../../sharedApiSchemas'; import { logger } from '../../../utilities/logger'; -import { writeRequestBodySchema } from '../../../schemas/contract/write'; - -interface writeSchema extends schemaTypes { - Body: Static; -} +import { writeRequestBodySchema, writeSchema } from '../../../schemas/contract/write'; export async function writeToContract(fastify: FastifyInstance) { fastify.route({ diff --git a/src/schemas/contract/read.ts b/src/schemas/contract/read.ts index 224fb35ed..efb158999 100644 --- a/src/schemas/contract/read.ts +++ b/src/schemas/contract/read.ts @@ -1,4 +1,5 @@ -import { Type } from '@sinclair/typebox'; +import { Static, Type } from '@sinclair/typebox'; +import { schemaTypes } from '../../sharedApiSchemas'; /** * Basic schema for all Request Body String @@ -8,8 +9,12 @@ export const readRequestBodySchema = Type.Object({ description: 'Name of the function to call on Contract', examples: ["balanceOf"] }), - args: Type.Optional(Type.Array(Type.String({ + args: Type.Optional(Type.String({ description: 'Arguments for the function. Comma Separated', examples:[""] - }))), -}); \ No newline at end of file + })), +}); + +export interface readSchema extends schemaTypes { + Querystring: Static; +} \ No newline at end of file diff --git a/src/schemas/contract/write.ts b/src/schemas/contract/write.ts index b21b75a6c..db95b9d09 100644 --- a/src/schemas/contract/write.ts +++ b/src/schemas/contract/write.ts @@ -1,8 +1,6 @@ -import { Type } from '@sinclair/typebox'; +import { Static, Type } from '@sinclair/typebox'; +import { schemaTypes } from '../../sharedApiSchemas'; -/** - * Basic schema for all Request Body String - */ export const writeRequestBodySchema = Type.Object({ function_name: Type.String({ description: 'Name of the function to call on Contract', @@ -12,4 +10,8 @@ export const writeRequestBodySchema = Type.Object({ description: 'Arguments for the function. Comma Separated', examples:["0x1946267d81Fb8aDeeEa28e6B98bcD446c8248473,0x3EcDBF3B911d0e9052b64850693888b008e18373,0"] })), -}); \ No newline at end of file +}); + +export interface writeSchema extends schemaTypes { + Body: Static; +} \ No newline at end of file