diff --git a/assets/discord/icon.png b/assets/discord/icon.png new file mode 100644 index 00000000..379ce45d Binary files /dev/null and b/assets/discord/icon.png differ diff --git a/assets/facebook/icon.png b/assets/facebook/icon.png index 607df92d..53b93ee7 100644 Binary files a/assets/facebook/icon.png and b/assets/facebook/icon.png differ diff --git a/assets/github/icon.png b/assets/github/icon.png new file mode 100644 index 00000000..4dabb974 Binary files /dev/null and b/assets/github/icon.png differ diff --git a/assets/linkedin/icon.png b/assets/linkedin/icon.png new file mode 100644 index 00000000..d3d399bd Binary files /dev/null and b/assets/linkedin/icon.png differ diff --git a/assets/telegram/icon.png b/assets/telegram/icon.png new file mode 100644 index 00000000..a426747f Binary files /dev/null and b/assets/telegram/icon.png differ diff --git a/assets/twitter/icon.png b/assets/twitter/icon.png index 9af6b8a7..cb8f5bab 100644 Binary files a/assets/twitter/icon.png and b/assets/twitter/icon.png differ diff --git a/package.json b/package.json index 4543d8b7..52b50566 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "dist/server.js", "scripts": { "dev": "yarn build; nodemon src/server.js", - "build": "rm -rf dist && tsc", + "build": "rm -rf dist && tsc && rm -rf dist/assets && cp -R assets dist/", "prestart": "yarn build", "start": "node dist/server.js", "tests": "ts-mocha './tests/**/*.ts'", @@ -24,18 +24,29 @@ "bugs": { "url": "https://github.com/verida/server-template/issues" }, + "engines": { + "node": ">=16.06" + }, "homepage": "https://github.com/verida/server-template#readme", "dependencies": { - "@verida/account-node": "^2.0.0", - "@verida/client-ts": "^2.0.1", - "@verida/did-client": "^2.0.0", - "@verida/encryption-utils": "^2.0.0", - "@verida/web3": "^2.0.0", + "@oauth-everything/passport-discord": "^1.0.2", + "@sapphire/snowflake": "^3.4.2", + "@superfaceai/passport-twitter-oauth2": "^1.2.3", + "@verida/account-node": "^3.0.1", + "@verida/client-ts": "^3.0.2", + "@verida/did-client": "^3.0.1", + "@verida/encryption-utils": "^3.0.0", + "@verida/helpers": "^3.0.1", + "@verida/types": "^3.0.0", + "@verida/vda-sbt-client": "^3.0.2", + "@verida/verifiable-credentials": "^3.0.2", + "@verida/web3": "^3.0.1", "aws-serverless-express": "^3.4.0", "axios": "^1.2.3", "body-parser": "^1.19.0", "cors": "^2.8.5", "dayjs": "^1.11.1", + "discord.js": "^14.9.0", "dotenv": "^8.2.0", "express": "^4.17.1", "express-basic-auth": "git+https://github.com/Mozzler/express-basic-auth.git", @@ -48,7 +59,6 @@ "nano": "^9.0.5", "passport": "^0.5.2", "passport-facebook": "^3.0.0", - "passport-twitter-oauth2.0": "^1.1.0", "ts-mocha": "^9.0.2", "twitter-api-v2": "^1.14.0" }, @@ -56,7 +66,6 @@ "@types/express": "^4.17.13", "@types/express-session": "1.17.0", "@types/mocha": "^9.1.0", - "@types/pouchdb-core": "^7.0.10", "claudia": "^5.14.1", "nodemon": "^2.0.14", "typescript": "4.6.3" diff --git a/src/config.ts b/src/config.ts index cfeac93b..f938f453 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,16 +1,2 @@ -import { EnvironmentType } from '@verida/client-ts' import serverconfig from './serverconfig.json' - -export default serverconfig - -export function strToEnvType(s: string) { - if (s == EnvironmentType.LOCAL) { - return EnvironmentType.LOCAL; - } else if (s == EnvironmentType.TESTNET) { - return EnvironmentType.TESTNET; - } else if (s == EnvironmentType.MAINNET) { - return EnvironmentType.MAINNET; - } else { - throw new Error("Invalid EnvironmentType value"); - } -} \ No newline at end of file +export default serverconfig \ No newline at end of file diff --git a/src/controller.ts b/src/controller.ts index d1651882..595e38ce 100644 --- a/src/controller.ts +++ b/src/controller.ts @@ -1,18 +1,10 @@ import { Request, Response } from 'express' - -import { Client, ContextInterfaces } from '@verida/client-ts' -import { AutoAccount } from '@verida/account-node' +import { DatabasePermissionOptionsEnum } from '@verida/types' import EncryptionUtils from '@verida/encryption-utils' -import fs from 'fs' - import serverconfig from '../src/serverconfig.json' -import {strToEnvType} from "./config" +import CONFIG from './config' -const VERIDA_ENVIRONMENT = strToEnvType(serverconfig.verida.environment) const CONTEXT_NAME = serverconfig.verida.contextName -const PRIVATE_KEY = serverconfig.verida.privateKey -const DEFAULT_ENDPOINTS = serverconfig.verida.defaultEndpoints -const DID_CLIENT_CONFIG = serverconfig.verida.didClientConfig const log4js = require("log4js") const logger = log4js.getLogger() @@ -23,6 +15,7 @@ const DATA_SYNC_REQUEST_SCHEMA = 'https://vault.schemas.verida.io/data-connectio import Providers from "./providers" import TokenExpiredError from './providers/TokenExpiredError' +import { Utils } from './utils' const delay = async (ms: number) => { await new Promise((resolve) => setTimeout(() => resolve(true), ms)) @@ -87,31 +80,93 @@ export default class Controller { const provider = Providers(providerName) // @todo: handle error and show error message - const connectionToken = await provider.callback(req, res, next) - - // @ts-ignore - const did = req.session.did - - // Send the access token, refresh token and profile database name and encryption key - // so the user can pull their profile remotely and store their tokens securely - // This also avoids this server saving those credentials anywhere, they are only stored by the user - const redirectUrl = `https://vault.verida.io/connection-success?provider=${providerName}&accessToken=${connectionToken.accessToken}&refreshToken=${connectionToken.refreshToken ? connectionToken.refreshToken : ''}` - - // @todo: Generate nice looking thank you page - const output = ` - - -
- Complete Connection -
- - ` - - res.send(output) + try { + const connectionToken = await provider.callback(req, res, next) + + // @ts-ignore + const did = req.session.did + + // Send the access token, refresh token and profile database name and encryption key + // so the user can pull their profile remotely and store their tokens securely + // This also avoids this server saving those credentials anywhere, they are only stored by the user + const redirectUrl = `https://vault.verida.io/connection-success?provider=${providerName}&accessToken=${connectionToken.accessToken}&refreshToken=${connectionToken.refreshToken ? connectionToken.refreshToken : ''}` + + // @todo: Generate nice looking thank you page + const output = ` + + + + +
+ +
+
+
+ + ` + + res.send(output) + } catch (err: any) { + const message = err.message + // @todo: Generate nice looking thank you page + const output = ` + + +
+

Error

+

${message}

+
+ + ` + + res.send(output) + } + } + + /** + * Deprecated + * + * @param req + * @param res + * @param next + */ + public static async sync(req: Request, res: Response, next: any) { + const providerName = req.params.provider + const query = req.query + const did = query.did.toString() + const encryptionKey = Buffer.from(query.key.toString(), 'hex') + const accessToken = query.accessToken ? query.accessToken.toString() : '' + const refreshToken = query.refreshToken ? query.refreshToken.toString() : '' + + return Controller._sync(providerName, did, encryptionKey, accessToken, refreshToken, res, {}) } /** - * Synchronize data from a third party data source with a local collection of datatores. + * New way... supports `syncSchemas` via POST body + * @param req + * @param res + * @param next + * @returns + */ + public static async syncStart(req: Request, res: Response, next: any) { + const providerName = req.params.provider + const encryptionKey = Buffer.from(req.body.key, 'hex') + const did = req.body.did + const accessToken = req.body.accessToken ? req.body.accessToken.toString() : '' + const refreshToken = req.body.refreshToken ? req.body.refreshToken.toString() : '' + const syncSchemas = req.body.syncSchemas + + return Controller._sync(providerName, did, encryptionKey, accessToken, refreshToken, res, syncSchemas) + } + + /** + * Synchronize data from a third party data source with a local collection of datastores. * * Converts the third party into an appropriate Verida schema. * @@ -128,24 +183,17 @@ export default class Controller { * @param next * @returns */ - public static async sync(req: Request, res: Response, next: any) { - const { account, context } = await Controller.getNetwork() + public static async _sync(providerName: string, did: string, encryptionKey: Uint8Array, accessToken: string, refreshToken: string, res: Response, syncSchemas: Record = {}) { + const { account, context } = await Utils.getNetwork() const serverDid = await account.did() - - const providerName = req.params.provider const provider = Providers(providerName) - provider.setSigner(account) - - const query = req.query - const did = query.did.toString() - const encryptionKey = Buffer.from(query.key.toString(), 'hex') // Generate a new sync request const syncRequestDatabaseName = EncryptionUtils.hash(`${did}-${DATA_SYNC_REQUEST_SCHEMA}`) const syncRequestDatastore = await context.openDatastore(DATA_SYNC_REQUEST_SCHEMA, { permissions: { - read: ContextInterfaces.PermissionOptionsEnum.USERS, - write: ContextInterfaces.PermissionOptionsEnum.USERS, + read: DatabasePermissionOptionsEnum.USERS, + write: DatabasePermissionOptionsEnum.USERS, readList: [did], writeList: [did] }, @@ -174,7 +222,7 @@ export default class Controller { // Fetch the necessary data from the provider let data: any = {} try { - data = await provider.syncFromRequest(req, res, next) + data = await provider.sync(accessToken, refreshToken, syncSchemas) } catch (err: any) { syncRequest.status = 'error' if (err instanceof TokenExpiredError) { @@ -196,8 +244,6 @@ export default class Controller { return } - console.log('b') - // Add account auth info if it has changed const newAuth = provider.getAccountAuth() if (newAuth) { @@ -205,7 +251,7 @@ export default class Controller { } // Add latest profile info - syncRequest.syncInfo.profile = await provider.getProfile() + syncRequest.syncInfo.profile = await provider.getProfile(did, context) const response: any = {} const syncingDatabases = [] @@ -218,8 +264,8 @@ export default class Controller { // open a datastore where the user has permission to access the datastores const datastore = await context.openDatastore(schemaUri, { permissions: { - read: ContextInterfaces.PermissionOptionsEnum.USERS, - write: ContextInterfaces.PermissionOptionsEnum.USERS, + read: DatabasePermissionOptionsEnum.USERS, + write: DatabasePermissionOptionsEnum.USERS, readList: [did], writeList: [did] }, @@ -285,60 +331,36 @@ export default class Controller { // This code loops through all the databases that were written to and // checks the encrypted database has enough records written before flagging // it as being fully sync'd - let count = 5 - while (count > 0) { - let completeCount = 0 - for (let i = 0; i < syncingDatabases.length; i++) { - const db = syncingDatabases[i] + for (let i = 0; i < syncingDatabases.length; i++) { + const db = syncingDatabases[i] - const remote = await db.getRemoteEncrypted() - const local = await db.getDb() + await db.close({ + clearLocal: true + }) - const remoteInfo = await remote.info() - const localInfo = await local.info() + console.log('db closed...') + } - if (remoteInfo.doc_count >= localInfo.doc_count) { - completeCount++ - } - } + // Wait 3 seconds to be super sure sync response is saved to DB + await delay(3000) - if (completeCount == syncingDatabases.length) { - // Update the sync request to say it has completed successfully - syncRequest.syncInfo.schemas = response + // Update the sync request to say it has completed successfully + syncRequest.syncInfo.schemas = response - syncRequest.status = "complete" - const res = await syncRequestDatastore.save(syncRequest) - if (!res) { - console.log(`Errors saving sync request`) - console.log(syncRequestDatastore.errors) - } - - logger.info(`Saved sync request indicating process is complete`) - // Wait 3 seconds to be super sure sync response is saved to DB - await delay(3000) - - await context.close({ - clearLocal: true - }) - - return - } - - await delay(2000) - count-- - } + syncRequest.status = "complete" + await syncRequestDatastore.save(syncRequest) - // After 5x2 second delays, we still don't have sync so assume it has failed - syncRequest.status = "error" - syncRequest.syncInfo.error = "Server timed out syncing encrypted database" + console.log('sync request saved') - await syncRequestDatastore.save(syncRequest) - - logger.info(`Saved sync request indicating process has error`) + await delay(3000) await context.close({ clearLocal: true }) + + console.log('context closed') + + return } /** @@ -355,18 +377,14 @@ export default class Controller { * @returns */ public static async syncDone(req: Request, res: Response, next: any) { - logger.trace(`syncDone()`) - return res.send({ - success: true - }) const providerName = req.params.provider const provider = Providers(providerName) const schemaUris = provider.schemaUris() const query = req.query - const did: string = query.did.toString() + const did = query.did.toString() - const { context } = await Controller.getNetwork() + const { context } = await Utils.getNetwork() const clearedDatabases = [] for (let i in schemaUris) { @@ -374,8 +392,8 @@ export default class Controller { const databaseName = EncryptionUtils.hash(`${did}-${schemaUri}`) const datastore = await context.openDatastore(schemaUri, { permissions: { - read: ContextInterfaces.PermissionOptionsEnum.USERS, - write: ContextInterfaces.PermissionOptionsEnum.USERS, + read: DatabasePermissionOptionsEnum.USERS, + write: DatabasePermissionOptionsEnum.USERS, readList: [did], writeList: [did] }, @@ -386,7 +404,7 @@ export default class Controller { try { // @todo: use `db.destroy()` once its released - await db._localDb.destroy() + await db.destroy() clearedDatabases.push(schemaUri) } catch (err) { logger.error(err.status, err.name) @@ -398,61 +416,25 @@ export default class Controller { }) } - /** - * Get a network, context and account instance - * - * @returns - */ - public static async getNetwork(): Promise { - const network = new Client({ - environment: VERIDA_ENVIRONMENT - }) - const account = new AutoAccount(DEFAULT_ENDPOINTS, { - privateKey: PRIVATE_KEY, - environment: VERIDA_ENVIRONMENT, - // @ts-ignore - didClientConfig: DID_CLIENT_CONFIG - }) - await network.connect(account) - const context = await network.openContext(CONTEXT_NAME) + public static async providers(req: Request, res: Response) { + const providers = Object.keys(CONFIG.providers) - return { - network, - context, - account - } - } - - /** - * Get a list of all the supported providers - */ - public static async getProviders(): Promise { - // Build a list of data source providers from the providers directory - const providerDirectory = fs.readdirSync('./src/providers') - const providers = [] - for (let i in providerDirectory) { - const providerEntry = providerDirectory[i] - if (providerEntry.match('\\.')) { - // ignore files (indicated by having a `.` in the name) - continue - } - - providers.push(providerEntry) - } - - // Build up a list of providers - const providerList = [] + const results: any = {} for (let p in providers) { const providerName = providers[p] - const provider = Providers(providerName) - providerList.push({ - name: providerName, - label: provider.getLabel(), - icon: provider.icon ? provider.icon : `${serverconfig.assetsUrl}/${providerName}/icon.png` - }) + try { + const provider = Providers(providerName) + results[providerName] = { + name: providerName, + label: provider.getProviderLabel(), + icon: provider.getProviderImageUrl() + } + } catch (err) { + // skip broken providers + } } - return providerList + return res.send(results) } } \ No newline at end of file diff --git a/src/providers/BaseProvider.ts b/src/providers/BaseProvider.ts index 2da34176..fd246e65 100644 --- a/src/providers/BaseProvider.ts +++ b/src/providers/BaseProvider.ts @@ -1,6 +1,9 @@ -import { AutoAccount } from '@verida/account-node' +import { Context } from '@verida/client-ts' +import { explodeDID } from '@verida/helpers' import { Request, Response } from 'express' +import { Utils } from '../utils' import BaseProviderConfig from './BaseProviderConfig' +import serverconfig from '../serverconfig.json' export interface AccountAuth { accessToken: string, @@ -15,37 +18,40 @@ export interface AccountProfile { createdAt?: string url?: string avatarUrl?: string - proof?: string - proofSignature?: string + credential?: string } -export default class BaseProvider { +export interface SyncSchemaConfig { + limit?: number + sinceId?: string +} - protected signerContext: string - protected signerAccount?: AutoAccount +export default class BaseProvider { - protected icon?: string protected config: BaseProviderConfig protected newAuth?: AccountAuth protected profile?: AccountProfile - public constructor(config: BaseProviderConfig, signerContext: string) { + public constructor(config: BaseProviderConfig) { this.config = config - this.signerContext = signerContext } - public setSigner(signerAccount: AutoAccount) { - this.signerAccount = signerAccount + public getProviderId(): string { + throw new Error('Not implemented') } - public getProviderId() { - throw new Error('Not implemented') + public getProviderImageUrl(): string { + return `${serverconfig.assetsUrl}/${this.getProviderId()}/icon.png` } - public getLabel() { + public getProviderLabel(): string { return this.config.label } + public getProviderSbtImage(): string { + return this.config.sbtImage + } + public async connect(req: Request, res: Response, next: any): Promise { throw new Error('Not implemented') } @@ -54,28 +60,48 @@ export default class BaseProvider { throw new Error('Not implemented') } - public async getProfile(): Promise { - if (this.profile && !this.profile.proof) { - const did = await this.signerAccount.did() - this.profile.proof = `${this.getProviderId()}-${this.profile.id}-${did.toLowerCase()}` + public async getProfileData(did: string): Promise> { + const profileLabel = this.profile.name || this.profile.username || this.profile.id + const { address: didAddress } = explodeDID(did) + + const credentialData: Record = { + did, + didAddress: didAddress.toLowerCase(), + name: `${this.getProviderLabel()}: ${profileLabel}`, + type: `${this.getProviderId()}-account`, + image: this.getProviderSbtImage(), + description: `Proof of ${this.getProviderLabel()} account ownership ${profileLabel}${profileLabel == this.profile.id ? '' : ' (' + this.profile.id+ ')'}`, + attributes: [{ + trait_type: "accountCreated", + value: this.profile.createdAt + }], + uniqueAttribute: this.profile.id, + } - const keyring = await this.signerAccount.keyring(this.signerContext) - this.profile.proofSignature = await keyring.sign(this.profile.proof) + if (this.profile.url) { + credentialData.external_url = this.profile.url } - return this.profile + if (this.profile.avatarUrl) { + credentialData.attributes.push({ + trait_type: "avatarUrl", + value: this.profile.avatarUrl + }) + } + + return credentialData } - public async syncFromRequest(req: Request, res: Response, next: any): Promise { - const query = req.query - const accessToken = query.accessToken ? query.accessToken.toString() : '' - const refreshToken = query.refreshToken ? query.refreshToken.toString() : '' + public async getProfile(did: string, context: Context): Promise { + if (this.profile && !this.profile.credential) { + const profileCredentialData = await this.getProfileData(did) + this.profile.credential = await Utils.buildCredential(profileCredentialData, context) + } - return this.sync(accessToken, refreshToken) + return this.profile } /** - * * Must update `profile` or `newAuth` if they have changed * * @param accessToken @@ -83,20 +109,22 @@ export default class BaseProvider { * @param schemaUri * @returns */ - public async sync(accessToken: string, refreshToken: string, schemaUri?: string): Promise { + public async sync(accessToken: string, refreshToken: string, syncSchemas: Record = {}): Promise { const api = await this.getApi(accessToken, refreshToken) const results = [] const handlers = this.syncHandlers() + const schemaList = Object.keys(syncSchemas) for (let h in handlers) { const handler = handlers[h] - if (schemaUri && handler.getSchemaUri() != schemaUri) { + if (schemaList.length && schemaList.indexOf(handler.getSchemaUri()) === -1) { + // Schema list exists, but not found continue } const handlerInstance = new handler(this.config, this.profile) - const handlerResults = await handlerInstance.sync(api) + const handlerResults = await handlerInstance.sync(api, syncSchemas[handler.getSchemaUri()]) results[handler.getSchemaUri()] = handlerResults } diff --git a/src/providers/BaseProviderConfig.ts b/src/providers/BaseProviderConfig.ts index 9e655f2b..f60f467c 100644 --- a/src/providers/BaseProviderConfig.ts +++ b/src/providers/BaseProviderConfig.ts @@ -1,5 +1,6 @@ export default interface BaseProviderConfig { + sbtImage: string label: string signerPrivateKey: string } \ No newline at end of file diff --git a/src/providers/BaseSyncHandler.ts b/src/providers/BaseSyncHandler.ts index 138b31d3..11c8b965 100644 --- a/src/providers/BaseSyncHandler.ts +++ b/src/providers/BaseSyncHandler.ts @@ -1,4 +1,4 @@ -import { AccountProfile } from "./BaseProvider" +import { AccountProfile, SyncSchemaConfig } from "./BaseProvider" export default class BaseSyncHandler { @@ -18,7 +18,7 @@ export default class BaseSyncHandler { /** * Implement this sync method to generate data for the schemaUri of this sync handler */ - public async sync(api: any): Promise { + public async sync(api: any, syncConfig: SyncSchemaConfig): Promise { throw new Error('Not implemented') } } \ No newline at end of file diff --git a/src/providers/discord/following.ts b/src/providers/discord/following.ts new file mode 100644 index 00000000..2d750ff0 --- /dev/null +++ b/src/providers/discord/following.ts @@ -0,0 +1,60 @@ +import BaseSyncHandler from "../BaseSyncHandler" +import dayjs from 'dayjs' +import { SyncSchemaConfig } from "../BaseProvider" +const _ = require('lodash') + +const log4js = require("log4js") +const logger = log4js.getLogger() + +//import { Client } from 'discord.js' + +export default class Following extends BaseSyncHandler { + + protected static schemaUri: string = 'https://common.schemas.verida.io/social/following/v0.1.0/schema.json' + + /** + * @todo: Support paging through all results + * @todo: Correctly support `this.config.limitResults` + * + * @param api + */ + public async sync(api: any, syncConfig: SyncSchemaConfig = {}): Promise { + const guildResponse: any = await api.get('/users/@me/guilds') + console.log(syncConfig) + + const now = (new Date()).toISOString() + const guilds: any = [] + for (let i in guildResponse) { + try { + const guildItem = guildResponse[i] + console.log('Processing', guildItem.name) + /* + Note: It's not possible to fetch followedTimestamp. It appears Discord rate limiting is + really extreme and only allows 5 requests per minute. + + const guildMemberInfo = await api.get(`/users/@me/guilds/${guildItem.id}/member`) + const followedTimestamp = guildMemberInfo.joined_at + */ + + const guildIcon = api.cdn.icon(guildItem.id, guildItem.icon) + const guildEntry: any = { + _id: `discord-${guildItem.id}`, + name: guildItem.name, + icon: guildIcon, + summary: `Discord guild: ${guildItem.name}`, + //uri: Discord doesn't support URL's for servers + sourceApplication: 'https://discord.com/', + sourceId: guildItem.id, + //followedTimestamp: now, + insertedAt: now + } + + guilds.push(guildEntry) + } catch (err) { + console.log(err) + } + } + + return guilds + } +} \ No newline at end of file diff --git a/src/providers/discord/index.ts b/src/providers/discord/index.ts new file mode 100644 index 00000000..b9771de7 --- /dev/null +++ b/src/providers/discord/index.ts @@ -0,0 +1,171 @@ +import { Request, Response } from 'express' +import Base from "../BaseProvider" +import BaseProviderConfig from '../BaseProviderConfig' + +const passport = require("passport") +import { Strategy as DiscordStrategy, Scope } from '@oauth-everything/passport-discord'; +import { REST, Client, GatewayIntentBits } from 'discord.js' +import { DiscordSnowflake } from '@sapphire/snowflake' +import dayjs from 'dayjs' +import axios from 'axios' + +//import SBTs from './sbts' +import Following from './following' +import TokenExpiredError from '../TokenExpiredError' + +export interface DiscordProviderConfig extends BaseProviderConfig { + clientID: string + clientSecret: string + callbackUrl: string + limitResults: boolean +} + +// Note: If scopes change a user needs to disconnect and reconnect the app +const SCOPE = [Scope.IDENTIFY, Scope.EMAIL, Scope.GUILDS, 'guilds.members.read'] + +export default class DiscordProvider extends Base { + + protected config: DiscordProviderConfig + + public getProviderId() { + return 'discord' + } + + public getProviderLabel() { + return 'Discord' + } + + public syncHandlers(): any[] { + return [ + //SBTs + Following + ] + return [] + } + + public async connect(req: Request, res: Response, next: any): Promise { + this.init() + const auth = await passport.authenticate(this.getProviderId()) + return auth(req, res, next) + } + + /** + * @todo: Create proper connectionToken response + * + * @param req + * @param res + * @param next + * @returns + */ + public async callback(req: Request, res: Response, next: any): Promise { + this.init() + + const promise = new Promise((resolve, rejects) => { + const auth = passport.authenticate(this.getProviderId(), { + scope: SCOPE, + failureRedirect: '/failure/discord', + failureMessage: true + }, function(err: any, data: any) { + if (err) { + rejects(err) + } else { + const connectionToken = { + id: data.profile.id, + accessToken: data.accessToken, + refreshToken: data.refreshToken, + profile: data.profile + } + + resolve(connectionToken) + } + }) + + auth(req, res, next) + }) + + const result = await promise + return result + } + + public async getApi(accessToken?: string, refreshToken?: string): Promise { + let me: any, client: REST + + try { + client = new REST({ version: '10', authPrefix: 'Bearer' }).setToken(accessToken); + me = await client.get('/users/@me') + } catch (err: any) { + if (err.status && (err.status == 401 || err.status == 403)) { + console.log('token has expired, fetch a new one') + console.log('refreshToken', refreshToken) + + try { + const requestData = { + client_id: this.config.clientID, + client_secret: this.config.clientSecret, + grant_type: 'refresh_token', + refresh_token: refreshToken + } + const newTokenResponse = await axios.post('https://discord.com/api/v10/oauth2/token', new URLSearchParams(requestData).toString(), { + auth: { + username: this.config.clientID, + password: this.config.clientSecret + }, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + } + }) + + const { access_token, refresh_token } = newTokenResponse.data + this.setAccountAuth(access_token, refresh_token) + + client = new REST({ version: '10', authPrefix: 'Bearer' }).setToken(access_token); + me = await client.get('/users/@me') + } catch (err) { + console.log(err.response) + // Unrecoverable auth error + throw new TokenExpiredError(err.message) + } + } else { + throw err + } + } + + // ID's are based on timestamp of creation + // @see https://github.com/discordjs/discord.js/blob/384b4d10e8642f0f280ea1651f33cd378c341333/packages/discord.js/src/structures/User.js#L130 + const createdTimestamp = DiscordSnowflake.timestampFrom(me.id) + const createdAt = dayjs(createdTimestamp).toISOString() + + // Note: Discord doesn't have the concept of a profile `url` or `description` + this.profile = { + id: me.id, + name: me.display_name ? me.display_name : me.username, + username: me.username, + // use user custom avatar if set, otherwise use default discord avatar + avatarUrl: me.avatar ? client.cdn.avatar(me.id, me.avatar) : client.cdn.defaultAvatar(me.discriminator % 5), + createdAt + } + + return client + } + + public init() { + // obtain a new access token from refresh token + passport.use(new DiscordStrategy({ + clientID: this.config.clientID, + clientSecret: this.config.clientSecret, + callbackURL: this.config.callbackUrl, + scope: SCOPE, + }, + function(accessToken: string, refreshToken: string, profile: any, cb: any) { + // Simply return the raw data + return cb(null, { + accessToken, + refreshToken, + profile + }) + } + )); + } + +} + diff --git a/src/providers/discord/sbts.ts b/src/providers/discord/sbts.ts new file mode 100644 index 00000000..5fa23cd5 --- /dev/null +++ b/src/providers/discord/sbts.ts @@ -0,0 +1,92 @@ +import BaseSyncHandler from "../BaseSyncHandler" +import { SyncSchemaConfig } from "../BaseProvider" +import { REST } from 'discord.js' +import DiscordProvider from "." +const _ = require('lodash') + +// import dayjs from 'dayjs' +//const log4js = require("log4js") +//const logger = log4js.getLogger() + +export default class SBTs extends BaseSyncHandler { + protected static schemaUri: string = 'https://common.schemas.verida.io/credential/base/v0.2.0/schema.json' + + /** + * @todo: Support paging through all results + * @todo: Correctly support `this.config.limitResults` + * + * @param api + */ + public async sync(api: REST, syncConfig: SyncSchemaConfig = {}): Promise { + console.log('fetching sbt credentials to sync') + + const guildResponse: any = await api.get('/users/@me/guilds') + + //const genericApi = new REST({ version: '10', authPrefix: 'Bearer' }).setToken(provider.getConfig()); + + const guilds = {} + return guilds + for (let i in guildResponse) { + try { + const guildItem = guildResponse[i] + console.log('fetching member guild info for ', guildItem.name) + const guildMemberInfo = await api.get(`/users/@me/guilds/${guildItem.id}/member`) + console.log('fetching guild info for ', guildItem.name) + const guildInfo = await api.get(`/guilds/${guildItem.id}`) + console.log(guildItem, guildMemberInfo, guildInfo) + } catch (err) { + console.log(err) + } + } + + return guilds + /*console.log('following.sync()') + console.log(syncConfig) + const me = await api.v2.me() + const limit = syncConfig.limit ? syncConfig.limit : this.config.followingLimit + const sinceId = syncConfig.sinceId ? syncConfig.sinceId.substring(8) : undefined + console.log('limit', limit) + console.log('sinceId', sinceId) + + const followingResult = await api.v2.following(me.data.id, { + 'user.fields': ['profile_image_url', 'description'], + asPaginator: true + }) + + const results = [] + const now = (new Date()).toISOString() + for await (const user of followingResult) { + if (sinceId && user.id == sinceId) { + console.log('latest user id found, exiting') + break + } + + // Iterate until rate limit is hit + // or API calls returns no more results + + //console.log(user) + + results.push({ + _id: `twitter-${user.id}`, + name: user.name, + icon: user.profile_image_url, + summary: user.description.substring(0,256), + uri: `https://twitter.com/${user.username}`, + sourceApplication: 'https://twitter.com/', + sourceId: user.id, + // twitter doesn't support a timestamp on when the user + // was followed, so set to current timestamp + followedTimestamp: now, + insertedAt: now + }) + + if (results.length >= limit) { + break + } + } + + console.log('returning following results:', results.length) + return results*/ + } + +} \ No newline at end of file diff --git a/src/providers/facebook/index.ts b/src/providers/facebook/index.ts index 787f592d..b8ee30a1 100644 --- a/src/providers/facebook/index.ts +++ b/src/providers/facebook/index.ts @@ -26,6 +26,10 @@ export default class FacebookProvider extends Base { return 'facebook' } + public getProviderLabel() { + return 'Facebook' + } + public syncHandlers(): any[] { return [ Following, diff --git a/src/providers/index.ts b/src/providers/index.ts index f455670d..1ff98c63 100644 --- a/src/providers/index.ts +++ b/src/providers/index.ts @@ -8,5 +8,5 @@ export default function (providerName: string): any { const providerConfig = _.merge(CONFIG.providerDefaults, CONFIG.providers[providerName]) providerConfig.callbackUrl = `${CONFIG.serverUrl}/callback/${providerName}` - return new provider.default(providerConfig, CONFIG.verida.contextName) + return new provider.default(providerConfig) } \ No newline at end of file diff --git a/src/providers/twitter/index.ts b/src/providers/twitter/index.ts index 28ade64a..c76360a6 100644 --- a/src/providers/twitter/index.ts +++ b/src/providers/twitter/index.ts @@ -3,7 +3,7 @@ import Base from "../BaseProvider" import BaseProviderConfig from '../BaseProviderConfig' const passport = require("passport") -const TwitterStrategy = require("passport-twitter-oauth2.0") +import { Strategy as TwitterStrategy } from '@superfaceai/passport-twitter-oauth2' import { TwitterApi as TwitterClient } from 'twitter-api-v2' import dayjs from 'dayjs' @@ -29,6 +29,10 @@ export default class TwitterProvider extends Base { return 'twitter' } + public getProviderLabel() { + return 'Twitter' + } + public syncHandlers(): any[] { return [ Following, @@ -141,10 +145,8 @@ export default class TwitterProvider extends Base { clientID: this.config.clientID, clientSecret: this.config.clientSecret, callbackURL: this.config.callbackUrl, - clientType: 'private', + clientType: 'confidential', scope: SCOPE, - pkce: true, // required, - state: true // required }, function(accessToken: string, refreshToken: string, profile: any, cb: any) { // Simply return the raw data diff --git a/src/request-validator.ts b/src/request-validator.ts index 391983f9..632c92ce 100644 --- a/src/request-validator.ts +++ b/src/request-validator.ts @@ -1,7 +1,6 @@ -const basicAuth = require('express-basic-auth') const mcache = require("memory-cache") import { DIDClient } from '@verida/did-client' -import { sign } from 'crypto' +import { VERIDA_ENVIRONMENT } from './utils' let didClient: DIDClient @@ -17,13 +16,9 @@ export default class RequestValidator { * @param {*} req */ public authorize(did: string, signature: string, req: any, cb: any) { - console.log('authorize called') did = did.replace(/_/g, ":").toLowerCase() const storageContext = req.headers['context-name'] const cacheKey = `${did}/${storageContext}` - console.log("did", did) - console.log('signature', signature) - console.log('storageContext', storageContext) const authCheck = async () => { try { @@ -35,7 +30,7 @@ export default class RequestValidator { if (!didDocument) { if (!didClient) { didClient = new DIDClient({ - network: 'testnet' + network: VERIDA_ENVIRONMENT }) } diff --git a/src/routes.ts b/src/routes.ts index e79b6fed..6981d74e 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -6,6 +6,8 @@ const router = express.Router() router.get('/connect/:provider', Controller.connect) router.get('/callback/:provider', Controller.callback) router.get('/sync/:provider', Controller.sync) +router.post('/syncStart/:provider', Controller.syncStart) router.get('/syncDone/:provider', Controller.syncDone) +router.get('/providers', Controller.providers) export default router \ No newline at end of file diff --git a/src/server-app.ts b/src/server-app.ts index 4a36bb09..22350778 100644 --- a/src/server-app.ts +++ b/src/server-app.ts @@ -10,6 +10,8 @@ const logger = log4js.getLogger() import CONFIG from "./config" logger.level = CONFIG.logLevel +const path = require('path') + //const basicAuth = require('express-basic-auth') //import RequestValidator from './request-validator' @@ -17,6 +19,8 @@ logger.level = CONFIG.logLevel const app = express(); //const validator = new RequestValidator() +console.log(path.join(__dirname, 'assets')) +app.use('/assets', express.static(path.join(__dirname, 'assets'))) app.use(session({ secret: 'c20n498n720489t729amx9 8es', resave: false, @@ -42,7 +46,7 @@ app.use(router) module.exports=app /* -//Example code to create HTTPS server +//Example code to create HTTPS server (for facebook testing) const https = require("https") const fs = require("fs") diff --git a/src/server.ts b/src/server.ts index a4365201..5ce30522 100644 --- a/src/server.ts +++ b/src/server.ts @@ -3,7 +3,28 @@ This lets us run the Express server locally */ const app = require('./server-app'); + const PORT = process.env.SERVER_PORT ? process.env.SERVER_PORT : 5021; + + app.listen(PORT, () => { console.log(`server running on port ${PORT}`); -}); \ No newline at end of file +}); +/* + +const https = require("https") +const fs = require("fs") + +const key = fs.readFileSync("./keys/server.key") +const cert = fs.readFileSync("./keys/server.cert") + +https.createServer( + { + key, + cert + }, + app + ).listen(PORT, () => { + console.log(`server running on port ${PORT}`) +}); +*/ \ No newline at end of file diff --git a/src/serverconfig.json b/src/serverconfig.json index d35447bc..56e47010 100644 --- a/src/serverconfig.json +++ b/src/serverconfig.json @@ -1,32 +1,44 @@ { - "serverUrl": "http://localhost:5021", - "assetsUrl": "http://localhost:5021/assets", + "serverUrl": "http://192.168.68.128:5021", + "assetsUrl": "http://192.168.68.128:5021/assets", "logLevel": "debug", "verida": { "environment": "testnet", "contextName": "Verida: Data Connector", - "privateKey": "", + "privateKey": "0xccd3b996ec98a9a536efdffbae40e5eaaf117765a587483c69195c9460165c37", "defaultEndpoints": { "defaultDatabaseServer": { "type": "VeridaDatabase", - "endpointUri": [] + "endpointUri": ["https://node1-apse2.acacia.verida.tech/", "https://node1-use2.acacia.verida.tech/", "https://node3-apse2.acacia.verida.tech/"] }, "defaultMessageServer": { "type": "VeridaMessage", - "endpointUri": [] + "endpointUri": ["https://node1-apse2.acacia.verida.tech/", "https://node1-use2.acacia.verida.tech/", "https://node3-apse2.acacia.verida.tech/"] } }, "didClientConfig": { - "callType": "web3", + "callType": "gasless", "network": "testnet", "web3Config": { + "rpcUrl": "https://rpc-mumbai.maticvigil.com/", + "serverConfig": { + "headers": { + "context-name": "Verida: Vault" + } + }, + "postConfig": { + "headers": { + "user-agent": "Verida-Vault" + } + }, + "endpointUrl": "https://meta-tx-server1.tn.verida.tech" }, "rpcUrl": "https://rpc-mumbai.maticvigil.com/", - "didEndpoints": [] + "didEndpoints": ["https://node1-apse2.acacia.verida.tech/did/", "https://node1-use2.acacia.verida.tech/did/", "https://node3-apse2.acacia.verida.tech/did/"] } }, "testing": { - "contextName": "", + "contextName": "Verida Testing: Fake Vault", "veridaPrivateKey": "", "encryptionKey": "" }, @@ -35,22 +47,42 @@ "label": "Facebook", "appId": "", "appSecret": "", + "sbtImage": "https://data.verida.network/ipfs/QmcCoAjMWQpz7FwJi1d7jSh9EJ1m3xY1FRGxPi9pu3Rit7/FacebookBadge.png", "followingLimit": 20, "postLimit": 20, "testing": { "accessToken": "" } }, + "twitter-verida": { + "label": "Twitter", + "apiKey": "", + "apiSecret": "", + "bearerToken": "", + "followingLimit": 20, + "postLimit": 20, + "testing": { + "accessToken": "", + "refreshToken": "" + } + }, "twitter": { "label": "Twitter", "clientID": "", "clientSecret": "", + "sbtImage": "https://data.verida.network/ipfs/QmWpmaBusMENzxLJb5RJUzp951sXPm9GLQCy4pt5zC2XdU/TwitterBadge.png", "followingLimit": 20, "postLimit": 20, "testing": { "accessToken": "", "refreshToken": "" } + }, + "discord": { + "label": "Discord", + "clientID": "", + "clientSecret": "", + "sbtImage": "" } }, "providerDefaults": { diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 00000000..8002c4f2 --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,111 @@ +import { EnvironmentType } from '@verida/types' +import { AutoAccount } from "@verida/account-node" +import { Client, Context } from "@verida/client-ts" +import { Credentials } from '@verida/verifiable-credentials' +import Providers from "./providers" +import fs from 'fs' +import serverconfig from '../src/serverconfig.json' + +const CONTEXT_NAME = serverconfig.verida.contextName +const PRIVATE_KEY = serverconfig.verida.privateKey +const DID_CLIENT_CONFIG = serverconfig.verida.didClientConfig + +const SBT_CREDENTIAL_SCHEMA = 'https://common.schemas.verida.io/token/sbt/credential/v0.1.0/schema.json' + +export { + CONTEXT_NAME, + PRIVATE_KEY, + DID_CLIENT_CONFIG, + SBT_CREDENTIAL_SCHEMA +} + +export class Utils { + + /** + * Get a network, context and account instance + * + * @returns + */ + public static async getNetwork(): Promise { + const VERIDA_ENVIRONMENT = Utils.strToEnvType(serverconfig.verida.environment) + const network = new Client({ + environment: VERIDA_ENVIRONMENT + }) + const account = new AutoAccount({ + privateKey: PRIVATE_KEY, + environment: VERIDA_ENVIRONMENT, + // @ts-ignore + didClientConfig: DID_CLIENT_CONFIG + }) + await network.connect(account) + const context = await network.openContext(CONTEXT_NAME) + + return { + network, + context, + account + } + } + + /** + * Get a list of all the supported providers + */ + public static async getProviders(): Promise { + // Build a list of data source providers from the providers directory + const providerDirectory = fs.readdirSync('./src/providers') + const providers = [] + for (let i in providerDirectory) { + const providerEntry = providerDirectory[i] + if (providerEntry.match('\\.')) { + // ignore files (indicated by having a `.` in the name) + continue + } + + providers.push(providerEntry) + } + + // Build up a list of providers + const providerList = [] + for (let p in providers) { + const providerName = providers[p] + const provider = Providers(providerName) + providerList.push({ + name: providerName, + label: provider.getProviderLabel(), + icon: provider.icon ? provider.icon : `${serverconfig.assetsUrl}/${providerName}/icon.png` + }) + } + + return providerList + } + + public static async buildCredential( + credentialData: Record, + context: Context, + ): Promise { + const credentials = new Credentials(); + + return await credentials.createVerifiableCredentialRecord({ + context: context as any, + data: credentialData, + subjectId: credentialData.did, + schema: SBT_CREDENTIAL_SCHEMA + }, credentialData.name, credentialData.description, credentialData.image) + } + + public static strToEnvType(s: string) { + if (s == EnvironmentType.LOCAL) { + return EnvironmentType.LOCAL; + } else if (s == EnvironmentType.TESTNET) { + return EnvironmentType.TESTNET; + } else if (s == EnvironmentType.MAINNET) { + return EnvironmentType.MAINNET; + } else { + throw new Error("Invalid EnvironmentType value"); + } + } +} + +const VERIDA_ENVIRONMENT = Utils.strToEnvType(serverconfig.verida.environment) + +export { VERIDA_ENVIRONMENT } \ No newline at end of file diff --git a/tests/common.utils.ts b/tests/common.utils.ts index 5a28a0db..d557e824 100644 --- a/tests/common.utils.ts +++ b/tests/common.utils.ts @@ -1,11 +1,11 @@ - const assert = require("assert") import Axios from 'axios' -import { EnvironmentType, Context, Client, ContextInterfaces } from '@verida/client-ts' +import { Context, Client } from '@verida/client-ts' import { AutoAccount } from '@verida/account-node' import serverconfig from '../src/serverconfig.json' import Datastore from '@verida/client-ts/dist/context/datastore' +import { DatabasePermissionOptionsEnum, EnvironmentType } from '@verida/types' const SERVER_URL = serverconfig.serverUrl const TEST_VAULT_CONTEXT = serverconfig.testing.contextName @@ -14,8 +14,15 @@ const TEST_VAULT_PRIVATE_KEY = serverconfig.testing.veridaPrivateKey const VERIDA_ENVIRONMENT = serverconfig.verida.environment const DID_CLIENT_CONFIG = serverconfig.verida.didClientConfig +const DATA_SYNC_REQUEST_SCHEMA = 'https://vault.schemas.verida.io/data-connections/sync-request/v0.1.0/schema.json' + const axios = Axios.create() +export interface SyncSchemaConfig { + limit?: number + sinceId?: string +} + export default class CommonUtils { static getNetwork = async (): Promise => { @@ -42,22 +49,34 @@ export default class CommonUtils { } } - static syncConnector = async (provider: string, accessToken: string, refreshToken: string, did: string, encryptionKey: string): Promise => { - return await axios.get(`${SERVER_URL}/sync/${provider}?accessToken=${accessToken}&refreshToken=${refreshToken}&did=${did}&key=${encryptionKey}`) + static syncConnector = async (provider: string, accessToken: string, refreshToken: string, did: string, encryptionKey: string, syncSchemas: Record): Promise => { + return await axios.post(`${SERVER_URL}/syncStart/${provider}`, { + accessToken, + refreshToken, + did, + key: encryptionKey, + syncSchemas + }) } - static openSchema = async (context: Context, contextName: string, schemaName: string, databaseName: string, encryptionKey: string, externalDid: string, did: string): Promise => { - const key = Buffer.from(encryptionKey, 'hex') + static syncDone = async (provider: string, did: string): Promise => { + return await axios.get(`${SERVER_URL}/syncDone/${provider}`, { + params: { + did + } + }) + } + static async openSchema(context: Context, contextName: string, schemaName: string, databaseName: string, encryptionKey: string, externalDid: string, did: string): Promise { const externalDatastore = await context.openExternalDatastore(schemaName, externalDid, { permissions: { - read: ContextInterfaces.PermissionOptionsEnum.USERS, - write: ContextInterfaces.PermissionOptionsEnum.USERS, + read: DatabasePermissionOptionsEnum.USERS, + write: DatabasePermissionOptionsEnum.USERS, readList: [did], writeList: [did] }, // @ts-ignore - encryptionKey: key, + encryptionKey: Buffer.from(encryptionKey, 'hex'), databaseName, contextName }) @@ -65,9 +84,48 @@ export default class CommonUtils { return externalDatastore } - static closeDatastore = async (datastore: Datastore): Promise => { + static getSyncResult = async (connection: any, syncRequestResult: any, encryptionKey: string) => { + const { serverDid, contextName, syncRequestId, syncRequestDatabaseName } = syncRequestResult.data + + let syncResult + let limit = 10 + while (limit > 0) { + try { + const syncRequest = await CommonUtils.openSchema( + connection.context, + contextName, + DATA_SYNC_REQUEST_SCHEMA, + syncRequestDatabaseName, + encryptionKey, + serverDid, + connection.did) + syncResult = await syncRequest.get(syncRequestId) + await CommonUtils.closeDatastore(syncRequest) + + if (syncResult.status == 'requested') { + continue + } + break + } catch (err) { + limit-- + await CommonUtils.sleep(1000) + } + } + + if (!syncResult) { + throw new Error(`No sync result after 10 seconds`) + } else { + return syncResult + } + } + + static closeDatastore = async (datastore: Datastore) => { await datastore.close({ clearLocal: true }) } + + static sleep = async (ms) => { + return new Promise(resolve => setTimeout(resolve, ms)); + } } \ No newline at end of file diff --git a/tests/server.tests.ts b/tests/server.tests.ts index 072c7339..55a34a12 100644 --- a/tests/server.tests.ts +++ b/tests/server.tests.ts @@ -33,32 +33,48 @@ describe(`${providerName} Tests`, function() { ) const info = await (await followingDatastore.getDb()).info() - encryptionKey = info.encryptionKey - //console.log(info) + encryptionKey = Buffer.from(info.encryptionKey).toString('hex') await CommonUtils.closeDatastore(followingDatastore) }) it(`Can sync ${providerName}`, async () => { - const syncRequestResult = await CommonUtils.syncConnector(providerName, creds.accessToken, creds.refreshToken, connection.did, encryptionKey) - - console.log(syncRequestResult.data) - - const { serverDid, contextName, syncRequestId, syncRequestDatabaseName } = syncRequestResult.data - - /*this.checkSync( - serverDid, - contextName, - syncRequestId, - syncRequestDatabaseName + const syncSchemas = {} + syncSchemas[SCHEMA_FOLLOWING] = { + limit: 10 + } + const syncRequestResult = await CommonUtils.syncConnector(providerName, creds.accessToken, creds.refreshToken, connection.did, encryptionKey, syncSchemas) + + const syncResult = await CommonUtils.getSyncResult(connection, syncRequestResult, encryptionKey) + const schemaResult = syncResult.syncInfo.schemas[SCHEMA_FOLLOWING] + + const followingDatastore = await CommonUtils.openSchema( + connection.context, + syncRequestResult.data.contextName, + SCHEMA_FOLLOWING, + schemaResult.databaseName, + schemaResult.encryptionKey, + syncRequestResult.data.serverDid, + syncRequestResult.data.did ) + + // Get all the data that was fetched + const syncData = await followingDatastore.getMany() - const syncData = await provider.sync(creds.accessToken, creds.refreshToken, SCHEMA_FOLLOWING) + // Close the database + await CommonUtils.closeDatastore(followingDatastore) + // Confirm we have the expected data assert.ok(syncData, 'Have data returned') - assert.ok(SCHEMA_POST in syncData, 'Have Post data in the response') - assert.equal(syncData[SCHEMA_POST].length, providerConfig.postLimit, `Correct number of posts received`)*/ + assert.equal(syncData.length, syncSchemas[SCHEMA_FOLLOWING].limit, 'Have correct number of items returned') + + // Cleanup by having the server delete it's database of data + await CommonUtils.syncDone(providerName, connection.did) }) + // confirm sync since last works for a given schema + + // confirm sync all works? + after(async () => { await connection.context.close({ clearLocal: true diff --git a/yarn.lock b/yarn.lock index 817be3d1..d04b8721 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,7 +12,66 @@ call-me-maybe "^1.0.1" js-yaml "^4.1.0" -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": +"@discordjs/builders@^1.6.0": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-1.6.1.tgz#5b1447cfa493bc1306671ef18ce3aae13c0af0ba" + integrity sha512-CCcLwn/8ANhlAbhlE18fcaN0hfXTen53/JiwZs1t9oE/Cqa9maA8ZRarkCIsXF4J7J/MYnd0J6IsxeKsq+f6mw== + dependencies: + "@discordjs/formatters" "^0.3.0" + "@discordjs/util" "^0.2.0" + "@sapphire/shapeshift" "^3.8.1" + discord-api-types "^0.37.37" + fast-deep-equal "^3.1.3" + ts-mixer "^6.0.3" + tslib "^2.5.0" + +"@discordjs/collection@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-1.5.0.tgz#478acd5d510cb5996c5101f47b24959ac7499cc2" + integrity sha512-suyVndkEAAWrGxyw/CPGdtXoRRU6AUNkibtnbJevQzpelkJh3Q1gQqWDpqf5i39CnAn5+LrN0YS+cULeEjq2Yw== + +"@discordjs/formatters@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@discordjs/formatters/-/formatters-0.3.0.tgz#8313d158c5e974597eec43b1f381d870a507d133" + integrity sha512-Fc4MomalbP8HMKEMor3qUiboAKDtR7PSBoPjwm7WYghVRwgJlj5WYvUsriLsxeKk8+Qq2oy+HJlGTUkGvX0YnA== + dependencies: + discord-api-types "^0.37.37" + +"@discordjs/rest@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@discordjs/rest/-/rest-1.7.0.tgz#c61fcd14e810b44e4821df5dfb5e74fa5fcb6e5d" + integrity sha512-r2HzmznRIo8IDGYBWqQfkEaGN1LrFfWQd3dSyC4tOpMU8nuVvFUEw6V/lwnG44jyOq+vgyDny2fxeUDMt9I4aQ== + dependencies: + "@discordjs/collection" "^1.5.0" + "@discordjs/util" "^0.2.0" + "@sapphire/async-queue" "^1.5.0" + "@sapphire/snowflake" "^3.4.0" + discord-api-types "^0.37.37" + file-type "^18.2.1" + tslib "^2.5.0" + undici "^5.21.0" + +"@discordjs/util@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@discordjs/util/-/util-0.2.0.tgz#91b590dae3934ffa5fe34530afc5212c569d6751" + integrity sha512-/8qNbebFzLWKOOg+UV+RB8itp4SmU5jw0tBUD3ifElW6rYNOj1Ku5JaSW7lLl/WgjjxF01l/1uQPCzkwr110vg== + +"@ethersproject/abi@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.5.0.tgz#fb52820e22e50b854ff15ce1647cc508d6660613" + integrity sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w== + dependencies: + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.5.0", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== @@ -27,7 +86,20 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": +"@ethersproject/abstract-provider@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz#2f1f6e8a3ab7d378d8ad0b5718460f85649710c5" + integrity sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/networks" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/web" "^5.5.0" + +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.5.0", "@ethersproject/abstract-provider@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== @@ -40,7 +112,18 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/web" "^5.7.0" -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": +"@ethersproject/abstract-signer@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz#590ff6693370c60ae376bf1c7ada59eb2a8dd08d" + integrity sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA== + dependencies: + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.5.0", "@ethersproject/abstract-signer@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== @@ -51,7 +134,18 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": +"@ethersproject/address@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.5.0.tgz#bcc6f576a553f21f3dd7ba17248f81b473c9c78f" + integrity sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" + +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.5.0", "@ethersproject/address@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== @@ -62,14 +156,29 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/rlp" "^5.7.0" -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": +"@ethersproject/base64@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.5.0.tgz#881e8544e47ed976930836986e5eb8fab259c090" + integrity sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA== + dependencies: + "@ethersproject/bytes" "^5.5.0" + +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.5.0", "@ethersproject/base64@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== dependencies: "@ethersproject/bytes" "^5.7.0" -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": +"@ethersproject/basex@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.5.0.tgz#e40a53ae6d6b09ab4d977bd037010d4bed21b4d3" + integrity sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.5.0", "@ethersproject/basex@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== @@ -77,7 +186,16 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": +"@ethersproject/bignumber@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.5.0.tgz#875b143f04a216f4f8b96245bde942d42d279527" + integrity sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + bn.js "^4.11.9" + +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.5.0", "@ethersproject/bignumber@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== @@ -86,20 +204,50 @@ "@ethersproject/logger" "^5.7.0" bn.js "^5.2.1" -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": +"@ethersproject/bytes@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c" + integrity sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog== + dependencies: + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.5.0", "@ethersproject/bytes@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": +"@ethersproject/constants@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.5.0.tgz#d2a2cd7d94bd1d58377d1d66c4f53c9be4d0a45e" + integrity sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.5.0", "@ethersproject/constants@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== dependencies: "@ethersproject/bignumber" "^5.7.0" +"@ethersproject/contracts@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.5.0.tgz#b735260d4bd61283a670a82d5275e2a38892c197" + integrity sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg== + dependencies: + "@ethersproject/abi" "^5.5.0" + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/contracts@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" @@ -116,7 +264,21 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/transactions" "^5.7.0" -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": +"@ethersproject/hash@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.5.0.tgz#7cee76d08f88d1873574c849e0207dcb32380cc9" + integrity sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.5.0", "@ethersproject/hash@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== @@ -131,7 +293,25 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": +"@ethersproject/hdnode@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.5.0.tgz#4a04e28f41c546f7c978528ea1575206a200ddf6" + integrity sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/basex" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/pbkdf2" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/wordlists" "^5.5.0" + +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.5.0", "@ethersproject/hdnode@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== @@ -149,7 +329,26 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": +"@ethersproject/json-wallets@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz#dd522d4297e15bccc8e1427d247ec8376b60e325" + integrity sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/hdnode" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/pbkdf2" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.5.0", "@ethersproject/json-wallets@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== @@ -168,7 +367,15 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": +"@ethersproject/keccak256@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.5.0.tgz#e4b1f9d7701da87c564ffe336f86dcee82983492" + integrity sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg== + dependencies: + "@ethersproject/bytes" "^5.5.0" + js-sha3 "0.8.0" + +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.5.0", "@ethersproject/keccak256@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== @@ -176,19 +383,39 @@ "@ethersproject/bytes" "^5.7.0" js-sha3 "0.8.0" -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": +"@ethersproject/logger@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d" + integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg== + +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.5.0", "@ethersproject/logger@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": +"@ethersproject/networks@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.5.0.tgz#babec47cab892c51f8dd652ce7f2e3e14283981a" + integrity sha512-KWfP3xOnJeF89Uf/FCJdV1a2aDJe5XTN2N52p4fcQ34QhDqQFkgQKZ39VGtiqUgHcLI8DfT0l9azC3KFTunqtA== + dependencies: + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.5.0", "@ethersproject/networks@^5.7.0": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": +"@ethersproject/pbkdf2@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz#e25032cdf02f31505d47afbf9c3e000d95c4a050" + integrity sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.5.0", "@ethersproject/pbkdf2@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== @@ -196,13 +423,45 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/sha2" "^5.7.0" -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": +"@ethersproject/properties@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.5.0.tgz#61f00f2bb83376d2071baab02245f92070c59995" + integrity sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA== + dependencies: + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.5.0", "@ethersproject/properties@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== dependencies: "@ethersproject/logger" "^5.7.0" +"@ethersproject/providers@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.5.0.tgz#bc2876a8fe5e0053ed9828b1f3767ae46e43758b" + integrity sha512-xqMbDnS/FPy+J/9mBLKddzyLLAQFjrVff5g00efqxPzcAwXiR+SiCGVy6eJ5iAIirBOATjx7QLhDNPGV+AEQsw== + dependencies: + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/basex" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/networks" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/web" "^5.5.0" + bech32 "1.1.4" + ws "7.4.6" + "@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.2": version "5.7.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" @@ -229,7 +488,15 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": +"@ethersproject/random@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.5.0.tgz#305ed9e033ca537735365ac12eed88580b0f81f9" + integrity sha512-egGYZwZ/YIFKMHcoBUo8t3a8Hb/TKYX8BCBoLjudVCZh892welR3jOxgOmb48xznc9bTcMm7Tpwc1gHC1PFNFQ== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.5.0", "@ethersproject/random@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== @@ -237,7 +504,15 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": +"@ethersproject/rlp@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.5.0.tgz#530f4f608f9ca9d4f89c24ab95db58ab56ab99a0" + integrity sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.5.0", "@ethersproject/rlp@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== @@ -245,7 +520,16 @@ "@ethersproject/bytes" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": +"@ethersproject/sha2@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.5.0.tgz#a40a054c61f98fd9eee99af2c3cc6ff57ec24db7" + integrity sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + hash.js "1.1.7" + +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.5.0", "@ethersproject/sha2@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== @@ -254,7 +538,19 @@ "@ethersproject/logger" "^5.7.0" hash.js "1.1.7" -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": +"@ethersproject/signing-key@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.5.0.tgz#2aa37169ce7e01e3e80f2c14325f624c29cedbe0" + integrity sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.5.0", "@ethersproject/signing-key@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== @@ -266,6 +562,18 @@ elliptic "6.5.4" hash.js "1.1.7" +"@ethersproject/solidity@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.5.0.tgz#2662eb3e5da471b85a20531e420054278362f93f" + integrity sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/solidity@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" @@ -278,7 +586,16 @@ "@ethersproject/sha2" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": +"@ethersproject/strings@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.5.0.tgz#e6784d00ec6c57710755699003bc747e98c5d549" + integrity sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.5.0", "@ethersproject/strings@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== @@ -287,7 +604,22 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": +"@ethersproject/transactions@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.5.0.tgz#7e9bf72e97bcdf69db34fe0d59e2f4203c7a2908" + integrity sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA== + dependencies: + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.5.0", "@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== @@ -302,6 +634,15 @@ "@ethersproject/rlp" "^5.7.0" "@ethersproject/signing-key" "^5.7.0" +"@ethersproject/units@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.5.0.tgz#104d02db5b5dc42cc672cc4587bafb87a95ee45e" + integrity sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/units@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" @@ -311,6 +652,27 @@ "@ethersproject/constants" "^5.7.0" "@ethersproject/logger" "^5.7.0" +"@ethersproject/wallet@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.5.0.tgz#322a10527a440ece593980dca6182f17d54eae75" + integrity sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q== + dependencies: + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/hdnode" "^5.5.0" + "@ethersproject/json-wallets" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/wordlists" "^5.5.0" + "@ethersproject/wallet@5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" @@ -332,7 +694,18 @@ "@ethersproject/transactions" "^5.7.0" "@ethersproject/wordlists" "^5.7.0" -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": +"@ethersproject/web@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.5.0.tgz#0e5bb21a2b58fb4960a705bfc6522a6acf461e28" + integrity sha512-BEgY0eL5oH4mAo37TNYVrFeHsIXLRxggCRG/ksRIxI2X5uj5IsjGmcNiRN/VirQOlBxcUhCgHhaDLG4m6XAVoA== + dependencies: + "@ethersproject/base64" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.5.0", "@ethersproject/web@^5.7.0": version "5.7.1" resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== @@ -343,7 +716,18 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": +"@ethersproject/wordlists@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.5.0.tgz#aac74963aa43e643638e5172353d931b347d584f" + integrity sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.5.0", "@ethersproject/wordlists@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== @@ -359,6 +743,47 @@ resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== +"@oauth-everything/oauth2-types@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@oauth-everything/oauth2-types/-/oauth2-types-1.0.2.tgz#1662a99d1b5f507efb9476e1e2cd7b50be91caea" + integrity sha512-fGddJhO8bnvljIhSTMuOSWFilkJ67TDqqgB1/qPVCu6s8swju7qWYZm2Qyit0miBebTtCf1jQ6hcz+GPA7glJw== + dependencies: + "@types/express" "^4.17.2" + "@types/passport-oauth2" "^1.4.8" + +"@oauth-everything/passport-discord@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@oauth-everything/passport-discord/-/passport-discord-1.0.2.tgz#c8c227b1e0f50e54281edce3ef8dfec8d4a01f1e" + integrity sha512-N+n8ICOADti8vJUBLb9FEHeroMb7Cdvu18moM0BgJIxXb1ZzxiYy02MyiMVyqFZGh/Tw7xJA2z9c7o0nQVQZ7g== + dependencies: + "@oauth-everything/oauth2-types" "^1.0.2" + "@oauth-everything/profile" "^1.0.0" + "@types/passport-oauth2" "^1.4.8" + passport-oauth2 "^1.5.0" + +"@oauth-everything/profile@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@oauth-everything/profile/-/profile-1.0.0.tgz#0b5e78749415519fa312dc83347a677903f456ba" + integrity sha512-OmCuBPhjaLHh9MST9P5jRuVBZaP0z7hBk8nH4Yt7Id5kNM1AXGd5uud6CP7W2zuhKl2nk0KsYmeMT7SkzN6VWg== + +"@sapphire/async-queue@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.5.0.tgz#2f255a3f186635c4fb5a2381e375d3dfbc5312d8" + integrity sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA== + +"@sapphire/shapeshift@^3.8.1": + version "3.8.2" + resolved "https://registry.yarnpkg.com/@sapphire/shapeshift/-/shapeshift-3.8.2.tgz#f9f25cba74c710b56f8790de76a9642a9635e7db" + integrity sha512-NXpnJAsxN3/h9TqQPntOeVWZrpIuucqXI3IWF6tj2fWCoRLCuVK5wx7Dtg7pRrtkYfsMUbDqgKoX26vrC5iYfA== + dependencies: + fast-deep-equal "^3.1.3" + lodash "^4.17.21" + +"@sapphire/snowflake@^3.4.0", "@sapphire/snowflake@^3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@sapphire/snowflake/-/snowflake-3.4.2.tgz#365af8e7b57ada924ec8e85383b921280f81d128" + integrity sha512-KJwlv5gkGjs1uFV7/xx81n3tqgBwBJvH94n1xDyH3q+JSmtsMeSleJffarEBfG2yAFeJiFA4BnGOK6FFPHc19g== + "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" @@ -471,7 +896,7 @@ resolved "https://registry.yarnpkg.com/@stablelib/wipe/-/wipe-1.0.1.tgz#d21401f1d59ade56a62e139462a97f104ed19a36" integrity sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg== -"@stablelib/x25519@^1.0.1": +"@stablelib/x25519@^1.0.1", "@stablelib/x25519@^1.0.2": version "1.0.3" resolved "https://registry.yarnpkg.com/@stablelib/x25519/-/x25519-1.0.3.tgz#13c8174f774ea9f3e5e42213cbf9fc68a3c7b7fd" integrity sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw== @@ -500,6 +925,16 @@ "@stablelib/wipe" "^1.0.1" "@stablelib/xchacha20" "^1.0.1" +"@superfaceai/passport-twitter-oauth2@^1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@superfaceai/passport-twitter-oauth2/-/passport-twitter-oauth2-1.2.3.tgz#ca870e7b03552c5893800626e3f60995e56c0c96" + integrity sha512-kbGptW8AM7l6jJKlgCaoWSHVVNgNgCZCTPO9IDo7Wg8vQqOu+tQhRmJERAdbqcB3B/doG7Nd90nvFuLDH1sFLA== + dependencies: + passport-oauth2 "^1.6.1" + optionalDependencies: + "@types/passport" "1.x" + "@types/passport-oauth2" ">=1.4" + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -507,6 +942,11 @@ dependencies: defer-to-connect "^1.0.1" +"@tokenizer/token@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" + integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== + "@types/body-parser@*": version "1.19.2" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" @@ -523,9 +963,9 @@ "@types/node" "*" "@types/debug@*": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" - integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== + version "4.1.12" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.12.tgz#a155f21690871953410df4b6b6f53187f0500917" + integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ== dependencies: "@types/ms" "*" @@ -538,6 +978,15 @@ "@types/qs" "*" "@types/range-parser" "*" +"@types/express-serve-static-core@^4.17.33": + version "4.17.33" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" + integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/express-session@1.17.0": version "1.17.0" resolved "https://registry.yarnpkg.com/@types/express-session/-/express-session-1.17.0.tgz#770daf81368f6278e3e40dd894e1e52abbdca0cd" @@ -556,10 +1005,20 @@ "@types/qs" "*" "@types/serve-static" "*" +"@types/express@^4.17.2": + 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.6": - 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== + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/json5@^0.0.29": version "0.0.29" @@ -577,27 +1036,57 @@ integrity sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw== "@types/ms@*": - version "0.7.31" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" - integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== + version "0.7.34" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node@*": version "17.0.35" resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.35.tgz#635b7586086d51fb40de0a2ec9d1014a5283ba4a" integrity sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg== -"@types/pouchdb-core@*", "@types/pouchdb-core@^7.0.10": - version "7.0.10" - resolved "https://registry.yarnpkg.com/@types/pouchdb-core/-/pouchdb-core-7.0.10.tgz#d1ea1549e7fad6cb579f71459b1bc27252e06a5a" - integrity sha512-mKhjLlWWXyV3PTTjDhzDV1kc2dolO7VYFa75IoKM/hr8Er9eo8RIbS7mJLfC8r/C3p6ihZu9yZs1PWC1LQ0SOA== +"@types/node@^18.15.11": + version "18.19.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.7.tgz#9a5f6ac7ec42a5dff68fe7faf2dd359710de4a12" + integrity sha512-IGRJfoNX10N/PfrReRZ1br/7SQ+2vF/tK3KXNwzXz82D32z5dMQEoOlFew18nLSN+vMNcLY4GrKfzwi/yWI8/w== + dependencies: + undici-types "~5.26.4" + +"@types/oauth@*": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@types/oauth/-/oauth-0.9.1.tgz#e17221e7f7936b0459ae7d006255dff61adca305" + integrity sha512-a1iY62/a3yhZ7qH7cNUsxoI3U/0Fe9+RnuFrpTKr+0WVOzbKlSLojShCKe20aOD1Sppv+i8Zlq0pLDuTJnwS4A== + dependencies: + "@types/node" "*" + +"@types/passport-oauth2@>=1.4", "@types/passport-oauth2@^1.4.8": + version "1.4.12" + resolved "https://registry.yarnpkg.com/@types/passport-oauth2/-/passport-oauth2-1.4.12.tgz#c2ae0ee3b16646188d8b0b6cdbc6880a0247dc5f" + integrity sha512-RZg6cYTyEGinrZn/7REYQds6zrTxoBorX1/fdaz5UHzkG8xdFE7QQxkJagCr2ETzGII58FAFDmnmbTUVMrltNA== + dependencies: + "@types/express" "*" + "@types/oauth" "*" + "@types/passport" "*" + +"@types/passport@*", "@types/passport@1.x": + version "1.0.12" + resolved "https://registry.yarnpkg.com/@types/passport/-/passport-1.0.12.tgz#7dc8ab96a5e895ec13688d9e3a96920a7f42e73e" + integrity sha512-QFdJ2TiAEoXfEQSNDISJR1Tm51I78CymqcBa8imbjo6dNNu+l2huDxxbDEIoFIwOSKMkOfHEikyDuZ38WwWsmw== + dependencies: + "@types/express" "*" + +"@types/pouchdb-core@*", "@types/pouchdb-core@^7.0.11": + version "7.0.14" + resolved "https://registry.yarnpkg.com/@types/pouchdb-core/-/pouchdb-core-7.0.14.tgz#4d3012345af53e416ddaed4d7f2c3d73dc1363e5" + integrity sha512-ec63FAtmc1ForP4oNgLZoPYqjaBrkGTWA7jm+rQ7SEtIpOPpN4NCWF2/JyrhO64jjIzO5qkV/YNEpZlEZFxCcw== dependencies: "@types/debug" "*" "@types/pouchdb-find" "*" "@types/pouchdb-find@*": - version "6.3.7" - resolved "https://registry.yarnpkg.com/@types/pouchdb-find/-/pouchdb-find-6.3.7.tgz#f713534a53c1a7f3fd8fbbfb74131a1b04711ddc" - integrity sha512-b2dr9xoZRK5Mwl8UiRA9l5j9mmCxNfqXuu63H1KZHwJLILjoIIz7BntCvM0hnlnl7Q8P8wORq0IskuaMq5Nnnw== + version "7.3.3" + resolved "https://registry.yarnpkg.com/@types/pouchdb-find/-/pouchdb-find-7.3.3.tgz#599e388e2a1c4e57ee8aba0d5deca24d37b6978e" + integrity sha512-U7zXk67s9Ar+9Pwj5kSbuMnn8zif0AOOIPy4KRFeJ/S/Tk+mNS90soj+3OV21H8xyB7WTxjvS1JLablZC6C6ow== dependencies: "@types/pouchdb-core" "*" @@ -624,6 +1113,13 @@ resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397" integrity sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw== +"@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" "*" + "@ungap/promise-all-settled@1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" @@ -637,43 +1133,46 @@ binary-case "^1.0.0" type-is "^1.6.16" -"@verida/account-node@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@verida/account-node/-/account-node-2.0.0.tgz#12ed285280cac73aa1ceb41bf651495628b337ae" - integrity sha512-6CDDvF4tje1Bh9p6KSKG6QwlL+rNSSQxEKMnzNHgrtVkUeJIAXW5tQuhk9gI1TVgekMynprjNpEwgdTFWPHcJw== - dependencies: - "@verida/account" "^2.0.0" - "@verida/did-client" "^2.0.0" - "@verida/did-document" "^2.0.0" - "@verida/encryption-utils" "^2.0.0" - "@verida/keyring" "^2.0.0" +"@verida/account-node@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@verida/account-node/-/account-node-3.0.1.tgz#c2b45ff14137cd270186d32d9dadd88c2b28f7f9" + integrity sha512-S6zqCathYR/iRDYZBAa3B3Ze6LkQBdmBuNhWZvcW5KIlGMDwdUpg5N6VXZmhbrBSHUeYJVPdN8eJZWjss+8vLg== + dependencies: + "@verida/account" "^3.0.1" + "@verida/did-client" "^3.0.1" + "@verida/did-document" "^3.0.1" + "@verida/encryption-utils" "^3.0.0" + "@verida/keyring" "^3.0.1" + "@verida/types" "^3.0.0" axios "^0.27.2" did-resolver "^4.0.1" -"@verida/account@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@verida/account/-/account-2.0.0.tgz#fc7e853dbfc20e18744f9bb10dad75cc05fbed0a" - integrity sha512-N5WRTUyEYQ113TLMDNMwZNPJcvqeqWCXI1G2tQZz4fR5rg3haLhfnIgqe2bSAsiIT6yTRizWjqwekPi7TCSAkQ== +"@verida/account@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@verida/account/-/account-3.0.1.tgz#f6441b744956a77dccd376a441d88544919b0751" + integrity sha512-5i77Hwk4mCSyUZuJQ8iMTsGYeq1rj6wM7mlpiuJLAK8Zj0JJwMP5x8oE5xsd9IWpNQ9xjFv8C6l/lYpe3425uA== dependencies: - "@verida/keyring" "^2.0.0" - "@verida/storage-link" "^2.0.0" - did-jwt "5.7.0" + "@verida/keyring" "^3.0.1" + "@verida/storage-link" "^3.0.1" + "@verida/types" "^3.0.0" + did-jwt "^6.11.0" did-resolver "^4.0.1" lodash "^4.17.21" tweetnacl-util "^0.15.1" -"@verida/client-ts@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@verida/client-ts/-/client-ts-2.0.1.tgz#a64cc733578da849b319c72e726e0710afb44c32" - integrity sha512-ZqFDouGUYszKn4a56pCmnMZehwbH1TPPV5yXbtlAVXjnSqbw06RDlue8HlfbYNiECPAGgQ5KQO+ZFTVwz/UtRA== - dependencies: - "@verida/account" "^2.0.0" - "@verida/account-node" "^2.0.0" - "@verida/did-client" "^2.0.0" - "@verida/did-document" "^2.0.0" - "@verida/encryption-utils" "^2.0.0" - "@verida/keyring" "^2.0.0" - "@verida/storage-link" "^2.0.0" +"@verida/client-ts@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@verida/client-ts/-/client-ts-3.0.2.tgz#e626728ca8ab3f21f94483670b0e822b5bc8e250" + integrity sha512-nk+hzmis1kMmAUfr8ZwNA4raxOMPrrLxhWqHrwHBvpjtgA8luVV67x2rU6USzNCcJCLEFdjUlFEVJjms5Mahow== + dependencies: + "@verida/account" "^3.0.1" + "@verida/did-client" "^3.0.1" + "@verida/did-document" "^3.0.1" + "@verida/encryption-utils" "^3.0.0" + "@verida/keyring" "^3.0.1" + "@verida/storage-link" "^3.0.1" + "@verida/types" "^3.0.0" + "@verida/vda-name-client" "^3.0.1" ajv "^8.6.3" ajv-formats "^2.1.1" axios "^0.21.2" @@ -688,93 +1187,176 @@ pouchdb-find "^7.2.2" uuid "^8.3.2" -"@verida/did-client@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@verida/did-client/-/did-client-2.0.0.tgz#1da23e09ecfb1bd3306e96d34f9afcd65c7b8b9d" - integrity sha512-AAPej1qiloOb0mdm7S6SjVNzh19/2k2WIyumMu/LycuZr8nS6POl1VU40bCwovC5sGvW1Y5IE3b9k311JQ0n+A== - dependencies: - "@verida/did-document" "^2.0.0" - "@verida/vda-did-resolver" "^2.0.0" - "@verida/web3" "^2.0.0" +"@verida/did-client@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@verida/did-client/-/did-client-3.0.1.tgz#448a2c1a2a9fdbb631f3176daf5b182c5f2fee4c" + integrity sha512-eySImxml+HHkWpqSH4fScK/0aHBe9T+SE4SEKSPBLYFoJ8BHtbhw9ZF4dE22IdIciVj08z3PRZfKA5/rCr73PQ== + dependencies: + "@verida/did-document" "^3.0.1" + "@verida/types" "^3.0.0" + "@verida/vda-common" "^3.0.0" + "@verida/vda-did-resolver" "^3.0.1" + "@verida/web3" "^3.0.1" axios "^0.23.0" deepcopy "^2.1.0" + did-resolver "^4.0.1" ethers "^5.5.1" -"@verida/did-document@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@verida/did-document/-/did-document-2.0.0.tgz#b921011579f906e743d953f6ffd96a1f55f3c505" - integrity sha512-9mzbA7PtylehPfAAPor0Gwtkf2+Li0Pv9NbGoT8vqdhNrvOiYTqaz8yhUa/JpqiygolIpo6XC0gUuSqglSpYaw== +"@verida/did-document@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@verida/did-document/-/did-document-3.0.1.tgz#6f2c0c596d8eb026bbb8f61fc6045a5de034876a" + integrity sha512-bqLpGEsmoACrGdnFiulxeoHzOwYyMRKET1L+QXHfAncVUe8UhDeyEmikLD2K2RqpxJN2i5AonKhfhKxdXy+FhA== dependencies: "@ethersproject/address" "^5.7.0" "@ethersproject/bignumber" "^5.7.0" "@ethersproject/transactions" "^5.7.0" - "@verida/encryption-utils" "^2.0.0" - "@verida/keyring" "^2.0.0" + "@verida/encryption-utils" "^3.0.0" + "@verida/keyring" "^3.0.1" + "@verida/types" "^3.0.0" did-resolver "^4.0.1" - ethers "^5.7.2" lodash "^4.17.21" -"@verida/encryption-utils@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@verida/encryption-utils/-/encryption-utils-2.0.0.tgz#996740206f776d65314dd1351d318b971872bf77" - integrity sha512-w1LY3KJWqmeTWHjKlXGjAnF4ghpeMfXvRe7d1QUoqOLk9p0vgRMGkWwYgqYfhtvkGhu9e5+Nrit9XTGewjbNXg== +"@verida/encryption-utils@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@verida/encryption-utils/-/encryption-utils-3.0.0.tgz#21434720e3c9d28a9df074e353d255959877a82d" + integrity sha512-qaCvVFeEV4QKJl5quN/XMFCKwsCHE5hzjUdQAutlp74ItnXe0YGwZzjqXUYynBKkldCyZQpRoeH16e4GFFSBSQ== dependencies: ethers "^5.5.1" json.sortify "^2.2.2" tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" -"@verida/keyring@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@verida/keyring/-/keyring-2.0.0.tgz#31936030d8cdb78af2affdfe0d1b308af5de69dd" - integrity sha512-CiRDJKVQB4OIeEcc16Kkpx2gnWdWUT+BTnJUHuXB8qUmko/OaDFnV40qogl67sFGyslGptFgmIBkXITHa1MlhA== +"@verida/helpers@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@verida/helpers/-/helpers-3.0.1.tgz#f4a57f91a33dded0237e728da963c52435e52dfe" + integrity sha512-KJjvyW1AMsaDGxVru1DR2u/QeOmEMk7m2ieoQnrl917ENYIyCzT0qFuqab91a6i8Q99IWKZC5an+tXYCOpQ9RA== + dependencies: + "@verida/encryption-utils" "^3.0.0" + "@verida/types" "^3.0.0" + axios "^1.6.2" + bs58 "^5.0.0" + url "^0.11.0" + +"@verida/keyring@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@verida/keyring/-/keyring-3.0.1.tgz#8552ca13a0541c55352f59cc00c0127ffbcaf77a" + integrity sha512-dmWhAlkT2hz7FIHnMUuYlvvaQL57Ps/JicXdqzhmslNqt7Lez0/o1vqpyJ58ZPnhI/Lv7e0MOEqNnWDb1p3aGw== dependencies: - "@verida/encryption-utils" "^2.0.0" + "@verida/encryption-utils" "^3.0.0" + "@verida/types" "^3.0.0" ethers "^5.5.1" tweetnacl "^1.0.3" uuid "^8.3.2" -"@verida/storage-link@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@verida/storage-link/-/storage-link-2.0.0.tgz#942838a1d8a3a242401548f23f82af90c510135b" - integrity sha512-wqlLhV19+aJacNNunaTSJmN2JGmhzpIzhOY2dTJEWct7VDxXj6xObeCKTYOECGGpPOR6r3TSGAblCQahGrCc+g== +"@verida/storage-link@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@verida/storage-link/-/storage-link-3.0.1.tgz#e2e02e8a058016429ac6dc4de1367df8298c2e68" + integrity sha512-fkerqqb98XvjsilqrE531pLNptGntx9MEOFi28jfu3HWTMWutIZNcT4vLIo2QxxObD/7EG0sZzJGTHmRdHPx5w== dependencies: - "@verida/did-client" "^2.0.0" - "@verida/did-document" "^2.0.0" - "@verida/encryption-utils" "^2.0.0" - "@verida/keyring" "^2.0.0" + "@verida/did-client" "^3.0.1" + "@verida/did-document" "^3.0.1" + "@verida/encryption-utils" "^3.0.0" + "@verida/keyring" "^3.0.1" did-resolver "^4.0.0" url-parse "^1.5.3" -"@verida/vda-did-resolver@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@verida/vda-did-resolver/-/vda-did-resolver-2.0.0.tgz#2c87755d7548f80852eccf97f166ba852517e204" - integrity sha512-8ZBF1JuxNHJCGpYMWKK844b/eYw5ncRZOb0Sj8rW/0wCNjVRFl8cucNhsy9Hp3g1jXDd9mwJBY/jdWzY1Vb0Rg== +"@verida/types@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@verida/types/-/types-3.0.0.tgz#1ffb64eea5d2c1fcb66c386f979d88918c943dcf" + integrity sha512-J5psSf9ayqvUVyRBwYWjZ3Zeiomnl/GsHpvn2GA6zwH39QS8bPAvVGHaaq7na+0M1VUysrDEvHFrQ9fSmGAbHw== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/providers" "^5.7.2" + "@types/node" "^18.15.11" + "@types/pouchdb-core" "^7.0.11" + did-resolver "^4.0.1" + tweetnacl "^1.0.3" + +"@verida/vda-common@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@verida/vda-common/-/vda-common-3.0.0.tgz#951c1b0fe1ba700c18a2f9848e22d8b8a0d26d97" + integrity sha512-T24EPcExnbCY1GyQcSThydExaRm2I4Mx38yUE+MkJwnvI7Q1lHNZEacEcDr+jnURAuBsLvp6jIiZAutZdEVdfA== + dependencies: + "@verida/encryption-utils" "^3.0.0" + copyfiles "^2.4.1" + ethers "5.5.1" + +"@verida/vda-did-resolver@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@verida/vda-did-resolver/-/vda-did-resolver-3.0.1.tgz#9244dd9b0fd8b5b6f9c070501b49d055c50c2cd6" + integrity sha512-dFUPUsb8detiSReN9/ocKm4+pRdOSKPT1ar7owHo0OdELZ8hLX80Y3Nd+1sU9nUn7dYxqmCnPwOZGM42MP3tSQ== dependencies: "@ethersproject/providers" "^5.7.2" - "@verida/did-document" "^2.0.0" - "@verida/encryption-utils" "^2.0.0" - "@verida/vda-did" "^2.0.0" + "@verida/did-document" "^3.0.1" + "@verida/encryption-utils" "^3.0.0" + "@verida/types" "^3.0.0" + "@verida/vda-common" "^3.0.0" + "@verida/vda-did" "^3.0.1" axios "1.2.0-alpha.1" lodash "^4.17.21" -"@verida/vda-did@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@verida/vda-did/-/vda-did-2.0.0.tgz#d650ead5faddd2d5b5eaa537863629ad17bf090e" - integrity sha512-ZYB4t0SdXu0SFUj1hucDd51ktrsI82aRWGyc013KrKIxfM18WjFeCWm7fln5pQt1GYnsXTq03nCtzACMBPCf4w== +"@verida/vda-did@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@verida/vda-did/-/vda-did-3.0.1.tgz#0b72caf0a8a93e72b182ec9ca7f3690ab2a3f4f8" + integrity sha512-wgePZNnsVAIfOwk7cDAGCrGyRCgGLyu7PKasonpVs45vTyEVJt74WpAr0m/kLsqUEVPiTSY1jwvuI1A2wE4TqA== dependencies: - "@verida/did-document" "^2.0.0" - "@verida/encryption-utils" "^2.0.0" - "@verida/vda-did-resolver" "^2.0.0" - "@verida/web3" "^2.0.0" + "@verida/did-document" "^3.0.1" + "@verida/encryption-utils" "^3.0.0" + "@verida/types" "^3.0.0" + "@verida/web3" "^3.0.1" axios "1.2.0-alpha.1" + ethers "^5.7.2" lodash "^4.17.21" -"@verida/web3@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@verida/web3/-/web3-2.0.0.tgz#4023ddda769bb13e36d8f48ea3480f25abe84a87" - integrity sha512-+AqqaSgpeFrr12iPCdUiqEqvWa0dlHkN5AmJzrXHGktiBb7vPQxPRKu1dV2mOOhcsTV/grdVKwuB2ZV5/X4lAg== +"@verida/vda-name-client@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@verida/vda-name-client/-/vda-name-client-3.0.1.tgz#2ad8a4556c810d6280a5abc45f9fa3c3da088a64" + integrity sha512-HAGro7kQ1hf6oz9gpGJEbHfjQGbUUYZBmjJKSg+wzRM8pKfXnMuN5R4iRVoR6TPpcwoNhbrce4toO4NQybyYAw== dependencies: + "@ethersproject/providers" "^5.7.2" + "@verida/helpers" "^3.0.1" + "@verida/types" "^3.0.0" + "@verida/web3" "^3.0.1" + axios "^0.27.2" + ethers "^5.7.0" + +"@verida/vda-sbt-client@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@verida/vda-sbt-client/-/vda-sbt-client-3.0.2.tgz#e0fe03a10b38105c80d4a1315faae4f4c46c3f83" + integrity sha512-WqkSUBlKL+zHISn/VYTVBfMJHRxJpRG7V+aGFt4efrkhC7ZaOz43EPoTGHjOFAI8CUOwozGHMpVbzu1lze2W5Q== + dependencies: + "@ethersproject/providers" "^5.7.2" + "@verida/helpers" "^3.0.1" + "@verida/web3" "^3.0.1" + axios "^0.27.2" + ethers "^5.7.0" + +"@verida/verifiable-credentials@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@verida/verifiable-credentials/-/verifiable-credentials-3.0.2.tgz#1b84d334b23a2b6a6e658a2a077d2718dde0b373" + integrity sha512-M68/JDtsw6Se4fvL5NIFUYZDoEC4t2D2AC7SUnh4ENRPMnVaKNFlthfZ8hBcUOg5H8RzYaeeGY8Fc0IBPeBuwQ== + dependencies: + "@verida/encryption-utils" "^3.0.0" + "@verida/helpers" "^3.0.1" + "@verida/types" "^3.0.0" + "@verida/vda-did-resolver" "^3.0.1" + axios "^1.3.3" + dayjs "^1.10.7" + did-jwt "^6.11.0" + did-jwt-vc "3.1.0" + lodash "^4.17.21" + tweetnacl-util "^0.15.1" + url "^0.11.0" + +"@verida/web3@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@verida/web3/-/web3-3.0.1.tgz#92a776f3b1872099039fe79e0017caa334acbfe6" + integrity sha512-XLfwUkG93vh7/4t/cJmtROcu31Gz+7Wj0aCmGE2p3go3iMZzFH03+EmK90xvtQrISbzrmBkxhsThJ1BTbZRiSg== + dependencies: + "@verida/types" "^3.0.0" + "@verida/vda-common" "^3.0.0" + axios "^1.2.3" ethers "^5.7.0" abbrev@1: @@ -1050,6 +1632,15 @@ axios@^1.2.3: form-data "^4.0.0" proxy-from-env "^1.1.0" +axios@^1.3.3, axios@^1.6.2: + version "1.6.5" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.5.tgz#2c090da14aeeab3770ad30c3a1461bc970fb0cd8" + integrity sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg== + dependencies: + follow-redirects "^1.15.4" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + babel-runtime@^6.23.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" @@ -1070,12 +1661,17 @@ base-x@^3.0.2: dependencies: safe-buffer "^5.0.1" +base-x@^4.0.0: + version "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: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base64url@3.x.x, base64url@^3.0.1: +base64url@3.x.x: version "3.0.1" resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== @@ -1099,6 +1695,11 @@ bech32@1.1.4: resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== +bech32@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-2.0.0.tgz#078d3686535075c8c79709f054b1b226a133b355" + integrity sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg== + binary-case@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/binary-case/-/binary-case-1.1.4.tgz#d687104d59e38f2b9e658d3a58936963c59ab931" @@ -1199,6 +1800,13 @@ bs58@^4.0.1: dependencies: base-x "^3.0.2" +bs58@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" + integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== + dependencies: + base-x "^4.0.0" + buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" @@ -1226,6 +1834,13 @@ buffer@^5.1.0, buffer@^5.5.0, buffer@^5.6.0: base64-js "^1.3.1" ieee754 "^1.1.13" +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" @@ -1267,6 +1882,11 @@ canonicalize@^1.0.5: resolved "https://registry.yarnpkg.com/canonicalize/-/canonicalize-1.0.8.tgz#24d1f1a00ed202faafd9bf8e63352cd4450c6df1" integrity sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A== +canonicalize@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/canonicalize/-/canonicalize-2.0.0.tgz#32be2cef4446d67fd5348027a384cae28f17226a" + integrity sha512-ulDEYPv7asdKvqahuAY35c1selLdzDwHqugK92hfkzvlDCwXRRelDkR+Er33md/PtnpqHemgkuDPanZ4fiYZ8w== + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -1431,6 +2051,19 @@ cookie@0.5.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +copyfiles@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.4.1.tgz#d2dcff60aaad1015f09d0b66e7f0f1c5cd3c5da5" + integrity sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg== + dependencies: + glob "^7.0.5" + minimatch "^3.0.3" + mkdirp "^1.0.4" + noms "0.0.0" + through2 "^2.0.1" + untildify "^4.0.0" + yargs "^16.1.0" + core-decorators@^0.17.0: version "0.17.0" resolved "https://registry.yarnpkg.com/core-decorators/-/core-decorators-0.17.0.tgz#3f43180a86d2ab0cc51069f46a1ec3e49e7cebd6" @@ -1521,6 +2154,11 @@ date-format@^4.0.10: resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.10.tgz#7aa4bc0ad0c79f4ba858290e5dbb47f27d602e79" integrity sha512-RuMIHocrVjF84bUSTcd1uokIsLsOsk1Awb7TexNOI3f48ukCu39mjslWquDTA08VaDMF2umr3MB9ow5EyJTWyA== +dayjs@^1.10.7: + version "1.11.10" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" + integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== + dayjs@^1.11.1: version "1.11.2" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.2.tgz#fa0f5223ef0d6724b3d8327134890cfe3d72fbe5" @@ -1606,6 +2244,14 @@ destroy@1.2.0: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== +did-jwt-vc@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/did-jwt-vc/-/did-jwt-vc-3.1.0.tgz#aa7877c4c1f26ba11883604ac0ece30ca4fe78a4" + integrity sha512-8N54No9RQpbDM4a/aMiGc/tZWubtH8bqi7DLnO6B62AdWaNVKeS9ddcuANztSS1yTuypyzlyeeEtCTqEzpYgjA== + dependencies: + did-jwt "^6.6.0" + did-resolver "^4.0.0" + did-jwt@5.7.0: version "5.7.0" resolved "https://registry.yarnpkg.com/did-jwt/-/did-jwt-5.7.0.tgz#7c5284daece5c86388db90e1274d0df63bb20f52" @@ -1622,15 +2268,33 @@ did-jwt@5.7.0: js-sha3 "^0.8.0" uint8arrays "^3.0.0" +did-jwt@^6.11.0, did-jwt@^6.6.0: + version "6.11.6" + resolved "https://registry.yarnpkg.com/did-jwt/-/did-jwt-6.11.6.tgz#3eeb30d6bd01f33bfa17089574915845802a7d44" + integrity sha512-OfbWknRxJuUqH6Lk0x+H1FsuelGugLbBDEwsoJnicFOntIG/A4y19fn0a8RLxaQbWQ5gXg0yDq5E2huSBiiXzw== + dependencies: + "@stablelib/ed25519" "^1.0.2" + "@stablelib/random" "^1.0.1" + "@stablelib/sha256" "^1.0.1" + "@stablelib/x25519" "^1.0.2" + "@stablelib/xchacha20poly1305" "^1.0.1" + bech32 "^2.0.0" + canonicalize "^2.0.0" + did-resolver "^4.0.0" + elliptic "^6.5.4" + js-sha3 "^0.8.0" + multiformats "^9.6.5" + uint8arrays "^3.0.0" + did-resolver@^3.1.0: version "3.2.2" resolved "https://registry.yarnpkg.com/did-resolver/-/did-resolver-3.2.2.tgz#6f4e252a810f785d1b28a10265fad6dffee25158" integrity sha512-Eeo2F524VM5N3W4GwglZrnul2y6TLTwMQP3In62JdG34NZoqihYyOZLk+5wUW8sSgvIYIcJM8Dlt3xsdKZZ3tg== did-resolver@^4.0.0, did-resolver@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/did-resolver/-/did-resolver-4.0.1.tgz#11bb3f19ed1c8f53f4af4702912fa9f7852fc305" - integrity sha512-eHs2VLKhcANmh08S87PKvOauIAmSOd7nb7AlhNxcvOyDAIGQY1UfbiqI1VOW5IDKvOO6aEWY+5edOt1qrCp1Eg== + version "4.1.0" + resolved "https://registry.yarnpkg.com/did-resolver/-/did-resolver-4.1.0.tgz#740852083c4fd5bf9729d528eca5d105aff45eb6" + integrity sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA== diff@5.0.0: version "5.0.0" @@ -1642,6 +2306,30 @@ diff@^3.1.0: resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +discord-api-types@^0.37.37: + version "0.37.38" + resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.38.tgz#0599937f64aff63a2b534376563021f17537d166" + integrity sha512-p9dibYycLXY1FUM9bIuohYeHHwa/634394QE90n6Tlb6ID5HtCtXBPYY68oaOlFnlFLBJAOYATMwX5oiV+VqiA== + +discord.js@^14.9.0: + version "14.9.0" + resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-14.9.0.tgz#61e26c4a7a27f91fd669b4c46892868420a5be43" + integrity sha512-ygGms5xP4hG+QrrY9k7d/OYCzMltSMtdl/2Snzq/nLCiZo+Sna91Ulv9l0+B5Jd/Czcq37B7wJAnmja7GOa+bg== + dependencies: + "@discordjs/builders" "^1.6.0" + "@discordjs/collection" "^1.5.0" + "@discordjs/formatters" "^0.3.0" + "@discordjs/rest" "^1.7.0" + "@discordjs/util" "^0.2.0" + "@sapphire/snowflake" "^3.4.0" + "@types/ws" "^8.5.4" + discord-api-types "^0.37.37" + fast-deep-equal "^3.1.3" + lodash.snakecase "^4.1.1" + tslib "^2.5.0" + undici "^5.21.0" + ws "^8.13.0" + dot-prop@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" @@ -1766,6 +2454,42 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +ethers@5.5.1: + version "5.5.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.5.1.tgz#d3259a95a42557844aa543906c537106c0406fbf" + integrity sha512-RodEvUFZI+EmFcE6bwkuJqpCYHazdzeR1nMzg+YWQSmQEsNtfl1KHGfp/FWZYl48bI/g7cgBeP2IlPthjiVngw== + dependencies: + "@ethersproject/abi" "5.5.0" + "@ethersproject/abstract-provider" "5.5.1" + "@ethersproject/abstract-signer" "5.5.0" + "@ethersproject/address" "5.5.0" + "@ethersproject/base64" "5.5.0" + "@ethersproject/basex" "5.5.0" + "@ethersproject/bignumber" "5.5.0" + "@ethersproject/bytes" "5.5.0" + "@ethersproject/constants" "5.5.0" + "@ethersproject/contracts" "5.5.0" + "@ethersproject/hash" "5.5.0" + "@ethersproject/hdnode" "5.5.0" + "@ethersproject/json-wallets" "5.5.0" + "@ethersproject/keccak256" "5.5.0" + "@ethersproject/logger" "5.5.0" + "@ethersproject/networks" "5.5.0" + "@ethersproject/pbkdf2" "5.5.0" + "@ethersproject/properties" "5.5.0" + "@ethersproject/providers" "5.5.0" + "@ethersproject/random" "5.5.0" + "@ethersproject/rlp" "5.5.0" + "@ethersproject/sha2" "5.5.0" + "@ethersproject/signing-key" "5.5.0" + "@ethersproject/solidity" "5.5.0" + "@ethersproject/strings" "5.5.0" + "@ethersproject/transactions" "5.5.0" + "@ethersproject/units" "5.5.0" + "@ethersproject/wallet" "5.5.0" + "@ethersproject/web" "5.5.0" + "@ethersproject/wordlists" "5.5.0" + ethers@^5.5.1, ethers@^5.7.0, ethers@^5.7.2: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" @@ -1884,7 +2608,7 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== @@ -1912,6 +2636,15 @@ fetch-cookie@0.11.0: dependencies: tough-cookie "^2.3.3 || ^3.0.1 || ^4.0.0" +file-type@^18.2.1: + version "18.2.1" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-18.2.1.tgz#6d8f1fa3b079606f6ecf89483346f55fcd2c671b" + integrity sha512-Yw5MtnMv7vgD2/6Bjmmuegc8bQEVA9GmAyaR18bMYWKqsWDG9wgYZ1j4I6gNMF5Y5JBDcUcjRQqNQx7Y8uotcg== + dependencies: + readable-web-to-node-stream "^3.0.2" + strtok3 "^7.0.0" + token-types "^5.0.1" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -1955,7 +2688,12 @@ follow-redirects@^1.14.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.0.tgz#06441868281c86d0dda4ad8bdaead2d02dca89d4" integrity sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ== -follow-redirects@^1.14.4, follow-redirects@^1.14.9, follow-redirects@^1.15.0: +follow-redirects@^1.14.4, follow-redirects@^1.14.9, follow-redirects@^1.15.4: + version "1.15.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" + integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== + +follow-redirects@^1.15.0: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== @@ -2098,7 +2836,7 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.2, glob@^7.1.4: +glob@^7.0.5, glob@^7.1.2, glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -2272,7 +3010,7 @@ ieee754@1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== -ieee754@^1.1.13, ieee754@^1.1.4: +ieee754@^1.1.13, ieee754@^1.1.4, 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== @@ -2676,6 +3414,11 @@ lodash.isplainobject@^4.0.6: resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= +lodash.snakecase@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" + integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== + lodash.union@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" @@ -2812,7 +3555,7 @@ minimatch@4.2.1: dependencies: brace-expansion "^1.1.7" -minimatch@^3.0.4, minimatch@^3.1.1: +minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -2836,6 +3579,11 @@ mkdirp@^0.5.1: dependencies: minimist "^1.2.6" +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + mocha@^9.2.1: version "9.2.2" resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.2.2.tgz#d70db46bdb93ca57402c809333e5a84977a88fb9" @@ -2881,7 +3629,7 @@ ms@2.1.3, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -multiformats@^9.4.2: +multiformats@^9.4.2, multiformats@^9.6.5: version "9.9.0" resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" integrity sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg== @@ -2940,6 +3688,14 @@ nodemon@^2.0.14: undefsafe "^2.0.5" update-notifier "^5.1.0" +noms@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859" + integrity sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow== + dependencies: + inherits "^2.0.1" + readable-stream "~1.0.31" + nopt@~1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" @@ -3047,7 +3803,7 @@ passport-facebook@^3.0.0: dependencies: passport-oauth2 "1.x.x" -passport-oauth2@1.x.x, passport-oauth2@^1.x.x: +passport-oauth2@1.x.x: version "1.6.1" resolved "https://registry.yarnpkg.com/passport-oauth2/-/passport-oauth2-1.6.1.tgz#c5aee8f849ce8bd436c7f81d904a3cd1666f181b" integrity sha512-ZbV43Hq9d/SBSYQ22GOiglFsjsD1YY/qdiptA+8ej+9C1dL1TVB+mBE5kDH/D4AJo50+2i8f4bx0vg4/yDDZCQ== @@ -3058,19 +3814,22 @@ passport-oauth2@1.x.x, passport-oauth2@^1.x.x: uid2 "0.0.x" utils-merge "1.x.x" +passport-oauth2@^1.5.0, passport-oauth2@^1.6.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/passport-oauth2/-/passport-oauth2-1.7.0.tgz#5c4766c8531ac45ffe9ec2c09de9809e2c841fc4" + integrity sha512-j2gf34szdTF2Onw3+76alNnaAExlUmHvkc7cL+cmaS5NzHzDP/BvFHJruueQ9XAeNOdpI+CH+PWid8RA7KCwAQ== + dependencies: + base64url "3.x.x" + oauth "0.9.x" + passport-strategy "1.x.x" + uid2 "0.0.x" + utils-merge "1.x.x" + passport-strategy@1.x.x: version "1.0.0" resolved "https://registry.yarnpkg.com/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4" integrity sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ= -passport-twitter-oauth2.0@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/passport-twitter-oauth2.0/-/passport-twitter-oauth2.0-1.1.0.tgz#22fcdbc98808ab15afef7be0061ac1be5ae9a9a4" - integrity sha512-woH8mM6l/62zSumuSYQ6Tr3lu4R2PPauIibVeLtxBzlRxI6djlCEYd5tY/FXJDAxcFe7RcTmrEFjC4iFTa8f7w== - dependencies: - base64url "^3.0.1" - passport-oauth2 "^1.x.x" - passport@^0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/passport/-/passport-0.5.3.tgz#e69b46c9bb3290660bc2b3299330d78710b198cc" @@ -3110,6 +3869,11 @@ pbkdf2@^3.1.2: safe-buffer "^5.0.1" sha.js "^2.4.8" +peek-readable@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-5.0.0.tgz#7ead2aff25dc40458c60347ea76cfdfd63efdfec" + integrity sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A== + peek-stream@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/peek-stream/-/peek-stream-1.1.3.tgz#3b35d84b7ccbbd262fff31dc10da56856ead6d67" @@ -3333,6 +4097,11 @@ punycode@1.3.2: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== + punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -3352,6 +4121,13 @@ qs@6.10.3, qs@^6.9.4: dependencies: side-channel "^1.0.4" +qs@^6.11.2: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + dependencies: + side-channel "^1.0.4" + qs@~6.5.2: version "6.5.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" @@ -3414,10 +4190,10 @@ readable-stream@1.1.14: isarray "0.0.1" string_decoder "~0.10.x" -"readable-stream@2 || 3", readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== +"readable-stream@2 || 3", 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" @@ -3436,11 +4212,37 @@ readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.3.6, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" +readable-stream@^3.1.1, readable-stream@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readable-stream@~0.0.2: version "0.0.4" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-0.0.4.tgz#f32d76e3fb863344a548d79923007173665b3b8d" integrity sha512-azrivNydKRYt7zwLV5wWUK7YzKTWs3q87xSmY6DlHapPrCvaT6ZrukvM5erV+yCSSPmZT8zkSdttOHQpWWm9zw== +readable-stream@~1.0.31: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-web-to-node-stream@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb" + integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== + dependencies: + readable-stream "^3.6.0" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -3702,6 +4504,11 @@ streamroller@^3.1.1: debug "^4.3.4" fs-extra "^10.1.0" +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== + string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -3752,6 +4559,14 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +strtok3@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-7.0.0.tgz#868c428b4ade64a8fd8fee7364256001c1a4cbe5" + integrity sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ== + dependencies: + "@tokenizer/token" "^0.3.0" + peek-readable "^5.0.0" + supports-color@8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" @@ -3802,7 +4617,7 @@ through2@3.0.2: inherits "^2.0.4" readable-stream "2 || 3" -through2@^2.0.3: +through2@^2.0.1, through2@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -3827,6 +4642,14 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +token-types@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/token-types/-/token-types-5.0.1.tgz#aa9d9e6b23c420a675e55413b180635b86a093b4" + integrity sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg== + dependencies: + "@tokenizer/token" "^0.3.0" + ieee754 "^1.2.1" + touch@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" @@ -3835,9 +4658,9 @@ touch@^3.1.0: nopt "~1.0.10" "tough-cookie@^2.3.3 || ^3.0.1 || ^4.0.0": - version "4.1.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.2.tgz#e53e84b85f24e0b65dd526f46628db6c85f6b874" - integrity sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ== + version "4.1.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== dependencies: psl "^1.1.33" punycode "^2.1.1" @@ -3873,6 +4696,11 @@ transform-pouch@^2.0.0: dependencies: pouchdb-wrappers "^5.0.0" +ts-mixer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/ts-mixer/-/ts-mixer-6.0.3.tgz#69bd50f406ff39daa369885b16c77a6194c7cae6" + integrity sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ== + ts-mocha@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/ts-mocha/-/ts-mocha-9.0.2.tgz#c1ef0248874d04a0f26dd9bd8d88e617a8d82ab1" @@ -3906,6 +4734,11 @@ tsconfig-paths@^3.5.0: minimist "^1.2.6" strip-bom "^3.0.0" +tslib@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -3987,6 +4820,18 @@ undefsafe@^2.0.5: resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +undici@^5.21.0: + version "5.21.2" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.21.2.tgz#329f628aaea3f1539a28b9325dccc72097d29acd" + integrity sha512-f6pTQ9RF4DQtwoWSaC42P/NKlUjvezVvd9r155ohqkwFNRyBKM3f3pcty3ouusefNRyM25XhIQEbeQ46sZDJfQ== + dependencies: + busboy "^1.6.0" + unique-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" @@ -4014,6 +4859,11 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + update-notifier@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" @@ -4064,6 +4914,14 @@ url@0.10.3: punycode "1.3.2" querystring "0.2.0" +url@^0.11.0: + version "0.11.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.3.tgz#6f495f4b935de40ce4a0a52faee8954244f3d3ad" + integrity sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw== + dependencies: + punycode "^1.4.1" + qs "^6.11.2" + util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -4176,6 +5034,11 @@ ws@7.4.6: resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== +ws@^8.13.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== + xdg-basedir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" @@ -4229,7 +5092,7 @@ yargs-unparser@2.0.0: flat "^5.0.2" is-plain-obj "^2.1.0" -yargs@16.2.0: +yargs@16.2.0, yargs@^16.1.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==