diff --git a/.github/workflows/kt-cd.yaml b/.github/workflows/kt-cd.yaml new file mode 100644 index 0000000..7aac7c8 --- /dev/null +++ b/.github/workflows/kt-cd.yaml @@ -0,0 +1,35 @@ +name: ethereum-wallet-kt-cd + +on: + pull_request: + types: [closed] + branches: + - main + paths: + - "implementations/kt/**" + +jobs: + cd: + name: ethereum-wallet-kt-cd + if: | + github.event.pull_request.merged && + endsWith(github.event.pull_request.title, '/workflows/cd') + runs-on: ubuntu-latest + timeout-minutes: 60 + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Build + run: ./gradlew assemble + working-directory: ./implementations/kt + + - name: Publish + run: ./gradlew publish + env: + SIGNING_KEY_ID: ${{ secrets.SIGNING_KEY_ID }} + SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }} + SIGNING_KEY: ${{ secrets.SIGNING_KEY }} + OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }} + OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }} + working-directory: ./implementations/kt \ No newline at end of file diff --git a/.github/workflows/kt-ci.yaml b/.github/workflows/kt-ci.yaml new file mode 100644 index 0000000..cfa06e3 --- /dev/null +++ b/.github/workflows/kt-ci.yaml @@ -0,0 +1,43 @@ +name: ethereum-wallet-kt-ci + +on: + push: + branches: + - main + pull_request: + paths: + - "implementations/kt/**" + +jobs: + ci: + name: ethereum-wallet-kt-ci + runs-on: ubuntu-latest + timeout-minutes: 60 + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Read .nvmrc + run: echo ::set-output name=NVMRC::$(cat .nvmrc) + id: nvm + + - name: Setup Node.js + uses: actions/setup-node@master + with: + node-version: '${{ steps.nvm.outputs.NVMRC }}' + + - name: Install dependencies + run: yarn install --nonInteractive --frozen-lockfile --prefer-offline + working-directory: ./implementations/kt + + - name: Start Ganache + run: yarn polywrap infra up --modules=eth-ens-ipfs + working-directory: ./implementations/kt + + - name: Build and test + run: ./gradlew build + working-directory: ./implementations/kt + + - name: Stop Ganache + run: yarn polywrap infra down --modules=eth-ens-ipfs + working-directory: ./implementations/kt diff --git a/ethereum-wallet.code-workspace b/ethereum-wallet.code-workspace index 7558b08..c943bf9 100644 --- a/ethereum-wallet.code-workspace +++ b/ethereum-wallet.code-workspace @@ -16,6 +16,10 @@ "name": "javascript-plugin", "path": "implementations/js" }, + { + "name": "kotlin-plugin", + "path": "implementations/kt" + }, ], "settings": { "files.exclude": { diff --git a/implementations/kt/.gitignore b/implementations/kt/.gitignore new file mode 100644 index 0000000..9a79abc --- /dev/null +++ b/implementations/kt/.gitignore @@ -0,0 +1,57 @@ +# include wrap +!wrap + +# Project exclude paths +/.gradle/ +/build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ +/buildSrc/.gradle/ +/buildSrc/build/ +/convention-plugins/.gradle/ +/convention-plugins/build/ + +# env +/local.properties + +# generated +/clones/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store + diff --git a/implementations/kt/.nvmrc b/implementations/kt/.nvmrc new file mode 100644 index 0000000..812d296 --- /dev/null +++ b/implementations/kt/.nvmrc @@ -0,0 +1 @@ +v18.15 \ No newline at end of file diff --git a/implementations/kt/build.gradle.kts b/implementations/kt/build.gradle.kts new file mode 100644 index 0000000..059c2ac --- /dev/null +++ b/implementations/kt/build.gradle.kts @@ -0,0 +1,98 @@ +plugins { + id("com.android.library") version "8.2" + kotlin("multiplatform") version "1.9.0" + kotlin("plugin.serialization") version "1.9.0" + id("org.jlleitschuh.gradle.ktlint") version "11.5.0" + id("org.jetbrains.dokka") version "1.8.20" + id("convention.publication") +} + +group = "io.polywrap" +version = "0.10.0-SNAPSHOT" + +repositories { + google() + mavenCentral() + maven { url = uri("https://s01.oss.sonatype.org/content/repositories/snapshots/") } + maven { url = uri("https://jitpack.io") } +} + +kotlin { + jvm { + jvmToolchain(17) + testRuns["test"].executionTask.configure { + useJUnitPlatform() + } + } + androidTarget { + publishLibraryVariants("release") + } + +// val kethereumVersion = "0.85.7" + val kethereumVersion = "PR149-SNAPSHOT" + + sourceSets { + val commonMain by getting { + dependencies { + implementation("io.polywrap:polywrap-client:0.10.0-SNAPSHOT") + implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.5.1") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3") + implementation("com.github.walleth.kethereum:extensions_transactions:${kethereumVersion}") + implementation("com.github.walleth.kethereum:rpc:${kethereumVersion}") + implementation("com.github.walleth.kethereum:model:${kethereumVersion}") + implementation("com.github.walleth.kethereum:crypto:${kethereumVersion}") + implementation("com.github.walleth.kethereum:crypto_impl_bouncycastle:${kethereumVersion}") + implementation("com.github.walleth.kethereum:erc712:${kethereumVersion}") + implementation("com.github.walleth.kethereum:rlp:${kethereumVersion}") + implementation("com.github.walleth.kethereum:eip1559_signer:${kethereumVersion}") + implementation("com.squareup.okhttp3:okhttp:4.11.0") + } + } + val commonTest by getting { + dependencies { + implementation(kotlin("test")) + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3") + } + } + } +} + +android { + namespace = "io.polywrap.ethereumWalletPlugin" + compileSdk = 32 + defaultConfig.minSdk = 24 + compileOptions { + targetCompatibility = JavaVersion.VERSION_17 + } + testOptions { + unitTests.all { + it.enabled = false + } + } +} + +// javadoc generation for Maven repository publication +tasks.register("dokkaJavadocJar") { + dependsOn(tasks.dokkaJavadoc) + from(tasks.dokkaJavadoc.flatMap { it.outputDirectory }) + archiveClassifier.set("javadoc") +} + +// print stdout during tests +tasks.withType { + this.testLogging { + this.showStandardStreams = true + } +} + +// lint configuration +configure { + disabledRules.set(setOf("no-wildcard-imports")) + filter { + exclude("**/build/**") + exclude("**/generated/**") + exclude("**/resources/**") + exclude("**/wrap/**") + exclude("**/build.gradle.kts") + } +} diff --git a/implementations/kt/convention-plugins/build.gradle.kts b/implementations/kt/convention-plugins/build.gradle.kts new file mode 100644 index 0000000..39bd51e --- /dev/null +++ b/implementations/kt/convention-plugins/build.gradle.kts @@ -0,0 +1,7 @@ +plugins { + `kotlin-dsl` // Is needed to turn our build logic written in Kotlin into the Gradle Plugin +} + +repositories { + gradlePluginPortal() // To use 'maven-publish' and 'signing' plugins in our own plugin +} \ No newline at end of file diff --git a/implementations/kt/convention-plugins/src/main/kotlin/convention.publication.gradle.kts b/implementations/kt/convention-plugins/src/main/kotlin/convention.publication.gradle.kts new file mode 100644 index 0000000..20b98f3 --- /dev/null +++ b/implementations/kt/convention-plugins/src/main/kotlin/convention.publication.gradle.kts @@ -0,0 +1,115 @@ +import org.gradle.api.publish.maven.MavenPublication +import org.gradle.kotlin.dsl.`maven-publish` +import org.gradle.kotlin.dsl.signing +import java.util.* + +plugins { + `maven-publish` + signing +} + +// Stub secrets to let the project sync and build without the publication values set up +ext["signing.keyId"] = null +ext["signing.password"] = null +ext["signing.key"] = null +ext["ossrhUsername"] = null +ext["ossrhPassword"] = null + +// Grabbing secrets from local.properties file or from environment variables, which could be used on CI +val secretPropsFile = project.rootProject.file("local.properties") +if (secretPropsFile.exists()) { + secretPropsFile.reader().use { + Properties().apply { + load(it) + } + }.onEach { (name, value) -> + ext[name.toString()] = value + } +} else { + ext["signing.keyId"] = System.getenv("SIGNING_KEY_ID") + ext["signing.password"] = System.getenv("SIGNING_PASSWORD") + ext["signing.key"] = System.getenv("SIGNING_KEY") + ext["ossrhUsername"] = System.getenv("OSSRH_USERNAME") + ext["ossrhPassword"] = System.getenv("OSSRH_PASSWORD") +} + +fun getExtraString(name: String) = ext[name]?.toString() + +afterEvaluate { + val javadocJar: TaskProvider = rootProject.tasks.named("dokkaJavadocJar", Jar::class.java) + + publishing { + // Configure maven central repository + repositories { + maven { + name = "sonatype" + if (project.version.toString().endsWith("SNAPSHOT")) { + setUrl("https://s01.oss.sonatype.org/content/repositories/snapshots/") + } else { + setUrl("https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/") + } + credentials { + username = getExtraString("ossrhUsername") + password = getExtraString("ossrhPassword") + } + } + } + + // Configure all publications + publications.withType { + // Stub javadoc.jar artifact + artifact(javadocJar.get()) + // Provide artifacts information requited by Maven Central + pom { + name.set("ethereum-wallet-plugin") + description.set("Polywrap Ethereum Wallet Plugin for JVM and Android") + url.set("https://github.com/polywrap/ethereum-wallet/implementations/kt") + + licenses { + license { + name.set("MIT") + url.set("https://opensource.org/licenses/MIT") + } + } + developers { + developer { + id.set("krisbitney") + name.set("Kristofer Bitney") + email.set("kris@polywrap.io") + } + } + scm { + connection.set("scm:git:github.com/polywrap/ethereum-wallet.git") + developerConnection.set("scm:git:ssh://github.com/polywrap/ethereum-wallet.git") + url.set("https://github.com/polywrap/ethereum-wallet.git") + } + } + } + } +} + +// Signing artifacts. Signing.* extra properties values will be used +signing { + useInMemoryPgpKeys( + getExtraString("signing.keyId"), + getExtraString("signing.key"), + getExtraString("signing.password"), + ) + sign(publishing.publications) +} + +tasks.withType { + dependsOn( + "signJvmPublication", + "signAndroidReleasePublication", + "signKotlinMultiplatformPublication" + ) +} + +tasks.withType { + dependsOn( + "signJvmPublication", + "signAndroidReleasePublication", + "signKotlinMultiplatformPublication" + ) +} \ No newline at end of file diff --git a/implementations/kt/gradle.properties b/implementations/kt/gradle.properties new file mode 100644 index 0000000..2735d79 --- /dev/null +++ b/implementations/kt/gradle.properties @@ -0,0 +1,4 @@ +kotlin.code.style=official +android.useAndroidX=true +kotlin.mpp.androidSourceSetLayoutVersion=2 +org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 \ No newline at end of file diff --git a/implementations/kt/gradle/wrapper/gradle-wrapper.jar b/implementations/kt/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..41d9927 Binary files /dev/null and b/implementations/kt/gradle/wrapper/gradle-wrapper.jar differ diff --git a/implementations/kt/gradle/wrapper/gradle-wrapper.properties b/implementations/kt/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..ba6a225 --- /dev/null +++ b/implementations/kt/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Thu Jul 27 10:19:10 PET 2023 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-rc-2-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/implementations/kt/gradlew b/implementations/kt/gradlew new file mode 100755 index 0000000..1b6c787 --- /dev/null +++ b/implementations/kt/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/implementations/kt/gradlew.bat b/implementations/kt/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/implementations/kt/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/implementations/kt/package.json b/implementations/kt/package.json new file mode 100644 index 0000000..46bb7d9 --- /dev/null +++ b/implementations/kt/package.json @@ -0,0 +1,18 @@ +{ + "name": "ethereum-wallet-plugin", + "description": "Polywrap Ethereum Wallet Kotlin Plugin", + "version": "0.10.0", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/polywrap/ethereum-wallet.git" + }, + "devDependencies": { + "polywrap": "~0.11.0-pre.4" + }, + "scripts": { + "test": "yarn infra:up && ./gradlew test && yarn infra:down", + "infra:up": "yarn polywrap infra up --modules=eth-ens-ipfs", + "infra:down": "yarn polywrap infra down --modules=eth-ens-ipfs" + } +} diff --git a/implementations/kt/polywrap.graphql b/implementations/kt/polywrap.graphql new file mode 100644 index 0000000..9adffa5 --- /dev/null +++ b/implementations/kt/polywrap.graphql @@ -0,0 +1,2 @@ +#import * from "wrapscan.io/polywrap/ethereum-wallet@1.0" +#import { Env } from "wrapscan.io/polywrap/ethereum-wallet@1.0" diff --git a/implementations/kt/polywrap.yaml b/implementations/kt/polywrap.yaml new file mode 100644 index 0000000..6185713 --- /dev/null +++ b/implementations/kt/polywrap.yaml @@ -0,0 +1,10 @@ +format: 0.4.0 +project: + type: plugin/kotlin + name: ethereum-wallet-kt +source: + module: ./src/main/kotlin/io/polywrap/plugins/ethereum/EthereumWalletPlugin.kt + schema: ./polywrap.graphql + import_abis: + - uri: "wrapscan.io/polywrap/ethereum-wallet@1.0" + abi: ../../interface/polywrap.graphql diff --git a/implementations/kt/settings.gradle.kts b/implementations/kt/settings.gradle.kts new file mode 100644 index 0000000..9c8e23a --- /dev/null +++ b/implementations/kt/settings.gradle.kts @@ -0,0 +1,22 @@ +pluginManagement { + repositories { + google() + gradlePluginPortal() + mavenCentral() + } + resolutionStrategy { + eachPlugin { + if (requested.id.namespace == "com.android") { + useModule("com.android.tools.build:gradle:7.4.2") + } + } + } +} + +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "0.5.0" +} + +rootProject.name = "ethereum-wallet-plugin" + +includeBuild("convention-plugins") diff --git a/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/Connection.kt b/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/Connection.kt new file mode 100644 index 0000000..a0586f3 --- /dev/null +++ b/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/Connection.kt @@ -0,0 +1,194 @@ +package io.polywrap.plugins.ethereum + +import org.kethereum.crypto.toECKeyPair +import org.kethereum.model.ECKeyPair +import org.kethereum.model.PrivateKey +import org.kethereum.rpc.BaseEthereumRPC +import org.kethereum.rpc.HttpEthereumRPC + +/** + * Represents a connection to an Ethereum network. + * + * @property provider The Ethereum Remote Procedure Call (RPC) provider. + * @property signer The signer key pair used for signing transactions. + */ +data class Connection(var provider: BaseEthereumRPC, var signer: ECKeyPair? = null) { + + /** + * Constructs a [Connection] instance from a [BaseEthereumRPC] provider and an [ECKeyPair] signer. + * + * @param provider The Ethereum RPC provider. + * @param signer The private key for the signer. + */ + constructor(provider: BaseEthereumRPC, signer: PrivateKey) : this(provider, signer.toECKeyPair()) + + /** + * Constructs a [Connection] instance from a [BaseEthereumRPC] provider and a ByteArray signer. + * + * @param provider The Ethereum RPC provider. + * @param signer The private key for the signer as a ByteArray. + */ + constructor(provider: BaseEthereumRPC, signer: ByteArray) : this(provider, PrivateKey(signer)) + + /** + * Constructs a [Connection] instance from a [BaseEthereumRPC] provider and a hexadecimal string signer. + * + * @param provider The Ethereum RPC provider. + * @param signer The private key for the signer as a hexadecimal string. + */ + constructor(provider: BaseEthereumRPC, signer: String) : this(provider, hexToBytes(signer)) + + /** + * Constructs a [Connection] instance from a [String] provider and an [ECKeyPair] signer. + * + * @param provider The Ethereum RPC provider as a JSON RPC node url. + * @param signer The signer key pair. + */ + constructor(provider: String, signer: ECKeyPair? = null) : this(HttpEthereumRPC(provider), signer) + + /** + * Constructs a [Connection] instance from a [String] provider and a [PrivateKey] signer. + * + * @param provider The Ethereum RPC provider as a JSON RPC node url. + * @param signer The private key for the signer. + */ + constructor(provider: String, signer: PrivateKey) : this(HttpEthereumRPC(provider), signer) + + /** + * Constructs a [Connection] instance from a [String] provider and a ByteArray signer. + * + * @param provider The Ethereum RPC provider as a JSON RPC node url. + * @param signer The private key for the signer as a ByteArray. + */ + constructor(provider: String, signer: ByteArray) : this(HttpEthereumRPC(provider), signer) + + /** + * Constructs a [Connection] instance from a [String] provider and a hexadecimal string signer. + * + * @param provider The Ethereum RPC provider as a JSON RPC node url. + * @param signer The private key for the signer as a hexadecimal string. + */ + constructor(provider: String, signer: String) : this(HttpEthereumRPC(provider), signer) + + /** + * Factory methods for constructing a [Connection] instance from different types. + */ + companion object { + /** + * Creates a [Connection] from a known Ethereum network. + * + * @param network The known Ethereum network. + * @return A connection to the specified Ethereum network. + */ + fun from(network: KnownNetwork): Connection { + val provider = "https://${network.toInfuraId()}.infura.io/v3/1ef7451bee5e458eb26738e521ad3074" + return Connection(provider) + } + + /** + * Creates a [Connection] from a chain ID. + * + * @param chainId The chain ID for the Ethereum network. + * @return A connection to the Ethereum network associated with the chain ID. + * @throws Exception if the chainId is unknown. + */ + fun from(chainId: Long): Connection { + val network: KnownNetwork = KnownNetwork.from(chainId) ?: throw Exception("Unknown chainId: $chainId") + return from(network) + } + + /** + * Creates a [Connection] from a node as a string. + * + * @param node A JSON RPC node url. + * @return A connection to the Ethereum network associated with the node. + */ + fun from(node: String): Connection { + return Connection(node) + } + } + + /** + * Updates the Ethereum RPC provider and signer key pair for this connection. + * + * @param provider The new Ethereum RPC provider. + * @param signer The new signer key pair. + */ + fun set(provider: BaseEthereumRPC, signer: ECKeyPair? = null) { + this.provider = provider + this.signer = signer + } + + /** + * Updates the Ethereum RPC provider and signer key pair for this connection. + * + * @param provider The new Ethereum RPC provider. + * @param signer The new private key for the signer. + */ + fun set(provider: BaseEthereumRPC, signer: PrivateKey) = set(provider, signer.toECKeyPair()) + + /** + * Updates the Ethereum RPC provider and signer key pair for this connection. + * + * @param provider The new Ethereum RPC provider. + * @param signer The new private key for the signer as a ByteArray. + */ + fun set(provider: BaseEthereumRPC, signer: ByteArray) = set(provider, PrivateKey(signer)) + + /** + * Updates the Ethereum RPC provider and signer key pair for this connection. + * + * @param provider The new Ethereum RPC provider. + * @param signer The new private key for the signer as a hexadecimal string. + */ + fun set(provider: BaseEthereumRPC, signer: String) = set(provider, hexToBytes(signer)) + + /** + * Updates the Ethereum RPC provider and signer key pair for this connection. + * + * @param provider The new Ethereum RPC provider as a JSON RPC node url. + * @param signer The new signer key pair. + */ + fun set(provider: String, signer: ECKeyPair? = null) { + this.provider = HttpEthereumRPC(provider) + this.signer = signer + } + + /** + * Updates the Ethereum RPC provider and signer key pair for this connection. + * + * @param provider The new Ethereum RPC provider as a JSON RPC node url. + * @param signer The new private key for the signer. + */ + fun set(provider: String, signer: PrivateKey) = set(provider, signer.toECKeyPair()) + + /** + * Updates the Ethereum RPC provider and signer key pair for this connection. + * + * @param provider The new Ethereum RPC provider as a JSON RPC node url. + * @param signer The new private key for the signer as a ByteArray. + */ + fun set(provider: String, signer: ByteArray) = set(provider, PrivateKey(signer)) + + /** + * Updates the Ethereum RPC provider and signer key pair for this connection. + * + * @param provider The new Ethereum RPC provider as a JSON RPC node url. + * @param signer The new private key for the signer as a hexadecimal string. + */ + fun set(provider: String, signer: String) = set(provider, hexToBytes(signer)) +} + +/** + * Converts a hexadecimal string to a byte array. + * + * @param hex The hexadecimal string to be converted. + * @return A byte array representing the hexadecimal string. + */ +private fun hexToBytes(hex: String): ByteArray { + val hexBytes = if (hex.startsWith("0x")) hex.drop(2) else hex + return hexBytes + .chunked(2) + .map { it.toInt(16).toByte() } + .toByteArray() +} diff --git a/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/Connections.kt b/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/Connections.kt new file mode 100644 index 0000000..515d4f6 --- /dev/null +++ b/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/Connections.kt @@ -0,0 +1,159 @@ +package io.polywrap.plugins.ethereum + +import io.polywrap.plugins.ethereum.wrap.Connection as SchemaConnection + +/** + * A class representing multiple connections to different Ethereum networks. + * + * @property networks A mutable map of connections, indexed by network names. + * @property defaultNetwork The name of the default network to use when a specific network isn't specified. + * @constructor Instantiates the Connections class with the specified map of connections and optional default network. + * If no default network is specified, the default network will be set to "mainnet". + */ +class Connections( + private val networks: MutableMap, + private var defaultNetwork: String = "mainnet" +) { + + init { + networks.toMap().forEach { (network, connection) -> + networks.remove(network) + set(network, connection) + } + + if (networks["mainnet"] == null) { + networks["mainnet"] = Connection.from(KnownNetwork.Mainnet) + } + if (networks[defaultNetwork] == null) { + throw Exception("No connection found for default network: $defaultNetwork") + } + } + + /** + * Sets or replaces a connection for a given network. + * + * @param network The name of the network. + * @param connection The connection to the network. + */ + fun set(network: String, connection: Connection) { + networks[network.lowercase()] = connection + } + + /** + * Sets or replaces a connection for a given network using a known network. + * + * @param network The name of the network. + * @param knownNetwork The known network to establish a connection to. + */ + fun set(network: String, knownNetwork: KnownNetwork) = set(network, Connection.from(knownNetwork)) + + /** + * Sets or replaces a connection for a given network using a chain ID. + * + * @param network The name of the network. + * @param chainId The chain ID of the network to establish a connection to. + */ + fun set(network: String, chainId: Long) = set(network, Connection.from(chainId)) + + /** + * Sets or replaces a connection for a given network using a node URL. + * + * @param network The name of the network. + * @param node The node URL of the network to establish a connection to. + */ + fun set(network: String, node: String) = set(network, Connection.from(node)) + + /** + * Retrieves the connection for a specified network, if it exists. + * + * @param network The name of the network. + * @return The connection to the network, or null if it doesn't exist. + */ + fun get(network: String): Connection? = networks[network.lowercase()] + + /** + * Retrieves the connection for a specified SchemaConnection object, or the default connection if none is specified. + * + * @param connection The SchemaConnection object representing the network to connect to, or null for the default network. + * @return The requested [Connection]. + * @throws Exception if connection is null and no [Connection] can be found for the default network. + */ + fun get(connection: SchemaConnection? = null): Connection { + if (connection == null) { + return get(defaultNetwork) ?: throw Exception("No connection found for default network: $defaultNetwork") + } + + val (node, networkNameOrChainId) = connection + + var result: Connection? = null + + if (node != null) { + result = Connection.from(node) + } else if (networkNameOrChainId != null) { + val networkStr = networkNameOrChainId.lowercase() + result = get(networkStr) + ?: networkStr.toLongOrNull()?.let { Connection.from(it) } + ?: KnownNetwork.from(networkStr)?.let { Connection.from(it) } + } + + return result + ?: get(defaultNetwork) + ?: throw Exception("No connection found for default network: $defaultNetwork") + } + + /** + * Sets or replaces a connection for a given network and sets that network as the default. + * + * @param network The name of the network. + * @param connection The connection to the network. + */ + fun setDefaultNetwork(network: String, connection: Connection) { + set(network, connection) + defaultNetwork = network + } + + /** + * Sets a network as the default, if a connection for that network exists. + * + * @param network The name of the network. + * @throws Exception if no connection can be found for the specified network. + */ + fun setDefaultNetwork(network: String) { + networks[network]?.let { + defaultNetwork = network + } ?: throw Exception("No connection found for network: $network") + } + + /** + * Sets or replaces a connection for a given network and sets that network as the default using a known network. + * + * @param network The name of the network. + * @param knownNetwork The known network to establish a connection to. + */ + fun setDefaultNetwork(network: String, knownNetwork: KnownNetwork) { + setDefaultNetwork(network, Connection.from(knownNetwork)) + } + + /** + * Sets or replaces a connection for a given network and sets that network as the default using a chain ID. + * + * @param network The name of the network. + * @param chainId The chain ID of the network to establish a connection to. + */ + fun setDefaultNetwork(network: String, chainId: Long) = setDefaultNetwork(network, Connection.from(chainId)) + + /** + * Sets or replaces a connection for a given network and sets that network as the default using a node URL. + * + * @param network The name of the network. + * @param node The node URL of the network to establish a connection to. + */ + fun setDefaultNetwork(network: String, node: String) = setDefaultNetwork(network, Connection.from(node)) + + /** + * Retrieves the name of the default network. + * + * @return The name of the default network. + */ + fun getDefaultNetwork(): String = defaultNetwork +} diff --git a/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/EthereumWalletPlugin.kt b/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/EthereumWalletPlugin.kt new file mode 100644 index 0000000..77fd7b9 --- /dev/null +++ b/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/EthereumWalletPlugin.kt @@ -0,0 +1,137 @@ +package io.polywrap.plugins.ethereum + +import io.polywrap.core.Invoker +import io.polywrap.plugin.PluginFactory +import io.polywrap.plugin.PluginPackage +import io.polywrap.plugins.ethereum.wrap.* +import kotlinx.coroutines.delay +import kotlinx.coroutines.withTimeout +import org.kethereum.crypto.* +import org.kethereum.eip712.MoshiAdapter +import org.kethereum.model.Address +import pm.gnosis.eip712.EIP712JsonParser +import pm.gnosis.eip712.typedDataHash + +/** + * A plugin for Ethereum provider and signer management. + * + * @property config An optional configuration object for the plugin. + */ +class EthereumWalletPlugin(config: Connections) : Module(config) { + + companion object { + val MESSAGE_PREFIX = "\u0019Ethereum Signed Message:\n".encodeToByteArray() + } + + override suspend fun request(args: ArgsRequest, invoker: Invoker): Json { + val connection = this.config.get(args.connection) + val method = args.method + val params = args.params?.trim()?.let { + if (it.startsWith("[") && it.endsWith("]")) { + it.substring(1, it.length - 1) + } else { + it + } + } + val provider = connection.provider + val signer = connection.signer + + if (signer != null) { + // TODO: KEthereum does not provide a simple way to convert an RLP byte array to a transaction. Need to research this. +// if (method == "eth_sendTransaction") { +// val rlp = params.substring(1, params.length - 1).encodeToByteArray() +// val tx = rlp.toRLP().toTransaction() +// val signature = tx.signViaEIP1559(signer) +// val signedTx = tx.encode(signature).toHexString() +// return connection.provider.sendRawTransaction(signedTx) ?: throw Exception("Failed to send transaction") +// } + + if (method == "eth_signTypedData_v4") { + val payload = params!!.split(",", limit = 2)[1].trim() + val parsed = EIP712JsonParser(MoshiAdapter()).parseMessage(payload) + val hash = typedDataHash(parsed.message, parsed.domain) + return "0x" + signMessageHash(hash, signer).toHex() + } + } + + when (method) { + "eth_chainId" -> { + return provider.chainId()?.value?.toString() ?: "{}" + } + "eth_sign" -> { + val message = params!!.encodeToByteArray() + return signMessage(ArgsSignMessage(message, args.connection), invoker) + } + "eth_getTransactionCount" -> { + val (address, block) = params!!.replace("\"", "").split(",").map { it.trim() } + return provider.getTransactionCount(Address(address), block)?.toString() ?: "{}" + } + else -> { + val response = params?.let { provider.stringCall(method, it) } ?: provider.stringCall(method) + + if (response?.error != null) { + throw Exception("RPC Error. Code: ${response.error?.code} Message: ${response.error?.message}") + } + return response?.result ?: "{}" + } + } + } + + override suspend fun signerAddress(args: ArgsSignerAddress, invoker: Invoker): String? { + val connection = this.config.get(args.connection) + return connection.signer?.toAddress()?.hex + ?: connection.provider.accounts()?.get(0)?.hex + } + + override suspend fun signMessage(args: ArgsSignMessage, invoker: Invoker): String { + val connection = this.config.get(args.connection) + val signer = connection.signer + return if (signer == null) { + val address = signerAddress(ArgsSignerAddress(args.connection), invoker) + ?: throw Exception("No signer configured for connection: $connection") + val signature = connection.provider.sign(Address(address), args.message)?.toHex() + ?: throw Exception("Failed to sign message") + "0x$signature" + } else { + val len = args.message.size.toString().encodeToByteArray() + "0x" + signer.signMessage(MESSAGE_PREFIX + len + args.message).toHex() + } + } + + override suspend fun signTransaction(args: ArgsSignTransaction, invoker: Invoker): String { + val connection = this.config.get(args.connection) + val signer = connection.signer ?: throw Exception("No wallet configured for connection: $connection") + return "0x" + signer.signMessage(args.rlp).toHex() + } + + override suspend fun waitForTransaction(args: ArgsWaitForTransaction, invoker: Invoker): Boolean { + val connection = this.config.get(args.connection) + val pollLatency = 100L // ms + val confirmationLatency = 500L // ms + val timeout = args.timeout?.toLong() ?: 300_000L // ms + val confirmations = args.confirmations.toLong() + + return try { + withTimeout(timeout) { + var blockMined: Long? = connection.provider.getTransactionByHash(args.txHash)?.transaction?.blockNumber?.toLong() + while (blockMined == null) { + delay(pollLatency) + blockMined = connection.provider.getTransactionByHash(args.txHash)?.transaction?.blockNumber?.toLong() + } + while (connection.provider.blockNumber()!!.toLong() - blockMined + 1 < confirmations) { + delay(confirmationLatency) + } + true + } + } catch (e: Exception) { + throw Exception("Transaction timed out", e) + } + } +} + +val ethereumWalletPlugin: PluginFactory = { config: Connections -> + PluginPackage( + pluginModule = EthereumWalletPlugin(config), + manifest = manifest + ) +} diff --git a/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/KnownNetwork.kt b/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/KnownNetwork.kt new file mode 100644 index 0000000..fe429c0 --- /dev/null +++ b/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/KnownNetwork.kt @@ -0,0 +1,36 @@ +package io.polywrap.plugins.ethereum + +enum class KnownNetwork(val chainId: Long) { + Mainnet(1L), + Goerli(5L), + BinanceSmartChain(56L), + Sepolia(11155111L), + CeloMainnet(42220L), + CeloAlfajores(44787L), + AvalancheMainnet(43114L), + AvalancheFuji(43113L), + PalmMainnet(11297108109L), + PalmTestnet(11297108099L), + AuroraMainnet(1313161554L), + AuroraTestnet(1313161555L); + + fun toInfuraId(): String = when (this) { + Mainnet -> "mainnet" + Goerli -> "goerli" + BinanceSmartChain -> "binance" + Sepolia -> "sepolia" + CeloMainnet -> "celo-mainnet" + CeloAlfajores -> "celo-alfajores" + AvalancheMainnet -> "avalanche-mainnet" + AvalancheFuji -> "avalanche-fuji" + PalmMainnet -> "palm-mainnet" + PalmTestnet -> "palm-testnet" + AuroraMainnet -> "aurora-mainnet" + AuroraTestnet -> "aurora-testnet" + } + + companion object { + fun from(chainId: Long): KnownNetwork? = KnownNetwork.entries.find { it.chainId == chainId } + fun from(name: String): KnownNetwork? = KnownNetwork.entries.find { it.name == name } + } +} diff --git a/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/wrap/module.kt b/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/wrap/module.kt new file mode 100644 index 0000000..81e45dd --- /dev/null +++ b/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/wrap/module.kt @@ -0,0 +1,146 @@ +/// NOTE: This is an auto-generated file. +/// All modifications will be overwritten. + +package io.polywrap.plugins.ethereum.wrap + +import io.polywrap.core.Invoker +import io.polywrap.core.msgpack.msgPackDecode +import io.polywrap.core.msgpack.msgPackEncode +import io.polywrap.plugin.PluginMethod +import io.polywrap.plugin.PluginModule +import kotlinx.serialization.Serializable +import kotlinx.serialization.serializer + +@Serializable +data class ArgsRequest( + val method: String, + val params: Json? = null, + val connection: Connection? = null, +) + +@Serializable +data class ArgsWaitForTransaction( + val txHash: String, + val confirmations: UInt, + val timeout: UInt? = null, + val connection: Connection? = null, +) + +@Serializable +data class ArgsSignerAddress( + val connection: Connection? = null, +) + +@Serializable +data class ArgsSignMessage( + val message: ByteArray, + val connection: Connection? = null, +) + +@Serializable +data class ArgsSignTransaction( + val rlp: ByteArray, + val connection: Connection? = null, +) + +@Suppress("UNUSED_PARAMETER", "FunctionName") +abstract class Module(config: TConfig) : PluginModule(config) { + + final override val methods: Map = mapOf( + "request" to ::__request, + "waitForTransaction" to ::__waitForTransaction, + "signerAddress" to ::__signerAddress, + "signMessage" to ::__signMessage, + "signTransaction" to ::__signTransaction, + ) + + abstract suspend fun request( + args: ArgsRequest, + invoker: Invoker + ): Json + + abstract suspend fun waitForTransaction( + args: ArgsWaitForTransaction, + invoker: Invoker + ): Boolean + + abstract suspend fun signerAddress( + args: ArgsSignerAddress, + invoker: Invoker + ): String? + + abstract suspend fun signMessage( + args: ArgsSignMessage, + invoker: Invoker + ): String + + abstract suspend fun signTransaction( + args: ArgsSignTransaction, + invoker: Invoker + ): String + + private suspend fun __request( + encodedArgs: ByteArray?, + encodedEnv: ByteArray?, + invoker: Invoker + ): ByteArray { + val args: ArgsRequest = encodedArgs?.let { + msgPackDecode(ArgsRequest.serializer(), it).getOrNull() + ?: throw Exception("Failed to decode args in invocation to plugin method 'request'") + } ?: throw Exception("Missing args in invocation to plugin method 'request'") + val response = request(args, invoker) + return msgPackEncode(serializer(), response) + } + + private suspend fun __waitForTransaction( + encodedArgs: ByteArray?, + encodedEnv: ByteArray?, + invoker: Invoker + ): ByteArray { + val args: ArgsWaitForTransaction = encodedArgs?.let { + msgPackDecode(ArgsWaitForTransaction.serializer(), it).getOrNull() + ?: throw Exception("Failed to decode args in invocation to plugin method 'waitForTransaction'") + } ?: throw Exception("Missing args in invocation to plugin method 'waitForTransaction'") + val response = waitForTransaction(args, invoker) + return msgPackEncode(serializer(), response) + } + + private suspend fun __signerAddress( + encodedArgs: ByteArray?, + encodedEnv: ByteArray?, + invoker: Invoker + ): ByteArray { + val args: ArgsSignerAddress = encodedArgs?.let { + msgPackDecode(ArgsSignerAddress.serializer(), it).getOrNull() + ?: throw Exception("Failed to decode args in invocation to plugin method 'signerAddress'") + } ?: throw Exception("Missing args in invocation to plugin method 'signerAddress'") + val response = signerAddress(args, invoker) + return msgPackEncode(serializer(), response) + } + + private suspend fun __signMessage( + encodedArgs: ByteArray?, + encodedEnv: ByteArray?, + invoker: Invoker + ): ByteArray { + val args: ArgsSignMessage = encodedArgs?.let { + msgPackDecode(ArgsSignMessage.serializer(), it).getOrNull() + ?: throw Exception("Failed to decode args in invocation to plugin method 'signMessage'") + } ?: throw Exception("Missing args in invocation to plugin method 'signMessage'") + val response = signMessage(args, invoker) + return msgPackEncode(serializer(), response) + } + + private suspend fun __signTransaction( + encodedArgs: ByteArray?, + encodedEnv: ByteArray?, + invoker: Invoker + ): ByteArray { + val args: ArgsSignTransaction = encodedArgs?.let { + msgPackDecode(ArgsSignTransaction.serializer(), it).getOrNull() + ?: throw Exception("Failed to decode args in invocation to plugin method 'signTransaction'") + } ?: throw Exception("Missing args in invocation to plugin method 'signTransaction'") + val response = signTransaction(args, invoker) + return msgPackEncode(serializer(), response) + } +} diff --git a/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/wrap/types.kt b/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/wrap/types.kt new file mode 100644 index 0000000..99b35bf --- /dev/null +++ b/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/wrap/types.kt @@ -0,0 +1,38 @@ +/// NOTE: This is an auto-generated file. +/// All modifications will be overwritten. + +package io.polywrap.plugins.ethereum.wrap + +import io.polywrap.core.msgpack.GenericMapExtensionSerializer +import kotlinx.serialization.Serializable + +typealias GenericMap = @Serializable(with = GenericMapExtensionSerializer::class) io.polywrap.core.msgpack.GenericMap + +typealias BigInt = String +typealias BigNumber = String +typealias Json = String + +/// Env START /// +@Serializable +data class Env( + val connection: Connection? = null, +) +/// Env END /// + +/// Objects START /// +@Serializable +data class Connection( + val node: String? = null, + val networkNameOrChainId: String? = null, +) + +/// Objects END /// + +/// Enums START /// +/// Enums END /// + +/// Imported Objects START /// +/// Imported Objects END /// + +/// Imported Modules START /// +/// Imported Modules END /// diff --git a/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/wrap/wrap.info.kt b/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/wrap/wrap.info.kt new file mode 100644 index 0000000..e16733a --- /dev/null +++ b/implementations/kt/src/commonMain/kotlin/io/polywrap/plugins/ethereum/wrap/wrap.info.kt @@ -0,0 +1,17 @@ +/// NOTE: This is an auto-generated file. +/// All modifications will be overwritten. + +package io.polywrap.plugins.ethereum.wrap + +import io.polywrap.core.wrap.WrapManifest +import io.polywrap.core.wrap.formats.wrap01.abi.Abi01 +import io.polywrap.core.msgpack.msgPackDecode + +val manifest = WrapManifest( + name = "ethereum-wallet-kt", + type = "plugin", + version = "0.1", + abi = msgPackDecode(Abi01.serializer(), byteArrayOf( + 132.toByte(),167.toByte(),101.toByte(),110.toByte(),118.toByte(),84.toByte(),121.toByte(),112.toByte(),101.toByte(),131.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),206.toByte(),0.toByte(),1.toByte(),0.toByte(),0.toByte(),170.toByte(),112.toByte(),114.toByte(),111.toByte(),112.toByte(),101.toByte(),114.toByte(),116.toByte(),105.toByte(),101.toByte(),115.toByte(),145.toByte(),132.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),34.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),170.toByte(),99.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),166.toByte(),111.toByte(),98.toByte(),106.toByte(),101.toByte(),99.toByte(),116.toByte(),131.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),205.toByte(),32.toByte(),0.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),170.toByte(),99.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),170.toByte(),67.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),170.toByte(),67.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),163.toByte(),69.toByte(),110.toByte(),118.toByte(),170.toByte(),109.toByte(),111.toByte(),100.toByte(),117.toByte(),108.toByte(),101.toByte(),84.toByte(),121.toByte(),112.toByte(),101.toByte(),131.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),204.toByte(),128.toByte(),167.toByte(),109.toByte(),101.toByte(),116.toByte(),104.toByte(),111.toByte(),100.toByte(),115.toByte(),149.toByte(),135.toByte(),169.toByte(),97.toByte(),114.toByte(),103.toByte(),117.toByte(),109.toByte(),101.toByte(),110.toByte(),116.toByte(),115.toByte(),147.toByte(),133.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),34.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),166.toByte(),109.toByte(),101.toByte(),116.toByte(),104.toByte(),111.toByte(),100.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),166.toByte(),115.toByte(),99.toByte(),97.toByte(),108.toByte(),97.toByte(),114.toByte(),132.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),4.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),166.toByte(),109.toByte(),101.toByte(),116.toByte(),104.toByte(),111.toByte(),100.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),83.toByte(),116.toByte(),114.toByte(),105.toByte(),110.toByte(),103.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),83.toByte(),116.toByte(),114.toByte(),105.toByte(),110.toByte(),103.toByte(),132.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),34.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),166.toByte(),112.toByte(),97.toByte(),114.toByte(),97.toByte(),109.toByte(),115.toByte(),166.toByte(),115.toByte(),99.toByte(),97.toByte(),108.toByte(),97.toByte(),114.toByte(),131.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),4.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),166.toByte(),112.toByte(),97.toByte(),114.toByte(),97.toByte(),109.toByte(),115.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),164.toByte(),74.toByte(),83.toByte(),79.toByte(),78.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),164.toByte(),74.toByte(),83.toByte(),79.toByte(),78.toByte(),132.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),34.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),170.toByte(),99.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),166.toByte(),111.toByte(),98.toByte(),106.toByte(),101.toByte(),99.toByte(),116.toByte(),131.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),205.toByte(),32.toByte(),0.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),170.toByte(),99.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),170.toByte(),67.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),170.toByte(),67.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),167.toByte(),99.toByte(),111.toByte(),109.toByte(),109.toByte(),101.toByte(),110.toByte(),116.toByte(),217.toByte(),52.toByte(),83.toByte(),101.toByte(),110.toByte(),100.toByte(),32.toByte(),97.toByte(),32.toByte(),114.toByte(),101.toByte(),109.toByte(),111.toByte(),116.toByte(),101.toByte(),32.toByte(),82.toByte(),80.toByte(),67.toByte(),32.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),101.toByte(),115.toByte(),116.toByte(),32.toByte(),116.toByte(),111.toByte(),32.toByte(),116.toByte(),104.toByte(),101.toByte(),32.toByte(),114.toByte(),101.toByte(),103.toByte(),105.toByte(),115.toByte(),116.toByte(),101.toByte(),114.toByte(),101.toByte(),100.toByte(),32.toByte(),112.toByte(),114.toByte(),111.toByte(),118.toByte(),105.toByte(),100.toByte(),101.toByte(),114.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),64.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),167.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),101.toByte(),115.toByte(),116.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),166.toByte(),114.toByte(),101.toByte(),116.toByte(),117.toByte(),114.toByte(),110.toByte(),133.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),34.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),167.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),101.toByte(),115.toByte(),116.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),166.toByte(),115.toByte(),99.toByte(),97.toByte(),108.toByte(),97.toByte(),114.toByte(),132.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),4.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),167.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),101.toByte(),115.toByte(),116.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),164.toByte(),74.toByte(),83.toByte(),79.toByte(),78.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),164.toByte(),74.toByte(),83.toByte(),79.toByte(),78.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),77.toByte(),101.toByte(),116.toByte(),104.toByte(),111.toByte(),100.toByte(),135.toByte(),169.toByte(),97.toByte(),114.toByte(),103.toByte(),117.toByte(),109.toByte(),101.toByte(),110.toByte(),116.toByte(),115.toByte(),148.toByte(),133.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),34.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),166.toByte(),116.toByte(),120.toByte(),72.toByte(),97.toByte(),115.toByte(),104.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),166.toByte(),115.toByte(),99.toByte(),97.toByte(),108.toByte(),97.toByte(),114.toByte(),132.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),4.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),166.toByte(),116.toByte(),120.toByte(),72.toByte(),97.toByte(),115.toByte(),104.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),83.toByte(),116.toByte(),114.toByte(),105.toByte(),110.toByte(),103.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),83.toByte(),116.toByte(),114.toByte(),105.toByte(),110.toByte(),103.toByte(),133.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),34.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),173.toByte(),99.toByte(),111.toByte(),110.toByte(),102.toByte(),105.toByte(),114.toByte(),109.toByte(),97.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),115.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),166.toByte(),115.toByte(),99.toByte(),97.toByte(),108.toByte(),97.toByte(),114.toByte(),132.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),4.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),173.toByte(),99.toByte(),111.toByte(),110.toByte(),102.toByte(),105.toByte(),114.toByte(),109.toByte(),97.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),115.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),85.toByte(),73.toByte(),110.toByte(),116.toByte(),51.toByte(),50.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),85.toByte(),73.toByte(),110.toByte(),116.toByte(),51.toByte(),50.toByte(),132.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),34.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),167.toByte(),116.toByte(),105.toByte(),109.toByte(),101.toByte(),111.toByte(),117.toByte(),116.toByte(),166.toByte(),115.toByte(),99.toByte(),97.toByte(),108.toByte(),97.toByte(),114.toByte(),131.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),4.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),167.toByte(),116.toByte(),105.toByte(),109.toByte(),101.toByte(),111.toByte(),117.toByte(),116.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),85.toByte(),73.toByte(),110.toByte(),116.toByte(),51.toByte(),50.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),85.toByte(),73.toByte(),110.toByte(),116.toByte(),51.toByte(),50.toByte(),132.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),34.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),170.toByte(),99.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),166.toByte(),111.toByte(),98.toByte(),106.toByte(),101.toByte(),99.toByte(),116.toByte(),131.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),205.toByte(),32.toByte(),0.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),170.toByte(),99.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),170.toByte(),67.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),170.toByte(),67.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),167.toByte(),99.toByte(),111.toByte(),109.toByte(),109.toByte(),101.toByte(),110.toByte(),116.toByte(),217.toByte(),38.toByte(),87.toByte(),97.toByte(),105.toByte(),116.toByte(),32.toByte(),102.toByte(),111.toByte(),114.toByte(),32.toByte(),97.toByte(),32.toByte(),116.toByte(),114.toByte(),97.toByte(),110.toByte(),115.toByte(),97.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),32.toByte(),116.toByte(),111.toByte(),32.toByte(),98.toByte(),101.toByte(),32.toByte(),99.toByte(),111.toByte(),110.toByte(),102.toByte(),105.toByte(),114.toByte(),109.toByte(),101.toByte(),100.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),64.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),178.toByte(),119.toByte(),97.toByte(),105.toByte(),116.toByte(),70.toByte(),111.toByte(),114.toByte(),84.toByte(),114.toByte(),97.toByte(),110.toByte(),115.toByte(),97.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),166.toByte(),114.toByte(),101.toByte(),116.toByte(),117.toByte(),114.toByte(),110.toByte(),133.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),34.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),178.toByte(),119.toByte(),97.toByte(),105.toByte(),116.toByte(),70.toByte(),111.toByte(),114.toByte(),84.toByte(),114.toByte(),97.toByte(),110.toByte(),115.toByte(),97.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),166.toByte(),115.toByte(),99.toByte(),97.toByte(),108.toByte(),97.toByte(),114.toByte(),132.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),4.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),178.toByte(),119.toByte(),97.toByte(),105.toByte(),116.toByte(),70.toByte(),111.toByte(),114.toByte(),84.toByte(),114.toByte(),97.toByte(),110.toByte(),115.toByte(),97.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),167.toByte(),66.toByte(),111.toByte(),111.toByte(),108.toByte(),101.toByte(),97.toByte(),110.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),167.toByte(),66.toByte(),111.toByte(),111.toByte(),108.toByte(),101.toByte(),97.toByte(),110.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),77.toByte(),101.toByte(),116.toByte(),104.toByte(),111.toByte(),100.toByte(),135.toByte(),169.toByte(),97.toByte(),114.toByte(),103.toByte(),117.toByte(),109.toByte(),101.toByte(),110.toByte(),116.toByte(),115.toByte(),145.toByte(),132.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),34.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),170.toByte(),99.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),166.toByte(),111.toByte(),98.toByte(),106.toByte(),101.toByte(),99.toByte(),116.toByte(),131.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),205.toByte(),32.toByte(),0.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),170.toByte(),99.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),170.toByte(),67.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),170.toByte(),67.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),167.toByte(),99.toByte(),111.toByte(),109.toByte(),109.toByte(),101.toByte(),110.toByte(),116.toByte(),217.toByte(),73.toByte(),71.toByte(),101.toByte(),116.toByte(),32.toByte(),116.toByte(),104.toByte(),101.toByte(),32.toByte(),101.toByte(),116.toByte(),104.toByte(),101.toByte(),114.toByte(),101.toByte(),117.toByte(),109.toByte(),32.toByte(),97.toByte(),100.toByte(),100.toByte(),114.toByte(),101.toByte(),115.toByte(),115.toByte(),32.toByte(),111.toByte(),102.toByte(),32.toByte(),116.toByte(),104.toByte(),101.toByte(),32.toByte(),115.toByte(),105.toByte(),103.toByte(),110.toByte(),101.toByte(),114.toByte(),46.toByte(),32.toByte(),82.toByte(),101.toByte(),116.toByte(),117.toByte(),114.toByte(),110.toByte(),32.toByte(),110.toByte(),117.toByte(),108.toByte(),108.toByte(),32.toByte(),105.toByte(),102.toByte(),32.toByte(),115.toByte(),105.toByte(),103.toByte(),110.toByte(),101.toByte(),114.toByte(),32.toByte(),105.toByte(),115.toByte(),32.toByte(),109.toByte(),105.toByte(),115.toByte(),115.toByte(),105.toByte(),110.toByte(),103.toByte(),46.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),64.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),173.toByte(),115.toByte(),105.toByte(),103.toByte(),110.toByte(),101.toByte(),114.toByte(),65.toByte(),100.toByte(),100.toByte(),114.toByte(),101.toByte(),115.toByte(),115.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),166.toByte(),114.toByte(),101.toByte(),116.toByte(),117.toByte(),114.toByte(),110.toByte(),132.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),34.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),173.toByte(),115.toByte(),105.toByte(),103.toByte(),110.toByte(),101.toByte(),114.toByte(),65.toByte(),100.toByte(),100.toByte(),114.toByte(),101.toByte(),115.toByte(),115.toByte(),166.toByte(),115.toByte(),99.toByte(),97.toByte(),108.toByte(),97.toByte(),114.toByte(),131.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),4.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),173.toByte(),115.toByte(),105.toByte(),103.toByte(),110.toByte(),101.toByte(),114.toByte(),65.toByte(),100.toByte(),100.toByte(),114.toByte(),101.toByte(),115.toByte(),115.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),83.toByte(),116.toByte(),114.toByte(),105.toByte(),110.toByte(),103.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),83.toByte(),116.toByte(),114.toByte(),105.toByte(),110.toByte(),103.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),77.toByte(),101.toByte(),116.toByte(),104.toByte(),111.toByte(),100.toByte(),135.toByte(),169.toByte(),97.toByte(),114.toByte(),103.toByte(),117.toByte(),109.toByte(),101.toByte(),110.toByte(),116.toByte(),115.toByte(),146.toByte(),133.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),34.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),167.toByte(),109.toByte(),101.toByte(),115.toByte(),115.toByte(),97.toByte(),103.toByte(),101.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),166.toByte(),115.toByte(),99.toByte(),97.toByte(),108.toByte(),97.toByte(),114.toByte(),132.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),4.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),167.toByte(),109.toByte(),101.toByte(),115.toByte(),115.toByte(),97.toByte(),103.toByte(),101.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),165.toByte(),66.toByte(),121.toByte(),116.toByte(),101.toByte(),115.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),165.toByte(),66.toByte(),121.toByte(),116.toByte(),101.toByte(),115.toByte(),132.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),34.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),170.toByte(),99.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),166.toByte(),111.toByte(),98.toByte(),106.toByte(),101.toByte(),99.toByte(),116.toByte(),131.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),205.toByte(),32.toByte(),0.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),170.toByte(),99.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),170.toByte(),67.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),170.toByte(),67.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),167.toByte(),99.toByte(),111.toByte(),109.toByte(),109.toByte(),101.toByte(),110.toByte(),116.toByte(),217.toByte(),69.toByte(),83.toByte(),105.toByte(),103.toByte(),110.toByte(),32.toByte(),97.toByte(),32.toByte(),109.toByte(),101.toByte(),115.toByte(),115.toByte(),97.toByte(),103.toByte(),101.toByte(),32.toByte(),97.toByte(),110.toByte(),100.toByte(),32.toByte(),114.toByte(),101.toByte(),116.toByte(),117.toByte(),114.toByte(),110.toByte(),32.toByte(),116.toByte(),104.toByte(),101.toByte(),32.toByte(),115.toByte(),105.toByte(),103.toByte(),110.toByte(),97.toByte(),116.toByte(),117.toByte(),114.toByte(),101.toByte(),46.toByte(),32.toByte(),84.toByte(),104.toByte(),114.toByte(),111.toByte(),119.toByte(),115.toByte(),32.toByte(),105.toByte(),102.toByte(),32.toByte(),115.toByte(),105.toByte(),103.toByte(),110.toByte(),101.toByte(),114.toByte(),32.toByte(),105.toByte(),115.toByte(),32.toByte(),109.toByte(),105.toByte(),115.toByte(),115.toByte(),105.toByte(),110.toByte(),103.toByte(),46.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),64.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),171.toByte(),115.toByte(),105.toByte(),103.toByte(),110.toByte(),77.toByte(),101.toByte(),115.toByte(),115.toByte(),97.toByte(),103.toByte(),101.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),166.toByte(),114.toByte(),101.toByte(),116.toByte(),117.toByte(),114.toByte(),110.toByte(),133.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),34.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),171.toByte(),115.toByte(),105.toByte(),103.toByte(),110.toByte(),77.toByte(),101.toByte(),115.toByte(),115.toByte(),97.toByte(),103.toByte(),101.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),166.toByte(),115.toByte(),99.toByte(),97.toByte(),108.toByte(),97.toByte(),114.toByte(),132.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),4.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),171.toByte(),115.toByte(),105.toByte(),103.toByte(),110.toByte(),77.toByte(),101.toByte(),115.toByte(),115.toByte(),97.toByte(),103.toByte(),101.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),83.toByte(),116.toByte(),114.toByte(),105.toByte(),110.toByte(),103.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),83.toByte(),116.toByte(),114.toByte(),105.toByte(),110.toByte(),103.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),77.toByte(),101.toByte(),116.toByte(),104.toByte(),111.toByte(),100.toByte(),135.toByte(),169.toByte(),97.toByte(),114.toByte(),103.toByte(),117.toByte(),109.toByte(),101.toByte(),110.toByte(),116.toByte(),115.toByte(),146.toByte(),133.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),34.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),163.toByte(),114.toByte(),108.toByte(),112.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),166.toByte(),115.toByte(),99.toByte(),97.toByte(),108.toByte(),97.toByte(),114.toByte(),132.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),4.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),163.toByte(),114.toByte(),108.toByte(),112.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),165.toByte(),66.toByte(),121.toByte(),116.toByte(),101.toByte(),115.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),165.toByte(),66.toByte(),121.toByte(),116.toByte(),101.toByte(),115.toByte(),132.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),34.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),170.toByte(),99.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),166.toByte(),111.toByte(),98.toByte(),106.toByte(),101.toByte(),99.toByte(),116.toByte(),131.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),205.toByte(),32.toByte(),0.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),170.toByte(),99.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),170.toByte(),67.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),170.toByte(),67.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),167.toByte(),99.toByte(),111.toByte(),109.toByte(),109.toByte(),101.toByte(),110.toByte(),116.toByte(),218.toByte(),1.toByte(),12.toByte(),32.toByte(),32.toByte(),83.toByte(),105.toByte(),103.toByte(),110.toByte(),32.toByte(),97.toByte(),32.toByte(),115.toByte(),101.toByte(),114.toByte(),105.toByte(),97.toByte(),108.toByte(),105.toByte(),122.toByte(),101.toByte(),100.toByte(),32.toByte(),117.toByte(),110.toByte(),115.toByte(),105.toByte(),103.toByte(),110.toByte(),101.toByte(),100.toByte(),32.toByte(),116.toByte(),114.toByte(),97.toByte(),110.toByte(),115.toByte(),97.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),32.toByte(),97.toByte(),110.toByte(),100.toByte(),32.toByte(),114.toByte(),101.toByte(),116.toByte(),117.toByte(),114.toByte(),110.toByte(),32.toByte(),116.toByte(),104.toByte(),101.toByte(),32.toByte(),115.toByte(),105.toByte(),103.toByte(),110.toByte(),97.toByte(),116.toByte(),117.toByte(),114.toByte(),101.toByte(),46.toByte(),32.toByte(),84.toByte(),104.toByte(),114.toByte(),111.toByte(),119.toByte(),115.toByte(),32.toByte(),105.toByte(),102.toByte(),32.toByte(),115.toByte(),105.toByte(),103.toByte(),110.toByte(),101.toByte(),114.toByte(),32.toByte(),105.toByte(),115.toByte(),32.toByte(),109.toByte(),105.toByte(),115.toByte(),115.toByte(),105.toByte(),110.toByte(),103.toByte(),46.toByte(),10.toByte(),84.toByte(),104.toByte(),105.toByte(),115.toByte(),32.toByte(),109.toByte(),101.toByte(),116.toByte(),104.toByte(),111.toByte(),100.toByte(),32.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),115.toByte(),32.toByte(),97.toByte(),32.toByte(),119.toByte(),97.toByte(),108.toByte(),108.toByte(),101.toByte(),116.toByte(),45.toByte(),98.toByte(),97.toByte(),115.toByte(),101.toByte(),100.toByte(),32.toByte(),115.toByte(),105.toByte(),103.toByte(),110.toByte(),101.toByte(),114.toByte(),32.toByte(),119.toByte(),105.toByte(),116.toByte(),104.toByte(),32.toByte(),97.toByte(),32.toByte(),112.toByte(),114.toByte(),105.toByte(),118.toByte(),97.toByte(),116.toByte(),101.toByte(),32.toByte(),107.toByte(),101.toByte(),121.toByte(),44.toByte(),32.toByte(),97.toByte(),110.toByte(),100.toByte(),32.toByte(),105.toByte(),115.toByte(),32.toByte(),110.toByte(),111.toByte(),116.toByte(),32.toByte(),110.toByte(),101.toByte(),101.toByte(),100.toByte(),101.toByte(),100.toByte(),32.toByte(),102.toByte(),111.toByte(),114.toByte(),32.toByte(),109.toByte(),111.toByte(),115.toByte(),116.toByte(),32.toByte(),117.toByte(),115.toByte(),101.toByte(),32.toByte(),99.toByte(),97.toByte(),115.toByte(),101.toByte(),115.toByte(),46.toByte(),10.toByte(),84.toByte(),121.toByte(),112.toByte(),105.toByte(),99.toByte(),97.toByte(),108.toByte(),108.toByte(),121.toByte(),44.toByte(),32.toByte(),116.toByte(),114.toByte(),97.toByte(),110.toByte(),115.toByte(),97.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),115.toByte(),32.toByte(),97.toByte(),114.toByte(),101.toByte(),32.toByte(),115.toByte(),101.toByte(),110.toByte(),116.toByte(),32.toByte(),98.toByte(),121.toByte(),32.toByte(),96.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),101.toByte(),115.toByte(),116.toByte(),96.toByte(),32.toByte(),97.toByte(),110.toByte(),100.toByte(),32.toByte(),115.toByte(),105.toByte(),103.toByte(),110.toByte(),101.toByte(),100.toByte(),32.toByte(),98.toByte(),121.toByte(),32.toByte(),116.toByte(),104.toByte(),101.toByte(),32.toByte(),119.toByte(),97.toByte(),108.toByte(),108.toByte(),101.toByte(),116.toByte(),46.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),64.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),175.toByte(),115.toByte(),105.toByte(),103.toByte(),110.toByte(),84.toByte(),114.toByte(),97.toByte(),110.toByte(),115.toByte(),97.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),166.toByte(),114.toByte(),101.toByte(),116.toByte(),117.toByte(),114.toByte(),110.toByte(),133.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),34.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),175.toByte(),115.toByte(),105.toByte(),103.toByte(),110.toByte(),84.toByte(),114.toByte(),97.toByte(),110.toByte(),115.toByte(),97.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),166.toByte(),115.toByte(),99.toByte(),97.toByte(),108.toByte(),97.toByte(),114.toByte(),132.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),4.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),175.toByte(),115.toByte(),105.toByte(),103.toByte(),110.toByte(),84.toByte(),114.toByte(),97.toByte(),110.toByte(),115.toByte(),97.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),168.toByte(),114.toByte(),101.toByte(),113.toByte(),117.toByte(),105.toByte(),114.toByte(),101.toByte(),100.toByte(),195.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),83.toByte(),116.toByte(),114.toByte(),105.toByte(),110.toByte(),103.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),83.toByte(),116.toByte(),114.toByte(),105.toByte(),110.toByte(),103.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),77.toByte(),101.toByte(),116.toByte(),104.toByte(),111.toByte(),100.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),77.toByte(),111.toByte(),100.toByte(),117.toByte(),108.toByte(),101.toByte(),171.toByte(),111.toByte(),98.toByte(),106.toByte(),101.toByte(),99.toByte(),116.toByte(),84.toByte(),121.toByte(),112.toByte(),101.toByte(),115.toByte(),145.toByte(),131.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),1.toByte(),170.toByte(),112.toByte(),114.toByte(),111.toByte(),112.toByte(),101.toByte(),114.toByte(),116.toByte(),105.toByte(),101.toByte(),115.toByte(),146.toByte(),132.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),34.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),164.toByte(),110.toByte(),111.toByte(),100.toByte(),101.toByte(),166.toByte(),115.toByte(),99.toByte(),97.toByte(),108.toByte(),97.toByte(),114.toByte(),131.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),4.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),164.toByte(),110.toByte(),111.toByte(),100.toByte(),101.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),83.toByte(),116.toByte(),114.toByte(),105.toByte(),110.toByte(),103.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),83.toByte(),116.toByte(),114.toByte(),105.toByte(),110.toByte(),103.toByte(),132.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),34.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),180.toByte(),110.toByte(),101.toByte(),116.toByte(),119.toByte(),111.toByte(),114.toByte(),107.toByte(),78.toByte(),97.toByte(),109.toByte(),101.toByte(),79.toByte(),114.toByte(),67.toByte(),104.toByte(),97.toByte(),105.toByte(),110.toByte(),73.toByte(),100.toByte(),166.toByte(),115.toByte(),99.toByte(),97.toByte(),108.toByte(),97.toByte(),114.toByte(),131.toByte(),164.toByte(),107.toByte(),105.toByte(),110.toByte(),100.toByte(),4.toByte(),164.toByte(),110.toByte(),97.toByte(),109.toByte(),101.toByte(),180.toByte(),110.toByte(),101.toByte(),116.toByte(),119.toByte(),111.toByte(),114.toByte(),107.toByte(),78.toByte(),97.toByte(),109.toByte(),101.toByte(),79.toByte(),114.toByte(),67.toByte(),104.toByte(),97.toByte(),105.toByte(),110.toByte(),73.toByte(),100.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),83.toByte(),116.toByte(),114.toByte(),105.toByte(),110.toByte(),103.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),166.toByte(),83.toByte(),116.toByte(),114.toByte(),105.toByte(),110.toByte(),103.toByte(),164.toByte(),116.toByte(),121.toByte(),112.toByte(),101.toByte(),170.toByte(),67.toByte(),111.toByte(),110.toByte(),110.toByte(),101.toByte(),99.toByte(),116.toByte(),105.toByte(),111.toByte(),110.toByte(),167.toByte(),118.toByte(),101.toByte(),114.toByte(),115.toByte(),105.toByte(),111.toByte(),110.toByte(),163.toByte(),48.toByte(),46.toByte(),49.toByte() + )).getOrThrow() + ) diff --git a/implementations/kt/src/commonTest/kotlin/Util.kt b/implementations/kt/src/commonTest/kotlin/Util.kt new file mode 100644 index 0000000..65a16e8 --- /dev/null +++ b/implementations/kt/src/commonTest/kotlin/Util.kt @@ -0,0 +1,88 @@ +import io.polywrap.configBuilder.ConfigBuilder +import io.polywrap.core.Invoker +import io.polywrap.plugins.ethereum.KnownNetwork + +val emptyMockInvoker = Invoker(ffiInvoker = ConfigBuilder().build().ffiInvoker) + +val getRpcUri: (KnownNetwork) -> String = { network -> + "https://${network.toInfuraId()}.infura.io/v3/d119148113c047ca90f0311ed729c466" +} + +private val domain = """ +{ + "name": "Ether Mail", + "version": "1", + "chainId": 1, + "verifyingContract": "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC" +} +""".trimIndent() + +private val types = """ +{ + "EIP712Domain": [ + { + "type": "string", + "name": "name" + }, + { + "type": "string", + "name": "version" + }, + { + "type": "uint256", + "name": "chainId" + }, + { + "type": "address", + "name": "verifyingContract" + } + ], + "Person": [ + { + "name": "name", + "type": "string" + }, + { + "name": "wallet", + "type": "address" + } + ], + "Mail": [ + { + "name": "from", + "type": "Person" + }, + { + "name": "to", + "type": "Person" + }, + { + "name": "contents", + "type": "string" + } + ] +} +""".trimIndent() + +private val message = """ +{ + "from": { + "name": "Cow", + "wallet": "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826" + }, + "to": { + "name": "Bob", + "wallet": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB" + }, + "contents": "Hello, Bob!" +} +""".trimIndent() + +val typedDataJsonString = """ +{ + "domain": $domain, + "primaryType": "Mail", + "types": $types, + "message": $message +} +""".trimIndent() diff --git a/implementations/kt/src/commonTest/kotlin/io/polywrap/plugins/ethereum/ConnectionTest.kt b/implementations/kt/src/commonTest/kotlin/io/polywrap/plugins/ethereum/ConnectionTest.kt new file mode 100644 index 0000000..38850af --- /dev/null +++ b/implementations/kt/src/commonTest/kotlin/io/polywrap/plugins/ethereum/ConnectionTest.kt @@ -0,0 +1,69 @@ +package io.polywrap.plugins.ethereum + +import getRpcUri +import kotlinx.coroutines.test.runTest +import org.kethereum.crypto.toAddress +import org.kethereum.rpc.HttpEthereumRPC +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertNotNull + +class ConnectionTest { + + private val ethProvider = HttpEthereumRPC("http://localhost:8545") + private val signerAddress = "0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1".lowercase() + private val testnet = Connection( + provider = ethProvider, + signer = "0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d" + ) + + @Test + fun constructsFromNetwork() { + val connection = Connection.from(KnownNetwork.Mainnet) + assertNotNull(connection) + assertNotNull(connection.provider) + } + + @Test + fun constructsFromNode() { + val connection = Connection.from(getRpcUri(KnownNetwork.Mainnet)) + assertNotNull(connection) + assertNotNull(connection.provider) + } + + @Test + fun getProvider() { + assertNotNull(testnet.provider) + } + + @Test + fun setProvider() = runTest { + val goerliUri = getRpcUri(KnownNetwork.Goerli) + val connection = Connection(goerliUri) + assertEquals( + KnownNetwork.Goerli.chainId, + connection.provider.chainId()?.value?.toLong() + ) + connection.set(ethProvider) + assertEquals( + ethProvider.chainId()?.value?.toLong(), + connection.provider.chainId()?.value?.toLong() + ) + } + + @Test + fun getSigner() = runTest { + val signer = testnet.signer + assertNotNull(signer) + assertEquals(signerAddress, signer.toAddress().hex) + } + + @Test + fun setSigner() = runTest { + val connection = Connection(ethProvider) + connection.set(connection.provider, "0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d") + val signer = connection.signer + assertNotNull(signer) + assertEquals(signerAddress, signer.toAddress().hex) + } +} diff --git a/implementations/kt/src/commonTest/kotlin/io/polywrap/plugins/ethereum/ConnectionsTest.kt b/implementations/kt/src/commonTest/kotlin/io/polywrap/plugins/ethereum/ConnectionsTest.kt new file mode 100644 index 0000000..884dc58 --- /dev/null +++ b/implementations/kt/src/commonTest/kotlin/io/polywrap/plugins/ethereum/ConnectionsTest.kt @@ -0,0 +1,70 @@ +package io.polywrap.plugins.ethereum + +import getRpcUri +import org.kethereum.rpc.HttpEthereumRPC +import kotlin.test.BeforeTest +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertNull + +class ConnectionsTest { + private lateinit var connections: Connections + private lateinit var testnet: Connection + private lateinit var goerli: Connection + + @BeforeTest + fun setup() { + testnet = Connection.from(getRpcUri(KnownNetwork.Sepolia)) + goerli = Connection.from(getRpcUri(KnownNetwork.Goerli)) + connections = Connections( + mutableMapOf( + "testnet" to testnet, + "goerli" to goerli + ), + "testnet" + ) + } + + @Test + fun testGet() { + assertEquals(testnet, connections.get("testnet")) + assertEquals(goerli, connections.get("goerli")) + assertEquals(testnet, connections.get()) + assertNull(connections.get("rinkeby")) + } + + @Test + fun testSet() { + assertNull(connections.get("sepolia")) + val sepolia = Connection.from(getRpcUri(KnownNetwork.Sepolia)) + connections.set("sepolia", sepolia) + assertEquals(sepolia, connections.get("sepolia")) + + val goerliUri = getRpcUri(KnownNetwork.Goerli) + connections.set("goerli", goerliUri) + val httpRPC = connections.get("goerli")?.provider as HttpEthereumRPC? + val providerUri = httpRPC?.baseURL + assertEquals(goerliUri, providerUri) + + val ropsten = Connection.from(getRpcUri(KnownNetwork.Goerli)) + connections.set("existingNetwork", ropsten) + assertEquals(ropsten, connections.get("existingNetwork")) + connections.set("existingNetwork", goerli) + assertEquals(goerli, connections.get("existingNetwork")) + } + + @Test + fun testGetDefaultNetwork() { + assertEquals("testnet", connections.getDefaultNetwork()) + } + + @Test + fun testSetDefaultNetwork() { + connections.setDefaultNetwork("goerli") + assertEquals("goerli", connections.getDefaultNetwork()) + + connections.setDefaultNetwork("newDefault", goerli) + assertEquals("newDefault", connections.getDefaultNetwork()) + assertEquals(goerli, connections.get("newDefault")) + } +} diff --git a/implementations/kt/src/commonTest/kotlin/io/polywrap/plugins/ethereum/EthereumWalletPluginIntegrationTest.kt b/implementations/kt/src/commonTest/kotlin/io/polywrap/plugins/ethereum/EthereumWalletPluginIntegrationTest.kt new file mode 100644 index 0000000..258a203 --- /dev/null +++ b/implementations/kt/src/commonTest/kotlin/io/polywrap/plugins/ethereum/EthereumWalletPluginIntegrationTest.kt @@ -0,0 +1,207 @@ +package io.polywrap.plugins.ethereum + +import io.polywrap.configBuilder.polywrapClient +import io.polywrap.core.InvokeResult +import io.polywrap.core.resolution.Uri +import io.polywrap.plugins.ethereum.wrap.* +import kotlinx.coroutines.test.runTest +import typedDataJsonString +import kotlin.test.* + +class EthereumWalletPluginIntegrationTest { + + private val uri = Uri("wrap://ens/wraps.eth:ethereum-provider@2.0.0") + + private val client = polywrapClient { + setPackage( + uri.toString() to ethereumWalletPlugin( + Connections( + networks = mutableMapOf( + "binance" to Connection( + provider = "https://bsc-dataseed1.binance.org/", + signer = "0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d" + ) + ), + defaultNetwork = "binance" + ) + ) + ) + } + + private val clientWithLocalNodeProvider = polywrapClient { + setPackage( + uri.toString() to ethereumWalletPlugin( + Connections( + networks = mutableMapOf( + "testnet" to Connection( + provider = "http://localhost:8545" + ) + ), + defaultNetwork = "testnet" + ) + ) + ) + } + + @Test + fun `invokeByClient eth_chainId`() = runTest { + val args = ArgsRequest(method = "eth_chainId") + val result: InvokeResult = client.invoke( + uri = uri, + method = "request", + args = args + ) + assertNull(result.exceptionOrNull()) + assertEquals("56", result.getOrThrow()) + } + + @Test + fun `invokeByClient eth_getTransactionCount`() = runTest { + val args = ArgsRequest( + method = "eth_getTransactionCount", + params = "[\"0x3f349bBaFEc1551819B8be1EfEA2fC46cA749aA1\", \"latest\"]" + ) + val result: InvokeResult = client.invoke( + uri = uri, + method = "request", + args = args + ) + assertNull(result.exceptionOrNull()) + assertTrue(result.getOrThrow().toBigInteger() > 0.toBigInteger()) + } + + @Test + fun `invokeByClient signerAddress`() = runTest { + val args = ArgsSignerAddress() + val result: InvokeResult = client.invoke( + uri = uri, + method = "signerAddress", + args = args + ) + assertNull(result.exceptionOrNull()) + val address: String? = result.getOrThrow() + assertNotNull(address) + assertTrue(address.startsWith("0x")) + } + + @Test + fun `invokeByClient signMessage`() = runTest { + val args = ArgsSignMessage(message = "Hello World".encodeToByteArray()) + val result: InvokeResult = client.invoke( + uri = uri, + method = "signMessage", + args = args + ) + assertNull(result.exceptionOrNull()) + assertEquals( + "0xa4708243bf782c6769ed04d83e7192dbcf4fc131aa54fde9d889d8633ae39dab03d7babd2392982dff6bc20177f7d887e27e50848c851320ee89c6c63d18ca761c", + result.getOrThrow() + ) + } + + @Test + fun `invokeByClient signTransaction`() = runTest { + val rlp: ByteArray = intArrayOf(2, 249, 6, 17, 130, 5, 57, 10, 132, 178, 208, 94, 0, 132, 216, 200, 6, 146, 131, 5, 188, 169, 128, 128, 185, 5, 249, 96, 128, 96, 64, 82, 52, 128, 21, 97, 0, 16, 87, 96, 0, 128, 253, 91, 80, 97, 5, 217, 128, 97, 0, 32, 96, 0, 57, 96, 0, 243, 254, 96, 128, 96, 64, 82, 52, 128, 21, 97, 0, 16, 87, 96, 0, 128, 253, 91, 80, 96, 4, 54, 16, 97, 0, 76, 87, 96, 0, 53, 96, 224, 28, 128, 99, 30, 216, 63, 212, 20, 97, 0, 81, 87, 128, 99, 96, 254, 71, 177, 20, 97, 0, 109, 87, 128, 99, 109, 76, 230, 60, 20, 97, 0, 137, 87, 128, 99, 209, 51, 25, 196, 20, 97, 0, 167, 87, 91, 96, 0, 128, 253, 91, 97, 0, 107, 96, 4, 128, 54, 3, 129, 1, 144, 97, 0, 102, 145, 144, 97, 2, 246, 86, 91, 97, 0, 197, 86, 91, 0, 91, 97, 0, 135, 96, 4, 128, 54, 3, 129, 1, 144, 97, 0, 130, 145, 144, 97, 3, 59, 86, 91, 97, 1, 22, 86, 91, 0, 91, 97, 0, 145, 97, 1, 89, 86, 91, 96, 64, 81, 97, 0, 158, 145, 144, 97, 4, 101, 86, 91, 96, 64, 81, 128, 145, 3, 144, 243, 91, 97, 0, 175, 97, 1, 98, 86, 91, 96, 64, 81, 97, 0, 188, 145, 144, 97, 4, 67, 86, 91, 96, 64, 81, 128, 145, 3, 144, 243, 91, 129, 129, 96, 1, 145, 144, 97, 0, 214, 146, 145, 144, 97, 1, 244, 86, 91, 80, 127, 119, 1, 244, 158, 185, 170, 190, 136, 144, 99, 21, 8, 169, 9, 46, 171, 181, 17, 163, 69, 102, 195, 15, 45, 148, 255, 68, 32, 218, 28, 203, 19, 51, 131, 131, 96, 64, 81, 97, 1, 10, 147, 146, 145, 144, 97, 3, 232, 86, 91, 96, 64, 81, 128, 145, 3, 144, 161, 80, 80, 86, 91, 128, 96, 0, 129, 144, 85, 80, 127, 124, 148, 169, 72, 72, 213, 133, 155, 26, 48, 200, 135, 220, 87, 64, 191, 141, 28, 247, 137, 119, 155, 233, 10, 221, 161, 208, 211, 77, 210, 80, 34, 51, 130, 96, 64, 81, 97, 1, 78, 146, 145, 144, 97, 4, 26, 86, 91, 96, 64, 81, 128, 145, 3, 144, 161, 80, 86, 91, 96, 0, 128, 84, 144, 80, 144, 86, 91, 96, 96, 96, 1, 128, 84, 97, 1, 113, 144, 97, 5, 26, 86, 91, 128, 96, 31, 1, 96, 32, 128, 145, 4, 2, 96, 32, 1, 96, 64, 81, 144, 129, 1, 96, 64, 82, 128, 146, 145, 144, 129, 129, 82, 96, 32, 1, 130, 128, 84, 97, 1, 157, 144, 97, 5, 26, 86, 91, 128, 21, 97, 1, 234, 87, 128, 96, 31, 16, 97, 1, 191, 87, 97, 1, 0, 128, 131, 84, 4, 2, 131, 82, 145, 96, 32, 1, 145, 97, 1, 234, 86, 91, 130, 1, 145, 144, 96, 0, 82, 96, 32, 96, 0, 32, 144, 91, 129, 84, 129, 82, 144, 96, 1, 1, 144, 96, 32, 1, 128, 131, 17, 97, 1, 205, 87, 130, 144, 3, 96, 31, 22, 130, 1, 145, 91, 80, 80, 80, 80, 80, 144, 80, 144, 86, 91, 130, 128, 84, 97, 2, 0, 144, 97, 5, 26, 86, 91, 144, 96, 0, 82, 96, 32, 96, 0, 32, 144, 96, 31, 1, 96, 32, 144, 4, 129, 1, 146, 130, 97, 2, 34, 87, 96, 0, 133, 85, 97, 2, 105, 86, 91, 130, 96, 31, 16, 97, 2, 59, 87, 128, 53, 96, 255, 25, 22, 131, 128, 1, 23, 133, 85, 97, 2, 105, 86, 91, 130, 128, 1, 96, 1, 1, 133, 85, 130, 21, 97, 2, 105, 87, 145, 130, 1, 91, 130, 129, 17, 21, 97, 2, 104, 87, 130, 53, 130, 85, 145, 96, 32, 1, 145, 144, 96, 1, 1, 144, 97, 2, 77, 86, 91, 91, 80, 144, 80, 97, 2, 118, 145, 144, 97, 2, 122, 86, 91, 80, 144, 86, 91, 91, 128, 130, 17, 21, 97, 2, 147, 87, 96, 0, 129, 96, 0, 144, 85, 80, 96, 1, 1, 97, 2, 123, 86, 91, 80, 144, 86, 91, 96, 0, 128, 131, 96, 31, 132, 1, 18, 97, 2, 169, 87, 96, 0, 128, 253, 91, 130, 53, 144, 80, 103, 255, 255, 255, 255, 255, 255, 255, 255, 129, 17, 21, 97, 2, 194, 87, 96, 0, 128, 253, 91, 96, 32, 131, 1, 145, 80, 131, 96, 1, 130, 2, 131, 1, 17, 21, 97, 2, 218, 87, 96, 0, 128, 253, 91, 146, 80, 146, 144, 80, 86, 91, 96, 0, 129, 53, 144, 80, 97, 2, 240, 129, 97, 5, 140, 86, 91, 146, 145, 80, 80, 86, 91, 96, 0, 128, 96, 32, 131, 133, 3, 18, 21, 97, 3, 9, 87, 96, 0, 128, 253, 91, 96, 0, 131, 1, 53, 103, 255, 255, 255, 255, 255, 255, 255, 255, 129, 17, 21, 97, 3, 35, 87, 96, 0, 128, 253, 91, 97, 3, 47, 133, 130, 134, 1, 97, 2, 151, 86, 91, 146, 80, 146, 80, 80, 146, 80, 146, 144, 80, 86, 91, 96, 0, 96, 32, 130, 132, 3, 18, 21, 97, 3, 77, 87, 96, 0, 128, 253, 91, 96, 0, 97, 3, 91, 132, 130, 133, 1, 97, 2, 225, 86, 91, 145, 80, 80, 146, 145, 80, 80, 86, 91, 97, 3, 109, 129, 97, 4, 156, 86, 91, 130, 82, 80, 80, 86, 91, 96, 0, 97, 3, 127, 131, 133, 97, 4, 139, 86, 91, 147, 80, 97, 3, 140, 131, 133, 132, 97, 4, 216, 86, 91, 97, 3, 149, 131, 97, 5, 123, 86, 91, 132, 1, 144, 80, 147, 146, 80, 80, 80, 86, 91, 96, 0, 97, 3, 171, 130, 97, 4, 128, 86, 91, 97, 3, 181, 129, 133, 97, 4, 139, 86, 91, 147, 80, 97, 3, 197, 129, 133, 96, 32, 134, 1, 97, 4, 231, 86, 91, 97, 3, 206, 129, 97, 5, 123, 86, 91, 132, 1, 145, 80, 80, 146, 145, 80, 80, 86, 91, 97, 3, 226, 129, 97, 4, 206, 86, 91, 130, 82, 80, 80, 86, 91, 96, 0, 96, 64, 130, 1, 144, 80, 97, 3, 253, 96, 0, 131, 1, 134, 97, 3, 100, 86, 91, 129, 129, 3, 96, 32, 131, 1, 82, 97, 4, 16, 129, 132, 134, 97, 3, 115, 86, 91, 144, 80, 148, 147, 80, 80, 80, 80, 86, 91, 96, 0, 96, 64, 130, 1, 144, 80, 97, 4, 47, 96, 0, 131, 1, 133, 97, 3, 100, 86, 91, 97, 4, 60, 96, 32, 131, 1, 132, 97, 3, 217, 86, 91, 147, 146, 80, 80, 80, 86, 91, 96, 0, 96, 32, 130, 1, 144, 80, 129, 129, 3, 96, 0, 131, 1, 82, 97, 4, 93, 129, 132, 97, 3, 160, 86, 91, 144, 80, 146, 145, 80, 80, 86, 91, 96, 0, 96, 32, 130, 1, 144, 80, 97, 4, 122, 96, 0, 131, 1, 132, 97, 3, 217, 86, 91, 146, 145, 80, 80, 86, 91, 96, 0, 129, 81, 144, 80, 145, 144, 80, 86, 91, 96, 0, 130, 130, 82, 96, 32, 130, 1, 144, 80, 146, 145, 80, 80, 86, 91, 96, 0, 97, 4, 167, 130, 97, 4, 174, 86, 91, 144, 80, 145, 144, 80, 86, 91, 96, 0, 115, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 130, 22, 144, 80, 145, 144, 80, 86, 91, 96, 0, 129, 144, 80, 145, 144, 80, 86, 91, 130, 129, 131, 55, 96, 0, 131, 131, 1, 82, 80, 80, 80, 86, 91, 96, 0, 91, 131, 129, 16, 21, 97, 5, 5, 87, 128, 130, 1, 81, 129, 132, 1, 82, 96, 32, 129, 1, 144, 80, 97, 4, 234, 86, 91, 131, 129, 17, 21, 97, 5, 20, 87, 96, 0, 132, 132, 1, 82, 91, 80, 80, 80, 80, 86, 91, 96, 0, 96, 2, 130, 4, 144, 80, 96, 1, 130, 22, 128, 97, 5, 50, 87, 96, 127, 130, 22, 145, 80, 91, 96, 32, 130, 16, 129, 20, 21, 97, 5, 70, 87, 97, 5, 69, 97, 5, 76, 86, 91, 91, 80, 145, 144, 80, 86, 91, 127, 78, 72, 123, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 82, 96, 34, 96, 4, 82, 96, 36, 96, 0, 253, 91, 96, 0, 96, 31, 25, 96, 31, 131, 1, 22, 144, 80, 145, 144, 80, 86, 91, 97, 5, 149, 129, 97, 4, 206, 86, 91, 129, 20, 97, 5, 160, 87, 96, 0, 128, 253, 91, 80, 86, 254, 162, 100, 105, 112, 102, 115, 88, 34, 18, 32, 196, 241, 124, 254, 77, 106, 146, 63, 127, 224, 120, 183, 164, 55, 55, 91, 34, 3, 91, 123, 87, 239, 122, 43, 220, 8, 107, 220, 27, 225, 92, 53, 100, 115, 111, 108, 99, 67, 0, 8, 3, 0, 51, 192) + .map { it.toByte() } + .toByteArray() + val args = ArgsSignTransaction(rlp = rlp) + val result: InvokeResult = client.invoke( + uri = uri, + method = "signTransaction", + args = args + ) + assertNull(result.exceptionOrNull()) + assertEquals( + "0xeb91a997a865e2e4a48c098ea519666ed7fa5d9922f4e7e9b6838dc18ecfdab03a568682c3f0a4cb6b78ef0f601117a0de9848c089c94c01f782f067404c1eae1b", + result.getOrThrow() + ) + } + + @Test + fun `invokeByClient signTypedData`() = runTest { + val args = ArgsRequest("eth_signTypedData_v4", "[\"0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1\", $typedDataJsonString]") + val result: InvokeResult = client.invoke( + uri = uri, + method = "request", + args = args + ) + assertNull(result.exceptionOrNull()) + assertEquals( + "0x12bdd486cb42c3b3c414bb04253acfe7d402559e7637562987af6bd78508f38623c1cc09880613762cc913d49fd7d3c091be974c0dee83fb233300b6b58727311c", + result.getOrThrow() + ) + } + + @Test + fun `invokeByClient eth_getTransactionCount with local node`() = runTest { + val args = ArgsRequest( + method = "eth_getTransactionCount", + params = "[\"0x3f349bBaFEc1551819B8be1EfEA2fC46cA749aA1\", \"latest\"]" + ) + val result: InvokeResult = clientWithLocalNodeProvider.invoke( + uri = uri, + method = "request", + args = args + ) + assertNull(result.exceptionOrNull()) + assertEquals(0, result.getOrThrow().toBigInteger().toLong()) + } + + @Test + fun `invokeByClient signerAddress with local node`() = runTest { + val args = ArgsSignerAddress() + val result: InvokeResult = clientWithLocalNodeProvider.invoke( + uri = uri, + method = "signerAddress", + args = args + ) + assertNull(result.exceptionOrNull()) + val address: String? = result.getOrThrow() + assertNotNull(address) + assertTrue(address.startsWith("0x")) + } + + @Test + fun `invokeByClient signMessage with local node`() = runTest { + val args = ArgsSignMessage(message = "Hello World".encodeToByteArray()) + val result: InvokeResult = clientWithLocalNodeProvider.invoke( + uri = uri, + method = "signMessage", + args = args + ) + assertNull(result.exceptionOrNull()) + assertEquals( + "0xa4708243bf782c6769ed04d83e7192dbcf4fc131aa54fde9d889d8633ae39dab03d7babd2392982dff6bc20177f7d887e27e50848c851320ee89c6c63d18ca761c", + result.getOrThrow() + ) + } + + @Test + fun `invokeByClient signTransaction with local node`() = runTest { + val rlp: ByteArray = intArrayOf(2, 249, 6, 17, 130, 5, 57, 10, 132, 178, 208, 94, 0, 132, 216, 200, 6, 146, 131, 5, 188, 169, 128, 128, 185, 5, 249, 96, 128, 96, 64, 82, 52, 128, 21, 97, 0, 16, 87, 96, 0, 128, 253, 91, 80, 97, 5, 217, 128, 97, 0, 32, 96, 0, 57, 96, 0, 243, 254, 96, 128, 96, 64, 82, 52, 128, 21, 97, 0, 16, 87, 96, 0, 128, 253, 91, 80, 96, 4, 54, 16, 97, 0, 76, 87, 96, 0, 53, 96, 224, 28, 128, 99, 30, 216, 63, 212, 20, 97, 0, 81, 87, 128, 99, 96, 254, 71, 177, 20, 97, 0, 109, 87, 128, 99, 109, 76, 230, 60, 20, 97, 0, 137, 87, 128, 99, 209, 51, 25, 196, 20, 97, 0, 167, 87, 91, 96, 0, 128, 253, 91, 97, 0, 107, 96, 4, 128, 54, 3, 129, 1, 144, 97, 0, 102, 145, 144, 97, 2, 246, 86, 91, 97, 0, 197, 86, 91, 0, 91, 97, 0, 135, 96, 4, 128, 54, 3, 129, 1, 144, 97, 0, 130, 145, 144, 97, 3, 59, 86, 91, 97, 1, 22, 86, 91, 0, 91, 97, 0, 145, 97, 1, 89, 86, 91, 96, 64, 81, 97, 0, 158, 145, 144, 97, 4, 101, 86, 91, 96, 64, 81, 128, 145, 3, 144, 243, 91, 97, 0, 175, 97, 1, 98, 86, 91, 96, 64, 81, 97, 0, 188, 145, 144, 97, 4, 67, 86, 91, 96, 64, 81, 128, 145, 3, 144, 243, 91, 129, 129, 96, 1, 145, 144, 97, 0, 214, 146, 145, 144, 97, 1, 244, 86, 91, 80, 127, 119, 1, 244, 158, 185, 170, 190, 136, 144, 99, 21, 8, 169, 9, 46, 171, 181, 17, 163, 69, 102, 195, 15, 45, 148, 255, 68, 32, 218, 28, 203, 19, 51, 131, 131, 96, 64, 81, 97, 1, 10, 147, 146, 145, 144, 97, 3, 232, 86, 91, 96, 64, 81, 128, 145, 3, 144, 161, 80, 80, 86, 91, 128, 96, 0, 129, 144, 85, 80, 127, 124, 148, 169, 72, 72, 213, 133, 155, 26, 48, 200, 135, 220, 87, 64, 191, 141, 28, 247, 137, 119, 155, 233, 10, 221, 161, 208, 211, 77, 210, 80, 34, 51, 130, 96, 64, 81, 97, 1, 78, 146, 145, 144, 97, 4, 26, 86, 91, 96, 64, 81, 128, 145, 3, 144, 161, 80, 86, 91, 96, 0, 128, 84, 144, 80, 144, 86, 91, 96, 96, 96, 1, 128, 84, 97, 1, 113, 144, 97, 5, 26, 86, 91, 128, 96, 31, 1, 96, 32, 128, 145, 4, 2, 96, 32, 1, 96, 64, 81, 144, 129, 1, 96, 64, 82, 128, 146, 145, 144, 129, 129, 82, 96, 32, 1, 130, 128, 84, 97, 1, 157, 144, 97, 5, 26, 86, 91, 128, 21, 97, 1, 234, 87, 128, 96, 31, 16, 97, 1, 191, 87, 97, 1, 0, 128, 131, 84, 4, 2, 131, 82, 145, 96, 32, 1, 145, 97, 1, 234, 86, 91, 130, 1, 145, 144, 96, 0, 82, 96, 32, 96, 0, 32, 144, 91, 129, 84, 129, 82, 144, 96, 1, 1, 144, 96, 32, 1, 128, 131, 17, 97, 1, 205, 87, 130, 144, 3, 96, 31, 22, 130, 1, 145, 91, 80, 80, 80, 80, 80, 144, 80, 144, 86, 91, 130, 128, 84, 97, 2, 0, 144, 97, 5, 26, 86, 91, 144, 96, 0, 82, 96, 32, 96, 0, 32, 144, 96, 31, 1, 96, 32, 144, 4, 129, 1, 146, 130, 97, 2, 34, 87, 96, 0, 133, 85, 97, 2, 105, 86, 91, 130, 96, 31, 16, 97, 2, 59, 87, 128, 53, 96, 255, 25, 22, 131, 128, 1, 23, 133, 85, 97, 2, 105, 86, 91, 130, 128, 1, 96, 1, 1, 133, 85, 130, 21, 97, 2, 105, 87, 145, 130, 1, 91, 130, 129, 17, 21, 97, 2, 104, 87, 130, 53, 130, 85, 145, 96, 32, 1, 145, 144, 96, 1, 1, 144, 97, 2, 77, 86, 91, 91, 80, 144, 80, 97, 2, 118, 145, 144, 97, 2, 122, 86, 91, 80, 144, 86, 91, 91, 128, 130, 17, 21, 97, 2, 147, 87, 96, 0, 129, 96, 0, 144, 85, 80, 96, 1, 1, 97, 2, 123, 86, 91, 80, 144, 86, 91, 96, 0, 128, 131, 96, 31, 132, 1, 18, 97, 2, 169, 87, 96, 0, 128, 253, 91, 130, 53, 144, 80, 103, 255, 255, 255, 255, 255, 255, 255, 255, 129, 17, 21, 97, 2, 194, 87, 96, 0, 128, 253, 91, 96, 32, 131, 1, 145, 80, 131, 96, 1, 130, 2, 131, 1, 17, 21, 97, 2, 218, 87, 96, 0, 128, 253, 91, 146, 80, 146, 144, 80, 86, 91, 96, 0, 129, 53, 144, 80, 97, 2, 240, 129, 97, 5, 140, 86, 91, 146, 145, 80, 80, 86, 91, 96, 0, 128, 96, 32, 131, 133, 3, 18, 21, 97, 3, 9, 87, 96, 0, 128, 253, 91, 96, 0, 131, 1, 53, 103, 255, 255, 255, 255, 255, 255, 255, 255, 129, 17, 21, 97, 3, 35, 87, 96, 0, 128, 253, 91, 97, 3, 47, 133, 130, 134, 1, 97, 2, 151, 86, 91, 146, 80, 146, 80, 80, 146, 80, 146, 144, 80, 86, 91, 96, 0, 96, 32, 130, 132, 3, 18, 21, 97, 3, 77, 87, 96, 0, 128, 253, 91, 96, 0, 97, 3, 91, 132, 130, 133, 1, 97, 2, 225, 86, 91, 145, 80, 80, 146, 145, 80, 80, 86, 91, 97, 3, 109, 129, 97, 4, 156, 86, 91, 130, 82, 80, 80, 86, 91, 96, 0, 97, 3, 127, 131, 133, 97, 4, 139, 86, 91, 147, 80, 97, 3, 140, 131, 133, 132, 97, 4, 216, 86, 91, 97, 3, 149, 131, 97, 5, 123, 86, 91, 132, 1, 144, 80, 147, 146, 80, 80, 80, 86, 91, 96, 0, 97, 3, 171, 130, 97, 4, 128, 86, 91, 97, 3, 181, 129, 133, 97, 4, 139, 86, 91, 147, 80, 97, 3, 197, 129, 133, 96, 32, 134, 1, 97, 4, 231, 86, 91, 97, 3, 206, 129, 97, 5, 123, 86, 91, 132, 1, 145, 80, 80, 146, 145, 80, 80, 86, 91, 97, 3, 226, 129, 97, 4, 206, 86, 91, 130, 82, 80, 80, 86, 91, 96, 0, 96, 64, 130, 1, 144, 80, 97, 3, 253, 96, 0, 131, 1, 134, 97, 3, 100, 86, 91, 129, 129, 3, 96, 32, 131, 1, 82, 97, 4, 16, 129, 132, 134, 97, 3, 115, 86, 91, 144, 80, 148, 147, 80, 80, 80, 80, 86, 91, 96, 0, 96, 64, 130, 1, 144, 80, 97, 4, 47, 96, 0, 131, 1, 133, 97, 3, 100, 86, 91, 97, 4, 60, 96, 32, 131, 1, 132, 97, 3, 217, 86, 91, 147, 146, 80, 80, 80, 86, 91, 96, 0, 96, 32, 130, 1, 144, 80, 129, 129, 3, 96, 0, 131, 1, 82, 97, 4, 93, 129, 132, 97, 3, 160, 86, 91, 144, 80, 146, 145, 80, 80, 86, 91, 96, 0, 96, 32, 130, 1, 144, 80, 97, 4, 122, 96, 0, 131, 1, 132, 97, 3, 217, 86, 91, 146, 145, 80, 80, 86, 91, 96, 0, 129, 81, 144, 80, 145, 144, 80, 86, 91, 96, 0, 130, 130, 82, 96, 32, 130, 1, 144, 80, 146, 145, 80, 80, 86, 91, 96, 0, 97, 4, 167, 130, 97, 4, 174, 86, 91, 144, 80, 145, 144, 80, 86, 91, 96, 0, 115, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 130, 22, 144, 80, 145, 144, 80, 86, 91, 96, 0, 129, 144, 80, 145, 144, 80, 86, 91, 130, 129, 131, 55, 96, 0, 131, 131, 1, 82, 80, 80, 80, 86, 91, 96, 0, 91, 131, 129, 16, 21, 97, 5, 5, 87, 128, 130, 1, 81, 129, 132, 1, 82, 96, 32, 129, 1, 144, 80, 97, 4, 234, 86, 91, 131, 129, 17, 21, 97, 5, 20, 87, 96, 0, 132, 132, 1, 82, 91, 80, 80, 80, 80, 86, 91, 96, 0, 96, 2, 130, 4, 144, 80, 96, 1, 130, 22, 128, 97, 5, 50, 87, 96, 127, 130, 22, 145, 80, 91, 96, 32, 130, 16, 129, 20, 21, 97, 5, 70, 87, 97, 5, 69, 97, 5, 76, 86, 91, 91, 80, 145, 144, 80, 86, 91, 127, 78, 72, 123, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 82, 96, 34, 96, 4, 82, 96, 36, 96, 0, 253, 91, 96, 0, 96, 31, 25, 96, 31, 131, 1, 22, 144, 80, 145, 144, 80, 86, 91, 97, 5, 149, 129, 97, 4, 206, 86, 91, 129, 20, 97, 5, 160, 87, 96, 0, 128, 253, 91, 80, 86, 254, 162, 100, 105, 112, 102, 115, 88, 34, 18, 32, 196, 241, 124, 254, 77, 106, 146, 63, 127, 224, 120, 183, 164, 55, 55, 91, 34, 3, 91, 123, 87, 239, 122, 43, 220, 8, 107, 220, 27, 225, 92, 53, 100, 115, 111, 108, 99, 67, 0, 8, 3, 0, 51, 192) + .map { it.toByte() } + .toByteArray() + val args = ArgsSignTransaction(rlp = rlp) + val result: InvokeResult = clientWithLocalNodeProvider.invoke( + uri = uri, + method = "signTransaction", + args = args + ) + assertTrue(result.exceptionOrNull()?.message?.contains("No wallet configured for connection") == true) + } + + @Test + fun `invokeByClient signTypedData with local node`() = runTest { + val args = ArgsRequest("eth_signTypedData_v4", "[\"0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1\", $typedDataJsonString]") + val result: InvokeResult = clientWithLocalNodeProvider.invoke( + uri = uri, + method = "request", + args = args + ) + assertNull(result.exceptionOrNull()) + assertEquals( + "0x12bdd486cb42c3b3c414bb04253acfe7d402559e7637562987af6bd78508f38623c1cc09880613762cc913d49fd7d3c091be974c0dee83fb233300b6b58727311c", + result.getOrThrow() + ) + } +} diff --git a/implementations/kt/src/commonTest/kotlin/io/polywrap/plugins/ethereum/EthereumWalletPluginTest.kt b/implementations/kt/src/commonTest/kotlin/io/polywrap/plugins/ethereum/EthereumWalletPluginTest.kt new file mode 100644 index 0000000..92112b0 --- /dev/null +++ b/implementations/kt/src/commonTest/kotlin/io/polywrap/plugins/ethereum/EthereumWalletPluginTest.kt @@ -0,0 +1,146 @@ +package io.polywrap.plugins.ethereum + +import emptyMockInvoker +import io.polywrap.plugins.ethereum.wrap.ArgsRequest +import io.polywrap.plugins.ethereum.wrap.ArgsSignMessage +import io.polywrap.plugins.ethereum.wrap.ArgsSignTransaction +import io.polywrap.plugins.ethereum.wrap.ArgsSignerAddress +import kotlinx.coroutines.test.runTest +import typedDataJsonString +import kotlin.test.* + +class EthereumWalletPluginTest { + + private val plugin = EthereumWalletPlugin( + Connections( + networks = mutableMapOf( + "binance" to Connection( + provider = "https://bsc-dataseed1.binance.org/", + signer = "0x4f3edf983ac636a65a842ce7c78d9aa706d3b113bce9c46f30d7d21715b23b1d" + ) + ), + defaultNetwork = "binance" + ) + ) + + private val pluginWithLocalNodeProvider = EthereumWalletPlugin( + Connections( + networks = mutableMapOf( + "testnet" to Connection( + provider = "http://localhost:8545" + ) + ), + defaultNetwork = "testnet" + ) + ) + + @Test + fun eth_chainId() = runTest { + val args = ArgsRequest(method = "eth_chainId") + val response = plugin.request(args, emptyMockInvoker) + assertEquals("56", response) + } + + @Test + fun eth_getTransactionCount() = runTest { + val args = ArgsRequest( + method = "eth_getTransactionCount", + params = "[\"0x3f349bBaFEc1551819B8be1EfEA2fC46cA749aA1\", \"latest\"]" + ) + val response = plugin.request(args, emptyMockInvoker) + assertTrue(response.toBigInteger() > 0.toBigInteger()) + } + + @Test + fun signerAddress() = runTest { + val args = ArgsSignerAddress() + val response = plugin.signerAddress(args, emptyMockInvoker) + assertNotNull(response) + assertTrue(response.startsWith("0x")) + assertTrue(response.length == 42) + } + + @Test + fun signMessage() = runTest { + val args = ArgsSignMessage(message = "Hello World".encodeToByteArray()) + val response = plugin.signMessage(args, emptyMockInvoker) + assertEquals( + "0xa4708243bf782c6769ed04d83e7192dbcf4fc131aa54fde9d889d8633ae39dab03d7babd2392982dff6bc20177f7d887e27e50848c851320ee89c6c63d18ca761c", + response + ) + } + + @Test + fun signTransaction() = runTest { + val rlp: ByteArray = intArrayOf(2, 249, 6, 17, 130, 5, 57, 10, 132, 178, 208, 94, 0, 132, 216, 200, 6, 146, 131, 5, 188, 169, 128, 128, 185, 5, 249, 96, 128, 96, 64, 82, 52, 128, 21, 97, 0, 16, 87, 96, 0, 128, 253, 91, 80, 97, 5, 217, 128, 97, 0, 32, 96, 0, 57, 96, 0, 243, 254, 96, 128, 96, 64, 82, 52, 128, 21, 97, 0, 16, 87, 96, 0, 128, 253, 91, 80, 96, 4, 54, 16, 97, 0, 76, 87, 96, 0, 53, 96, 224, 28, 128, 99, 30, 216, 63, 212, 20, 97, 0, 81, 87, 128, 99, 96, 254, 71, 177, 20, 97, 0, 109, 87, 128, 99, 109, 76, 230, 60, 20, 97, 0, 137, 87, 128, 99, 209, 51, 25, 196, 20, 97, 0, 167, 87, 91, 96, 0, 128, 253, 91, 97, 0, 107, 96, 4, 128, 54, 3, 129, 1, 144, 97, 0, 102, 145, 144, 97, 2, 246, 86, 91, 97, 0, 197, 86, 91, 0, 91, 97, 0, 135, 96, 4, 128, 54, 3, 129, 1, 144, 97, 0, 130, 145, 144, 97, 3, 59, 86, 91, 97, 1, 22, 86, 91, 0, 91, 97, 0, 145, 97, 1, 89, 86, 91, 96, 64, 81, 97, 0, 158, 145, 144, 97, 4, 101, 86, 91, 96, 64, 81, 128, 145, 3, 144, 243, 91, 97, 0, 175, 97, 1, 98, 86, 91, 96, 64, 81, 97, 0, 188, 145, 144, 97, 4, 67, 86, 91, 96, 64, 81, 128, 145, 3, 144, 243, 91, 129, 129, 96, 1, 145, 144, 97, 0, 214, 146, 145, 144, 97, 1, 244, 86, 91, 80, 127, 119, 1, 244, 158, 185, 170, 190, 136, 144, 99, 21, 8, 169, 9, 46, 171, 181, 17, 163, 69, 102, 195, 15, 45, 148, 255, 68, 32, 218, 28, 203, 19, 51, 131, 131, 96, 64, 81, 97, 1, 10, 147, 146, 145, 144, 97, 3, 232, 86, 91, 96, 64, 81, 128, 145, 3, 144, 161, 80, 80, 86, 91, 128, 96, 0, 129, 144, 85, 80, 127, 124, 148, 169, 72, 72, 213, 133, 155, 26, 48, 200, 135, 220, 87, 64, 191, 141, 28, 247, 137, 119, 155, 233, 10, 221, 161, 208, 211, 77, 210, 80, 34, 51, 130, 96, 64, 81, 97, 1, 78, 146, 145, 144, 97, 4, 26, 86, 91, 96, 64, 81, 128, 145, 3, 144, 161, 80, 86, 91, 96, 0, 128, 84, 144, 80, 144, 86, 91, 96, 96, 96, 1, 128, 84, 97, 1, 113, 144, 97, 5, 26, 86, 91, 128, 96, 31, 1, 96, 32, 128, 145, 4, 2, 96, 32, 1, 96, 64, 81, 144, 129, 1, 96, 64, 82, 128, 146, 145, 144, 129, 129, 82, 96, 32, 1, 130, 128, 84, 97, 1, 157, 144, 97, 5, 26, 86, 91, 128, 21, 97, 1, 234, 87, 128, 96, 31, 16, 97, 1, 191, 87, 97, 1, 0, 128, 131, 84, 4, 2, 131, 82, 145, 96, 32, 1, 145, 97, 1, 234, 86, 91, 130, 1, 145, 144, 96, 0, 82, 96, 32, 96, 0, 32, 144, 91, 129, 84, 129, 82, 144, 96, 1, 1, 144, 96, 32, 1, 128, 131, 17, 97, 1, 205, 87, 130, 144, 3, 96, 31, 22, 130, 1, 145, 91, 80, 80, 80, 80, 80, 144, 80, 144, 86, 91, 130, 128, 84, 97, 2, 0, 144, 97, 5, 26, 86, 91, 144, 96, 0, 82, 96, 32, 96, 0, 32, 144, 96, 31, 1, 96, 32, 144, 4, 129, 1, 146, 130, 97, 2, 34, 87, 96, 0, 133, 85, 97, 2, 105, 86, 91, 130, 96, 31, 16, 97, 2, 59, 87, 128, 53, 96, 255, 25, 22, 131, 128, 1, 23, 133, 85, 97, 2, 105, 86, 91, 130, 128, 1, 96, 1, 1, 133, 85, 130, 21, 97, 2, 105, 87, 145, 130, 1, 91, 130, 129, 17, 21, 97, 2, 104, 87, 130, 53, 130, 85, 145, 96, 32, 1, 145, 144, 96, 1, 1, 144, 97, 2, 77, 86, 91, 91, 80, 144, 80, 97, 2, 118, 145, 144, 97, 2, 122, 86, 91, 80, 144, 86, 91, 91, 128, 130, 17, 21, 97, 2, 147, 87, 96, 0, 129, 96, 0, 144, 85, 80, 96, 1, 1, 97, 2, 123, 86, 91, 80, 144, 86, 91, 96, 0, 128, 131, 96, 31, 132, 1, 18, 97, 2, 169, 87, 96, 0, 128, 253, 91, 130, 53, 144, 80, 103, 255, 255, 255, 255, 255, 255, 255, 255, 129, 17, 21, 97, 2, 194, 87, 96, 0, 128, 253, 91, 96, 32, 131, 1, 145, 80, 131, 96, 1, 130, 2, 131, 1, 17, 21, 97, 2, 218, 87, 96, 0, 128, 253, 91, 146, 80, 146, 144, 80, 86, 91, 96, 0, 129, 53, 144, 80, 97, 2, 240, 129, 97, 5, 140, 86, 91, 146, 145, 80, 80, 86, 91, 96, 0, 128, 96, 32, 131, 133, 3, 18, 21, 97, 3, 9, 87, 96, 0, 128, 253, 91, 96, 0, 131, 1, 53, 103, 255, 255, 255, 255, 255, 255, 255, 255, 129, 17, 21, 97, 3, 35, 87, 96, 0, 128, 253, 91, 97, 3, 47, 133, 130, 134, 1, 97, 2, 151, 86, 91, 146, 80, 146, 80, 80, 146, 80, 146, 144, 80, 86, 91, 96, 0, 96, 32, 130, 132, 3, 18, 21, 97, 3, 77, 87, 96, 0, 128, 253, 91, 96, 0, 97, 3, 91, 132, 130, 133, 1, 97, 2, 225, 86, 91, 145, 80, 80, 146, 145, 80, 80, 86, 91, 97, 3, 109, 129, 97, 4, 156, 86, 91, 130, 82, 80, 80, 86, 91, 96, 0, 97, 3, 127, 131, 133, 97, 4, 139, 86, 91, 147, 80, 97, 3, 140, 131, 133, 132, 97, 4, 216, 86, 91, 97, 3, 149, 131, 97, 5, 123, 86, 91, 132, 1, 144, 80, 147, 146, 80, 80, 80, 86, 91, 96, 0, 97, 3, 171, 130, 97, 4, 128, 86, 91, 97, 3, 181, 129, 133, 97, 4, 139, 86, 91, 147, 80, 97, 3, 197, 129, 133, 96, 32, 134, 1, 97, 4, 231, 86, 91, 97, 3, 206, 129, 97, 5, 123, 86, 91, 132, 1, 145, 80, 80, 146, 145, 80, 80, 86, 91, 97, 3, 226, 129, 97, 4, 206, 86, 91, 130, 82, 80, 80, 86, 91, 96, 0, 96, 64, 130, 1, 144, 80, 97, 3, 253, 96, 0, 131, 1, 134, 97, 3, 100, 86, 91, 129, 129, 3, 96, 32, 131, 1, 82, 97, 4, 16, 129, 132, 134, 97, 3, 115, 86, 91, 144, 80, 148, 147, 80, 80, 80, 80, 86, 91, 96, 0, 96, 64, 130, 1, 144, 80, 97, 4, 47, 96, 0, 131, 1, 133, 97, 3, 100, 86, 91, 97, 4, 60, 96, 32, 131, 1, 132, 97, 3, 217, 86, 91, 147, 146, 80, 80, 80, 86, 91, 96, 0, 96, 32, 130, 1, 144, 80, 129, 129, 3, 96, 0, 131, 1, 82, 97, 4, 93, 129, 132, 97, 3, 160, 86, 91, 144, 80, 146, 145, 80, 80, 86, 91, 96, 0, 96, 32, 130, 1, 144, 80, 97, 4, 122, 96, 0, 131, 1, 132, 97, 3, 217, 86, 91, 146, 145, 80, 80, 86, 91, 96, 0, 129, 81, 144, 80, 145, 144, 80, 86, 91, 96, 0, 130, 130, 82, 96, 32, 130, 1, 144, 80, 146, 145, 80, 80, 86, 91, 96, 0, 97, 4, 167, 130, 97, 4, 174, 86, 91, 144, 80, 145, 144, 80, 86, 91, 96, 0, 115, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 130, 22, 144, 80, 145, 144, 80, 86, 91, 96, 0, 129, 144, 80, 145, 144, 80, 86, 91, 130, 129, 131, 55, 96, 0, 131, 131, 1, 82, 80, 80, 80, 86, 91, 96, 0, 91, 131, 129, 16, 21, 97, 5, 5, 87, 128, 130, 1, 81, 129, 132, 1, 82, 96, 32, 129, 1, 144, 80, 97, 4, 234, 86, 91, 131, 129, 17, 21, 97, 5, 20, 87, 96, 0, 132, 132, 1, 82, 91, 80, 80, 80, 80, 86, 91, 96, 0, 96, 2, 130, 4, 144, 80, 96, 1, 130, 22, 128, 97, 5, 50, 87, 96, 127, 130, 22, 145, 80, 91, 96, 32, 130, 16, 129, 20, 21, 97, 5, 70, 87, 97, 5, 69, 97, 5, 76, 86, 91, 91, 80, 145, 144, 80, 86, 91, 127, 78, 72, 123, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 82, 96, 34, 96, 4, 82, 96, 36, 96, 0, 253, 91, 96, 0, 96, 31, 25, 96, 31, 131, 1, 22, 144, 80, 145, 144, 80, 86, 91, 97, 5, 149, 129, 97, 4, 206, 86, 91, 129, 20, 97, 5, 160, 87, 96, 0, 128, 253, 91, 80, 86, 254, 162, 100, 105, 112, 102, 115, 88, 34, 18, 32, 196, 241, 124, 254, 77, 106, 146, 63, 127, 224, 120, 183, 164, 55, 55, 91, 34, 3, 91, 123, 87, 239, 122, 43, 220, 8, 107, 220, 27, 225, 92, 53, 100, 115, 111, 108, 99, 67, 0, 8, 3, 0, 51, 192) + .map { it.toByte() } + .toByteArray() + val args = ArgsSignTransaction(rlp = rlp) + val response = plugin.signTransaction(args, emptyMockInvoker) + assertEquals( + "0xeb91a997a865e2e4a48c098ea519666ed7fa5d9922f4e7e9b6838dc18ecfdab03a568682c3f0a4cb6b78ef0f601117a0de9848c089c94c01f782f067404c1eae1b", + response + ) + } + + @Test + fun signTypedData() = runTest { + val args = ArgsRequest("eth_signTypedData_v4", "[\"0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1\", $typedDataJsonString]") + val response = plugin.request(args, emptyMockInvoker) + assertEquals( + "0x12bdd486cb42c3b3c414bb04253acfe7d402559e7637562987af6bd78508f38623c1cc09880613762cc913d49fd7d3c091be974c0dee83fb233300b6b58727311c", + response + ) + } + + @Test + fun `eth_getTransactionCount with local node`() = runTest { + val args = ArgsRequest( + method = "eth_getTransactionCount", + params = "[\"0x3f349bBaFEc1551819B8be1EfEA2fC46cA749aA1\", \"latest\"]" + ) + val response = plugin.request(args, emptyMockInvoker) + assertTrue(response.toBigInteger() > 0.toBigInteger()) + } + + @Test + fun `signerAddress with local node`() = runTest { + val args = ArgsSignerAddress() + val response = pluginWithLocalNodeProvider.signerAddress(args, emptyMockInvoker) + assertNotNull(response) + assertTrue(response.startsWith("0x")) + } + + @Test + fun `signMessage with local node`() = runTest { + val args = ArgsSignMessage(message = "Hello World".encodeToByteArray()) + val response = pluginWithLocalNodeProvider.signMessage(args, emptyMockInvoker) + assertEquals( + "0xa4708243bf782c6769ed04d83e7192dbcf4fc131aa54fde9d889d8633ae39dab03d7babd2392982dff6bc20177f7d887e27e50848c851320ee89c6c63d18ca761c", + response + ) + } + + @Test + fun `signTransaction with local node`() = runTest { + val rlp: ByteArray = intArrayOf(2, 249, 6, 17, 130, 5, 57, 10, 132, 178, 208, 94, 0, 132, 216, 200, 6, 146, 131, 5, 188, 169, 128, 128, 185, 5, 249, 96, 128, 96, 64, 82, 52, 128, 21, 97, 0, 16, 87, 96, 0, 128, 253, 91, 80, 97, 5, 217, 128, 97, 0, 32, 96, 0, 57, 96, 0, 243, 254, 96, 128, 96, 64, 82, 52, 128, 21, 97, 0, 16, 87, 96, 0, 128, 253, 91, 80, 96, 4, 54, 16, 97, 0, 76, 87, 96, 0, 53, 96, 224, 28, 128, 99, 30, 216, 63, 212, 20, 97, 0, 81, 87, 128, 99, 96, 254, 71, 177, 20, 97, 0, 109, 87, 128, 99, 109, 76, 230, 60, 20, 97, 0, 137, 87, 128, 99, 209, 51, 25, 196, 20, 97, 0, 167, 87, 91, 96, 0, 128, 253, 91, 97, 0, 107, 96, 4, 128, 54, 3, 129, 1, 144, 97, 0, 102, 145, 144, 97, 2, 246, 86, 91, 97, 0, 197, 86, 91, 0, 91, 97, 0, 135, 96, 4, 128, 54, 3, 129, 1, 144, 97, 0, 130, 145, 144, 97, 3, 59, 86, 91, 97, 1, 22, 86, 91, 0, 91, 97, 0, 145, 97, 1, 89, 86, 91, 96, 64, 81, 97, 0, 158, 145, 144, 97, 4, 101, 86, 91, 96, 64, 81, 128, 145, 3, 144, 243, 91, 97, 0, 175, 97, 1, 98, 86, 91, 96, 64, 81, 97, 0, 188, 145, 144, 97, 4, 67, 86, 91, 96, 64, 81, 128, 145, 3, 144, 243, 91, 129, 129, 96, 1, 145, 144, 97, 0, 214, 146, 145, 144, 97, 1, 244, 86, 91, 80, 127, 119, 1, 244, 158, 185, 170, 190, 136, 144, 99, 21, 8, 169, 9, 46, 171, 181, 17, 163, 69, 102, 195, 15, 45, 148, 255, 68, 32, 218, 28, 203, 19, 51, 131, 131, 96, 64, 81, 97, 1, 10, 147, 146, 145, 144, 97, 3, 232, 86, 91, 96, 64, 81, 128, 145, 3, 144, 161, 80, 80, 86, 91, 128, 96, 0, 129, 144, 85, 80, 127, 124, 148, 169, 72, 72, 213, 133, 155, 26, 48, 200, 135, 220, 87, 64, 191, 141, 28, 247, 137, 119, 155, 233, 10, 221, 161, 208, 211, 77, 210, 80, 34, 51, 130, 96, 64, 81, 97, 1, 78, 146, 145, 144, 97, 4, 26, 86, 91, 96, 64, 81, 128, 145, 3, 144, 161, 80, 86, 91, 96, 0, 128, 84, 144, 80, 144, 86, 91, 96, 96, 96, 1, 128, 84, 97, 1, 113, 144, 97, 5, 26, 86, 91, 128, 96, 31, 1, 96, 32, 128, 145, 4, 2, 96, 32, 1, 96, 64, 81, 144, 129, 1, 96, 64, 82, 128, 146, 145, 144, 129, 129, 82, 96, 32, 1, 130, 128, 84, 97, 1, 157, 144, 97, 5, 26, 86, 91, 128, 21, 97, 1, 234, 87, 128, 96, 31, 16, 97, 1, 191, 87, 97, 1, 0, 128, 131, 84, 4, 2, 131, 82, 145, 96, 32, 1, 145, 97, 1, 234, 86, 91, 130, 1, 145, 144, 96, 0, 82, 96, 32, 96, 0, 32, 144, 91, 129, 84, 129, 82, 144, 96, 1, 1, 144, 96, 32, 1, 128, 131, 17, 97, 1, 205, 87, 130, 144, 3, 96, 31, 22, 130, 1, 145, 91, 80, 80, 80, 80, 80, 144, 80, 144, 86, 91, 130, 128, 84, 97, 2, 0, 144, 97, 5, 26, 86, 91, 144, 96, 0, 82, 96, 32, 96, 0, 32, 144, 96, 31, 1, 96, 32, 144, 4, 129, 1, 146, 130, 97, 2, 34, 87, 96, 0, 133, 85, 97, 2, 105, 86, 91, 130, 96, 31, 16, 97, 2, 59, 87, 128, 53, 96, 255, 25, 22, 131, 128, 1, 23, 133, 85, 97, 2, 105, 86, 91, 130, 128, 1, 96, 1, 1, 133, 85, 130, 21, 97, 2, 105, 87, 145, 130, 1, 91, 130, 129, 17, 21, 97, 2, 104, 87, 130, 53, 130, 85, 145, 96, 32, 1, 145, 144, 96, 1, 1, 144, 97, 2, 77, 86, 91, 91, 80, 144, 80, 97, 2, 118, 145, 144, 97, 2, 122, 86, 91, 80, 144, 86, 91, 91, 128, 130, 17, 21, 97, 2, 147, 87, 96, 0, 129, 96, 0, 144, 85, 80, 96, 1, 1, 97, 2, 123, 86, 91, 80, 144, 86, 91, 96, 0, 128, 131, 96, 31, 132, 1, 18, 97, 2, 169, 87, 96, 0, 128, 253, 91, 130, 53, 144, 80, 103, 255, 255, 255, 255, 255, 255, 255, 255, 129, 17, 21, 97, 2, 194, 87, 96, 0, 128, 253, 91, 96, 32, 131, 1, 145, 80, 131, 96, 1, 130, 2, 131, 1, 17, 21, 97, 2, 218, 87, 96, 0, 128, 253, 91, 146, 80, 146, 144, 80, 86, 91, 96, 0, 129, 53, 144, 80, 97, 2, 240, 129, 97, 5, 140, 86, 91, 146, 145, 80, 80, 86, 91, 96, 0, 128, 96, 32, 131, 133, 3, 18, 21, 97, 3, 9, 87, 96, 0, 128, 253, 91, 96, 0, 131, 1, 53, 103, 255, 255, 255, 255, 255, 255, 255, 255, 129, 17, 21, 97, 3, 35, 87, 96, 0, 128, 253, 91, 97, 3, 47, 133, 130, 134, 1, 97, 2, 151, 86, 91, 146, 80, 146, 80, 80, 146, 80, 146, 144, 80, 86, 91, 96, 0, 96, 32, 130, 132, 3, 18, 21, 97, 3, 77, 87, 96, 0, 128, 253, 91, 96, 0, 97, 3, 91, 132, 130, 133, 1, 97, 2, 225, 86, 91, 145, 80, 80, 146, 145, 80, 80, 86, 91, 97, 3, 109, 129, 97, 4, 156, 86, 91, 130, 82, 80, 80, 86, 91, 96, 0, 97, 3, 127, 131, 133, 97, 4, 139, 86, 91, 147, 80, 97, 3, 140, 131, 133, 132, 97, 4, 216, 86, 91, 97, 3, 149, 131, 97, 5, 123, 86, 91, 132, 1, 144, 80, 147, 146, 80, 80, 80, 86, 91, 96, 0, 97, 3, 171, 130, 97, 4, 128, 86, 91, 97, 3, 181, 129, 133, 97, 4, 139, 86, 91, 147, 80, 97, 3, 197, 129, 133, 96, 32, 134, 1, 97, 4, 231, 86, 91, 97, 3, 206, 129, 97, 5, 123, 86, 91, 132, 1, 145, 80, 80, 146, 145, 80, 80, 86, 91, 97, 3, 226, 129, 97, 4, 206, 86, 91, 130, 82, 80, 80, 86, 91, 96, 0, 96, 64, 130, 1, 144, 80, 97, 3, 253, 96, 0, 131, 1, 134, 97, 3, 100, 86, 91, 129, 129, 3, 96, 32, 131, 1, 82, 97, 4, 16, 129, 132, 134, 97, 3, 115, 86, 91, 144, 80, 148, 147, 80, 80, 80, 80, 86, 91, 96, 0, 96, 64, 130, 1, 144, 80, 97, 4, 47, 96, 0, 131, 1, 133, 97, 3, 100, 86, 91, 97, 4, 60, 96, 32, 131, 1, 132, 97, 3, 217, 86, 91, 147, 146, 80, 80, 80, 86, 91, 96, 0, 96, 32, 130, 1, 144, 80, 129, 129, 3, 96, 0, 131, 1, 82, 97, 4, 93, 129, 132, 97, 3, 160, 86, 91, 144, 80, 146, 145, 80, 80, 86, 91, 96, 0, 96, 32, 130, 1, 144, 80, 97, 4, 122, 96, 0, 131, 1, 132, 97, 3, 217, 86, 91, 146, 145, 80, 80, 86, 91, 96, 0, 129, 81, 144, 80, 145, 144, 80, 86, 91, 96, 0, 130, 130, 82, 96, 32, 130, 1, 144, 80, 146, 145, 80, 80, 86, 91, 96, 0, 97, 4, 167, 130, 97, 4, 174, 86, 91, 144, 80, 145, 144, 80, 86, 91, 96, 0, 115, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 130, 22, 144, 80, 145, 144, 80, 86, 91, 96, 0, 129, 144, 80, 145, 144, 80, 86, 91, 130, 129, 131, 55, 96, 0, 131, 131, 1, 82, 80, 80, 80, 86, 91, 96, 0, 91, 131, 129, 16, 21, 97, 5, 5, 87, 128, 130, 1, 81, 129, 132, 1, 82, 96, 32, 129, 1, 144, 80, 97, 4, 234, 86, 91, 131, 129, 17, 21, 97, 5, 20, 87, 96, 0, 132, 132, 1, 82, 91, 80, 80, 80, 80, 86, 91, 96, 0, 96, 2, 130, 4, 144, 80, 96, 1, 130, 22, 128, 97, 5, 50, 87, 96, 127, 130, 22, 145, 80, 91, 96, 32, 130, 16, 129, 20, 21, 97, 5, 70, 87, 97, 5, 69, 97, 5, 76, 86, 91, 91, 80, 145, 144, 80, 86, 91, 127, 78, 72, 123, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 82, 96, 34, 96, 4, 82, 96, 36, 96, 0, 253, 91, 96, 0, 96, 31, 25, 96, 31, 131, 1, 22, 144, 80, 145, 144, 80, 86, 91, 97, 5, 149, 129, 97, 4, 206, 86, 91, 129, 20, 97, 5, 160, 87, 96, 0, 128, 253, 91, 80, 86, 254, 162, 100, 105, 112, 102, 115, 88, 34, 18, 32, 196, 241, 124, 254, 77, 106, 146, 63, 127, 224, 120, 183, 164, 55, 55, 91, 34, 3, 91, 123, 87, 239, 122, 43, 220, 8, 107, 220, 27, 225, 92, 53, 100, 115, 111, 108, 99, 67, 0, 8, 3, 0, 51, 192) + .map { it.toByte() } + .toByteArray() + val args = ArgsSignTransaction(rlp = rlp) + assertFailsWith("No wallet configured for connection") { + runTest { + pluginWithLocalNodeProvider.signTransaction(args, emptyMockInvoker) + } + } + } + + @Test + fun `signTypedData with local node`() = runTest { + val args = ArgsRequest("eth_signTypedData_v4", "[\"0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1\", $typedDataJsonString]") + val response = pluginWithLocalNodeProvider.request(args, emptyMockInvoker) + assertEquals( + "0x12bdd486cb42c3b3c414bb04253acfe7d402559e7637562987af6bd78508f38623c1cc09880613762cc913d49fd7d3c091be974c0dee83fb233300b6b58727311c", + response + ) + } +} diff --git a/implementations/kt/yarn.lock b/implementations/kt/yarn.lock new file mode 100644 index 0000000..c1e85bc --- /dev/null +++ b/implementations/kt/yarn.lock @@ -0,0 +1,2242 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@apidevtools/json-schema-ref-parser@9.0.9": + version "9.0.9" + resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz#d720f9256e3609621280584f2b47ae165359268b" + integrity sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w== + dependencies: + "@jsdevtools/ono" "^7.1.3" + "@types/json-schema" "^7.0.6" + call-me-maybe "^1.0.1" + js-yaml "^4.1.0" + +"@dorgjelli/graphql-schema-cycles@1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@dorgjelli/graphql-schema-cycles/-/graphql-schema-cycles-1.1.4.tgz#31f230c61f624f7c2ceca7e18fad8b2cb07d392f" + integrity sha512-U5ARitMQWKjOAvwn1+0Z52R9sbNe1wpbgAbj2hOfRFb/vupfPlRwZLbuUZAlotMpkoxbTbk+GRmoiNzGcJfyHw== + dependencies: + graphql "15.5.0" + graphql-json-transform "^1.1.0-alpha.0" + +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.6.1", "@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== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.6.2", "@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== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.6.1", "@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== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.6.1", "@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.6.1", "@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== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.6.2", "@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== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.6.1", "@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.6.1", "@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.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" + integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.6.1", "@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== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.6.2", "@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== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.6.1", "@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== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.6.1", "@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== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.6.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.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.0.tgz#df72a392f1a63a57f87210515695a31a245845ad" + integrity sha512-MG6oHSQHd4ebvJrleEQQ4HhVu8Ichr0RDYEfHzsVAVjHNM+w36x9wp9r+hf1JstMXtseXDtkiVoARAG6M959AA== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/networks@^5.6.3", "@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": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.6.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.6.8": + version "5.6.8" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.6.8.tgz#22e6c57be215ba5545d3a46cf759d265bb4e879d" + integrity sha512-Wf+CseT/iOJjrGtAOf3ck9zS7AgPmr2fZ3N97r4+YXN3mBePTG2/bJ8DApl9mVwYL+RpYbNxMEkEp4mPGdwG/w== + dependencies: + "@ethersproject/abstract-provider" "^5.6.1" + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/address" "^5.6.1" + "@ethersproject/base64" "^5.6.1" + "@ethersproject/basex" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/constants" "^5.6.1" + "@ethersproject/hash" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/networks" "^5.6.3" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/random" "^5.6.1" + "@ethersproject/rlp" "^5.6.1" + "@ethersproject/sha2" "^5.6.1" + "@ethersproject/strings" "^5.6.1" + "@ethersproject/transactions" "^5.6.2" + "@ethersproject/web" "^5.6.1" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/providers@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.0.tgz#a885cfc7650a64385e7b03ac86fe9c2d4a9c2c63" + integrity sha512-+TTrrINMzZ0aXtlwO/95uhAggKm4USLm1PbeCBR/3XZ7+Oey+3pMyddzZEyRhizHpy1HXV0FRWRMI1O3EGYibA== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.6.1", "@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== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.6.1", "@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== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.6.1", "@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== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.6.2", "@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== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/solidity@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.6.1", "@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== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + +"@ethersproject/units@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/wallet@5.6.2": + version "5.6.2" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.6.2.tgz#cd61429d1e934681e413f4bc847a5f2f87e3a03c" + integrity sha512-lrgh0FDQPuOnHcF80Q3gHYsSUODp6aJLAdDmDV0xKCN/T7D99ta1jGVhulg3PY8wiXEngD0DfM0I2XKXlrqJfg== + dependencies: + "@ethersproject/abstract-provider" "^5.6.1" + "@ethersproject/abstract-signer" "^5.6.2" + "@ethersproject/address" "^5.6.1" + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/hash" "^5.6.1" + "@ethersproject/hdnode" "^5.6.2" + "@ethersproject/json-wallets" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/properties" "^5.6.0" + "@ethersproject/random" "^5.6.1" + "@ethersproject/signing-key" "^5.6.2" + "@ethersproject/transactions" "^5.6.2" + "@ethersproject/wordlists" "^5.6.1" + +"@ethersproject/wallet@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" + integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/json-wallets" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/web@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.0.tgz#40850c05260edad8b54827923bbad23d96aac0bc" + integrity sha512-ApHcbbj+muRASVDSCl/tgxaH2LBkRMEYfLOLVa0COipx0+nlu0QKet7U2lEg0vdkh8XRSLf2nd1f1Uk9SrVSGA== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/web@^5.6.1", "@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== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.6.1", "@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== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@fetsorn/opentelemetry-console-exporter@0.0.3": + version "0.0.3" + resolved "https://registry.yarnpkg.com/@fetsorn/opentelemetry-console-exporter/-/opentelemetry-console-exporter-0.0.3.tgz#c137629fecc610c7667e68b528926e498e152c0b" + integrity sha512-+UDrzHANOPcp0+47xK7dqeKIlYSh5a5WpFaswzM9S2MnjQfP0zOysAunWFRb6CFYSj1hTeFotYYXr8tYbyBpoA== + +"@formatjs/ecma402-abstract@1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.6.2.tgz#9d064a2cf790769aa6721e074fb5d5c357084bb9" + integrity sha512-aLBODrSRhHaL/0WdQ0T2UsGqRbdtRRHqqrs4zwNQoRsGBEtEAvlj/rgr6Uea4PSymVJrbZBoAyECM2Z3Pq4i0g== + dependencies: + tslib "^2.1.0" + +"@formatjs/intl-datetimeformat@3.2.12": + version "3.2.12" + resolved "https://registry.yarnpkg.com/@formatjs/intl-datetimeformat/-/intl-datetimeformat-3.2.12.tgz#c9b2e85f0267ee13ea615a8991995da3075e3b13" + integrity sha512-qvY5+dl3vlgH0iWRXwl8CG9UkSVB5uP2+HH//fyZZ01G4Ww5rxMJmia1SbUqatpoe/dX+Z+aLejCqUUyugyL2g== + dependencies: + "@formatjs/ecma402-abstract" "1.6.2" + tslib "^2.1.0" + +"@formatjs/intl-displaynames@4.0.10": + version "4.0.10" + resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-4.0.10.tgz#5bbd1bbcd64a036b4be27798b650c864dcf4466a" + integrity sha512-KmYJQHynGnnMeqIWVXhbzCMcEC8lg1TfGVdcO9May6paDT+dksZoOBQc741t7iXi/YVO/wXEZdmXhUNX7ODZug== + dependencies: + "@formatjs/ecma402-abstract" "1.6.2" + tslib "^2.1.0" + +"@formatjs/intl-listformat@5.0.10": + version "5.0.10" + resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-5.0.10.tgz#9f8c4ad5e8a925240e151ba794c41fba01f742cc" + integrity sha512-FLtrtBPfBoeteRlYcHvThYbSW2YdJTllR0xEnk6cr/6FRArbfPRYMzDpFYlESzb5g8bpQMKZy+kFQ6V2Z+5KaA== + dependencies: + "@formatjs/ecma402-abstract" "1.6.2" + tslib "^2.1.0" + +"@formatjs/intl-relativetimeformat@8.1.2": + version "8.1.2" + resolved "https://registry.yarnpkg.com/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-8.1.2.tgz#119f3dce97458991f86bf34a736880e4a7bc1697" + integrity sha512-LZUxbc9GHVGmDc4sqGAXugoxhvZV7EG2lG2c0aKERup2ixvmDMbbEN3iEEr5aKkP7YyGxXxgqDn2dwg7QCPR6Q== + dependencies: + "@formatjs/ecma402-abstract" "1.6.2" + tslib "^2.1.0" + +"@formatjs/intl@1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-1.8.2.tgz#6090e6c1826a92e70668dfe08b4ba30127ea3a85" + integrity sha512-9xHoNKPv4qQIQ5AVfpQbIPZanz50i7oMtZWrd6Fz7Q2GM/5uhBr9mrCrY1tz/+diP7uguKmhj1IweLYaxY3DTQ== + dependencies: + "@formatjs/ecma402-abstract" "1.6.2" + "@formatjs/intl-datetimeformat" "3.2.12" + "@formatjs/intl-displaynames" "4.0.10" + "@formatjs/intl-listformat" "5.0.10" + "@formatjs/intl-relativetimeformat" "8.1.2" + fast-memoize "^2.5.2" + intl-messageformat "9.5.2" + intl-messageformat-parser "6.4.2" + tslib "^2.1.0" + +"@jsdevtools/ono@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" + integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== + +"@msgpack/msgpack@2.7.2": + version "2.7.2" + resolved "https://registry.yarnpkg.com/@msgpack/msgpack/-/msgpack-2.7.2.tgz#f34b8aa0c49f0dd55eb7eba577081299cbf3f90b" + integrity sha512-rYEi46+gIzufyYUAoHDnRzkWGxajpD9vVXFQ3g1vbjrBm6P7MBmm+s/fqPa46sxa+8FOUdEuRQKaugo5a4JWpw== + +"@opentelemetry/api-metrics@0.32.0": + version "0.32.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api-metrics/-/api-metrics-0.32.0.tgz#0f09f78491a4b301ddf54a8b8a38ffa99981f645" + integrity sha512-g1WLhpG8B6iuDyZJFRGsR+JKyZ94m5LEmY2f+duEJ9Xb4XRlLHrZvh6G34OH6GJ8iDHxfHb/sWjJ1ZpkI9yGMQ== + dependencies: + "@opentelemetry/api" "^1.0.0" + +"@opentelemetry/api@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.2.0.tgz#89ef99401cde6208cff98760b67663726ef26686" + integrity sha512-0nBr+VZNKm9tvNDZFstI3Pq1fCTEDK5OZTnVKNvBNAKgd0yIvmwsP4m61rEv7ZP+tOUjWJhROpxK5MsnlF911g== + +"@opentelemetry/api@^1.0.0": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.4.1.tgz#ff22eb2e5d476fbc2450a196e40dd243cc20c28f" + integrity sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA== + +"@opentelemetry/core@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.6.0.tgz#c55f8ab7496acef7dbd8c4eedef6a4d4a0143c95" + integrity sha512-MsEhsyCTfYme6frK8/AqEWwbS9SB3Ta5bjgz4jPQJjL7ijUM3JiLVvqh/kHo1UlUjbUbLmGG7jA5Nw4d7SMcLQ== + dependencies: + "@opentelemetry/semantic-conventions" "1.6.0" + +"@opentelemetry/exporter-trace-otlp-http@0.32.0": + version "0.32.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.32.0.tgz#55773290a221855c4e8c422e8fb5e7ff4aa5f04e" + integrity sha512-8n44NDoEFoYG3mMToZxNyUKkHSGfzSShw6I2V5FApcH7rid20LmKiNuzc7lACneDIZBld+GGpLRuFhWniW8JhA== + dependencies: + "@opentelemetry/core" "1.6.0" + "@opentelemetry/otlp-exporter-base" "0.32.0" + "@opentelemetry/otlp-transformer" "0.32.0" + "@opentelemetry/resources" "1.6.0" + "@opentelemetry/sdk-trace-base" "1.6.0" + +"@opentelemetry/otlp-exporter-base@0.32.0": + version "0.32.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.32.0.tgz#37dde162835a8fd23fa040f07e2938deb335fc4b" + integrity sha512-Dscxu4VNKrkD1SwGKdc7bAtLViGFJC8ah6Dr/vZn22NFHXSa53lSzDdTKeSTNNWH9sCGu/65LS45VMd4PsRvwQ== + dependencies: + "@opentelemetry/core" "1.6.0" + +"@opentelemetry/otlp-transformer@0.32.0": + version "0.32.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-transformer/-/otlp-transformer-0.32.0.tgz#652c8f4c56c95f7d7ec39e20573b885d27ca13f1" + integrity sha512-PFAqfKgJpTOZryPe1UMm7R578PLxsK0wCAuKSt6m8v1bN/4DO8DX4HD7k3mYGZVU5jNg8tVZSwyIpY6ryrHDMQ== + dependencies: + "@opentelemetry/api-metrics" "0.32.0" + "@opentelemetry/core" "1.6.0" + "@opentelemetry/resources" "1.6.0" + "@opentelemetry/sdk-metrics" "0.32.0" + "@opentelemetry/sdk-trace-base" "1.6.0" + +"@opentelemetry/resources@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.6.0.tgz#9756894131b9b0dfbcc0cecb5d4bd040d9c1b09d" + integrity sha512-07GlHuq72r2rnJugYVdGumviQvfrl8kEPidkZSVoseLVfIjV7nzxxt5/vqs9pK7JItWOrvjRdr/jTBVayFBr/w== + dependencies: + "@opentelemetry/core" "1.6.0" + "@opentelemetry/semantic-conventions" "1.6.0" + +"@opentelemetry/sdk-metrics@0.32.0": + version "0.32.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-0.32.0.tgz#463cd3a2b267f044db9aaab85887a171710345a0" + integrity sha512-zC9RCOIsXRqOHWmWfcxArtDHbip2/jaIH1yu/OKau/shDZYFluAxY6zAEYIb4YEAzKKEF+fpaoRgpodDWNGVGA== + dependencies: + "@opentelemetry/api-metrics" "0.32.0" + "@opentelemetry/core" "1.6.0" + "@opentelemetry/resources" "1.6.0" + lodash.merge "4.6.2" + +"@opentelemetry/sdk-trace-base@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.6.0.tgz#8b1511c0b0f3e6015e345f5ed4a683adf03e3e3c" + integrity sha512-yx/uuzHdT0QNRSEbCgXHc0GONk90uvaFcPGaNowIFSl85rTp4or4uIIMkG7R8ckj8xWjDSjsaztH6yQxoZrl5g== + dependencies: + "@opentelemetry/core" "1.6.0" + "@opentelemetry/resources" "1.6.0" + "@opentelemetry/semantic-conventions" "1.6.0" + +"@opentelemetry/sdk-trace-web@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-web/-/sdk-trace-web-1.6.0.tgz#ef243e3e1102b53bc0afa93c29c18fc7e2f66e52" + integrity sha512-iOgmygvooaZm4Vi6mh5FM7ubj/e+MqDn8cDPCNfk6V8Q2yWj0co8HKWPFo0RoxSLYyPaFnEEXOXWWuE4OTwLKw== + dependencies: + "@opentelemetry/core" "1.6.0" + "@opentelemetry/sdk-trace-base" "1.6.0" + "@opentelemetry/semantic-conventions" "1.6.0" + +"@opentelemetry/semantic-conventions@1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.6.0.tgz#ed410c9eb0070491cff9fe914246ce41f88d6f74" + integrity sha512-aPfcBeLErM/PPiAuAbNFLN5sNbZLc3KZlar27uohllN8Zs6jJbHyJU1y7cMA6W/zuq+thkaG8mujiS+3iD/FWQ== + +"@polywrap/asyncify-js@0.12.0-pre.1": + version "0.12.0-pre.1" + resolved "https://registry.yarnpkg.com/@polywrap/asyncify-js/-/asyncify-js-0.12.0-pre.1.tgz#a09d3a1346315737790c36d8aa00e2d31fd849c5" + integrity sha512-E6OfxaOUrtHgp+3pbr5uJPLeoE9UJU7VXeL37n8ETel7LLjPfSfV7xn2x7iqdhvpJd5S+1daczC/g7espLzfLw== + +"@polywrap/client-config-builder-js@0.12.0-pre.1": + version "0.12.0-pre.1" + resolved "https://registry.yarnpkg.com/@polywrap/client-config-builder-js/-/client-config-builder-js-0.12.0-pre.1.tgz#5fca0bfc216de2978b95bea1fd09b54cf6e40afa" + integrity sha512-fQ+i3VTyGWBM8eKamD2uLBK1l0/nV5C06GiaMpIGhU6yWL3ZcQBffl8OOU/uM0tdgpaNxdNMR/XcNzHjkVySjQ== + dependencies: + "@polywrap/config-bundle-types-js" "0.12.0-pre.1" + "@polywrap/core-js" "0.12.0-pre.1" + "@polywrap/plugin-js" "0.12.0-pre.1" + "@polywrap/sys-config-bundle-js" "0.12.0-pre.1" + "@polywrap/uri-resolver-extensions-js" "0.12.0-pre.1" + "@polywrap/uri-resolvers-js" "0.12.0-pre.1" + "@polywrap/wasm-js" "0.12.0-pre.1" + "@polywrap/web3-config-bundle-js" "0.12.0-pre.1" + +"@polywrap/client-js@0.12.0-pre.1": + version "0.12.0-pre.1" + resolved "https://registry.yarnpkg.com/@polywrap/client-js/-/client-js-0.12.0-pre.1.tgz#1df47c4eef946dc74ed4025e4726377c89b3b70c" + integrity sha512-BlmDn+wJqDsvpr26959vbO0XobPQ8XTb+qaK9bt2Zgqfb6st10KS9H099WFhGXOAGXsUQFi9SqQPjvUjeMoU1A== + dependencies: + "@polywrap/client-config-builder-js" "0.12.0-pre.1" + "@polywrap/core-client-js" "0.12.0-pre.1" + "@polywrap/core-js" "0.12.0-pre.1" + "@polywrap/msgpack-js" "0.12.0-pre.1" + "@polywrap/plugin-js" "0.12.0-pre.1" + "@polywrap/result" "0.12.0-pre.1" + "@polywrap/tracing-js" "0.12.0-pre.1" + "@polywrap/uri-resolver-extensions-js" "0.12.0-pre.1" + "@polywrap/uri-resolvers-js" "0.12.0-pre.1" + "@polywrap/wrap-manifest-types-js" "0.12.0-pre.1" + +"@polywrap/concurrent-plugin-js@~0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@polywrap/concurrent-plugin-js/-/concurrent-plugin-js-0.10.0.tgz#662e49976f75f30632b302d515bd22c7643afc44" + integrity sha512-sc11ffs34ScBHPB9uHFZuTmF8yPtZT81sBpBj7f4MlmrRDxtJS56Y7k/qL6L1xuwsnmeFipi5JGau1CcBaYmJQ== + dependencies: + "@polywrap/core-js" "0.10.0" + "@polywrap/msgpack-js" "0.10.0" + "@polywrap/plugin-js" "0.10.0" + +"@polywrap/config-bundle-types-js@0.12.0-pre.1": + version "0.12.0-pre.1" + resolved "https://registry.yarnpkg.com/@polywrap/config-bundle-types-js/-/config-bundle-types-js-0.12.0-pre.1.tgz#72a389da3f309d9cfef555a1cbd828ecec0dac8d" + integrity sha512-zef/QxM2AmgEWPc3LuKCJwfn2QK0S9uQ83K+MgTiNHp9hoMmdG9ij4MUZDXpnJTyMn0dgREBpDqCHPfTsCbDLw== + dependencies: + "@polywrap/core-js" "0.12.0-pre.1" + +"@polywrap/core-client-js@0.12.0-pre.1": + version "0.12.0-pre.1" + resolved "https://registry.yarnpkg.com/@polywrap/core-client-js/-/core-client-js-0.12.0-pre.1.tgz#9d4962e660ea467a98f4ff000ca1e00245dc305f" + integrity sha512-KQd/NLtdyksBGbnM8tLn+C+lugWaJT9q41nd+XNzbvH+CoDC4mdvZxAzzTusYRzNiHXvxz4/5hb/RfJRT5R2wA== + dependencies: + "@polywrap/core-js" "0.12.0-pre.1" + "@polywrap/msgpack-js" "0.12.0-pre.1" + "@polywrap/result" "0.12.0-pre.1" + "@polywrap/tracing-js" "0.12.0-pre.1" + "@polywrap/wrap-manifest-types-js" "0.12.0-pre.1" + +"@polywrap/core-js@0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@polywrap/core-js/-/core-js-0.10.0.tgz#5ddc31ff47019342659a2208eec05299b072b216" + integrity sha512-fx9LqRFnxAxLOhDK4M+ymrxMnXQbwuNPMLjCk5Ve5CPa9RFms0/Fzvj5ayMLidZSPSt/dLISkbDgW44vfv6wwA== + dependencies: + "@polywrap/result" "0.10.0" + "@polywrap/tracing-js" "0.10.0" + "@polywrap/wrap-manifest-types-js" "0.10.0" + +"@polywrap/core-js@0.10.0-pre.10": + version "0.10.0-pre.10" + resolved "https://registry.yarnpkg.com/@polywrap/core-js/-/core-js-0.10.0-pre.10.tgz#3209dbcd097d3533574f1231c10ef633c2466d5c" + integrity sha512-a/1JtfrHafRh2y0XgK5dNc82gVzjCbXSdKof7ojDghCSRSHUxTw/cJ+pcLrPJhrsTi7VfTM0BFjw3/wC5RutuA== + dependencies: + "@polywrap/result" "0.10.0-pre.10" + "@polywrap/tracing-js" "0.10.0-pre.10" + "@polywrap/wrap-manifest-types-js" "0.10.0-pre.10" + +"@polywrap/core-js@0.10.1", "@polywrap/core-js@~0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@polywrap/core-js/-/core-js-0.10.1.tgz#09405c745f591d5f7ec243db95a61540a05296cb" + integrity sha512-BJpWDikfd/6h64Lf7FKy0g5O3a5OKaL915boni1pHP54wF4xBWdHkKixLGD8w4BZWRiW9v42PpYBhWqYZwSNGg== + dependencies: + "@polywrap/result" "0.10.1" + "@polywrap/tracing-js" "0.10.1" + "@polywrap/wrap-manifest-types-js" "0.10.1" + +"@polywrap/core-js@0.12.0-pre.1": + version "0.12.0-pre.1" + resolved "https://registry.yarnpkg.com/@polywrap/core-js/-/core-js-0.12.0-pre.1.tgz#b376db87e0e60bd5940941b80c8cd064c44dc142" + integrity sha512-BMxp5nEJGGIerFsRR7x+CMSthIF0BjFFTTmWmpy3s5aTizKUfTtw5XIMnSeUAswA7+4beo8GSkS2u6L+T+u7YA== + dependencies: + "@polywrap/result" "0.12.0-pre.1" + "@polywrap/tracing-js" "0.12.0-pre.1" + "@polywrap/wrap-manifest-types-js" "0.12.0-pre.1" + +"@polywrap/datetime-plugin-js@~0.10.0": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@polywrap/datetime-plugin-js/-/datetime-plugin-js-0.10.1.tgz#8042673034c09155f3d0972eef87d87cb53b1914" + integrity sha512-eB6osYgISVQjnz6SDJ+02Z5HIC3Qg82hU6m1b02fTCsAsJqIDTSoe5AUugd0KqQ3C+MHv03TlGuFn6ekjyutGg== + dependencies: + "@polywrap/core-js" "~0.10.1" + "@polywrap/plugin-js" "~0.10.1" + +"@polywrap/ethereum-provider-js-v1@npm:@polywrap/ethereum-provider-js@~0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@polywrap/ethereum-provider-js/-/ethereum-provider-js-0.2.4.tgz#3df1a6548da191618bb5cae7928c7427e69e0030" + integrity sha512-64xRnniboxxHNZ4/gD6SS4T+QmJPUMbIYZ2hyLODb2QgH3qDBiU+i4gdiQ/BL3T8Sn/0iOxvTIgZalVDJRh2iw== + dependencies: + "@ethersproject/address" "5.7.0" + "@ethersproject/providers" "5.7.0" + "@polywrap/core-js" "0.10.0-pre.10" + "@polywrap/plugin-js" "0.10.0-pre.10" + ethers "5.7.0" + +"@polywrap/ethereum-provider-js@0.3.1", "@polywrap/ethereum-provider-js@npm:@polywrap/ethereum-provider-js@~0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@polywrap/ethereum-provider-js/-/ethereum-provider-js-0.3.1.tgz#ffdb9425c819ee76d3e3d5ade7d1b044077037e0" + integrity sha512-El2d3gE2CFdGNzKQhO+IPP79lhyQmkAGlpQadaW/EDyFDjERLckYDLPrwUCXG0agUcQZcNY1nHn2hknumw/yWg== + dependencies: + "@ethersproject/address" "5.7.0" + "@ethersproject/providers" "5.7.0" + "@polywrap/core-js" "0.10.0" + "@polywrap/plugin-js" "0.10.0" + ethers "5.7.0" + +"@polywrap/file-system-plugin-js@~0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@polywrap/file-system-plugin-js/-/file-system-plugin-js-0.10.0.tgz#7814e0b1c0bb170ab85500f67aca6af4c17ec19f" + integrity sha512-QWDpeVBACeK8PqZUwby/zlozG/07fpvJN5kQtw5e7ha4K5blX1j1i6ixgLKlYyQsaaTBxS6aAF3C0ryt4BsJcQ== + dependencies: + "@polywrap/core-js" "0.10.0" + "@polywrap/plugin-js" "0.10.0" + +"@polywrap/http-plugin-js@~0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@polywrap/http-plugin-js/-/http-plugin-js-0.10.0.tgz#930ec9dbaa762b71d8905ad02a77d5d574707642" + integrity sha512-t/yvoOAGUwsuS37ZQkkBZOogNbeJadtHwitMMA6XGs1jDANP1Xim/xWXWBYC3W1YJ8pbUeO8bHZHTBaJ7SC0cA== + dependencies: + "@polywrap/core-js" "0.10.0" + "@polywrap/plugin-js" "0.10.0" + axios "0.21.4" + form-data "4.0.0" + +"@polywrap/logger-plugin-js@~0.10.0": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@polywrap/logger-plugin-js/-/logger-plugin-js-0.10.1.tgz#220cc248cb1381aa46c1f773ed8ce77da420280c" + integrity sha512-ipqS7A6Mc0Fp0e/qg8RyGIulfk6mGS9acKii3kQoJ59/Zf/Yy4Eg3HWDtnlgBIdIgwyZKD8amiF42VKRO6R3Ig== + dependencies: + "@polywrap/core-js" "0.10.0" + "@polywrap/plugin-js" "0.10.0" + +"@polywrap/logging-js@0.11.0-pre.4": + version "0.11.0-pre.4" + resolved "https://registry.yarnpkg.com/@polywrap/logging-js/-/logging-js-0.11.0-pre.4.tgz#70a4f7352c3ddbcf8bb8045a466b4c771577d04c" + integrity sha512-GgFxJgc1abwy9cFBLXj4tbjoPgKC2x7EnhdFrbUIKf1kcmbi7LO4+D3J0K55hMh8zhwycXEHgFwWHyIs0hZTVg== + +"@polywrap/msgpack-js@0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@polywrap/msgpack-js/-/msgpack-js-0.10.0.tgz#7303da87ed7bc21858f0ef392aec575c5da6df63" + integrity sha512-xt2Rkad1MFXuBlOKg9N/Tl3LTUFmE8iviwUiHXDU7ClQyYSsZ/NVAAfm0rXJktmBWB8c0/N7CgcFqJTI+XsQVQ== + dependencies: + "@msgpack/msgpack" "2.7.2" + +"@polywrap/msgpack-js@0.10.0-pre.10": + version "0.10.0-pre.10" + resolved "https://registry.yarnpkg.com/@polywrap/msgpack-js/-/msgpack-js-0.10.0-pre.10.tgz#ac15d960dba2912f7ed657634f873e3c22c71843" + integrity sha512-z+lMVYKIYRyDrRDW5jFxt8Q6rVXBfMohI48Ht79X9DU1g6FdJInxhgXwVnUUQfrgtVoSgDLChdFlqnpi2JkEaQ== + dependencies: + "@msgpack/msgpack" "2.7.2" + +"@polywrap/msgpack-js@0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@polywrap/msgpack-js/-/msgpack-js-0.10.1.tgz#c3552eb51373164a78abfa80b52d9b02798ffd95" + integrity sha512-EI4Vak4Yi6NqM71eChWc3APe2svoR6BEeCVsxGAGI6p6x04r27J6+C3o1ptwHxiwyy8+J7B5W+ynaVo8qn5Zrw== + dependencies: + "@msgpack/msgpack" "2.7.2" + +"@polywrap/msgpack-js@0.12.0-pre.1": + version "0.12.0-pre.1" + resolved "https://registry.yarnpkg.com/@polywrap/msgpack-js/-/msgpack-js-0.12.0-pre.1.tgz#e87f6951a5a1ba98c07dc534bec695f46880a38e" + integrity sha512-/ea7M1hUC3+SJIdcvrfmrM/w8DVnRScok1Xdkkv20CTUDP/sDElSssB+DTtzAv/UCjhpiHzi4MRlA/AcjR1ODw== + dependencies: + "@msgpack/msgpack" "2.7.2" + +"@polywrap/os-js@0.11.0-pre.4": + version "0.11.0-pre.4" + resolved "https://registry.yarnpkg.com/@polywrap/os-js/-/os-js-0.11.0-pre.4.tgz#625b643179ba4ef1d49fbff58fa4ab882f127367" + integrity sha512-eB8lpWZjsTAkUMeAi+cbKZxfYKxhDLpKFi5Xd9s91ZC9dwUpmGehKrNJEaCOHuet1aHxGouAQKkPiim0G/nP5A== + +"@polywrap/plugin-js@0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@polywrap/plugin-js/-/plugin-js-0.10.0.tgz#e3bc81bf7832df9c84a4a319515228b159a05ba5" + integrity sha512-f0bjAKnveSu7u68NzWznYLWlzWo4MT8D6fudAF/wlV6S6R1euNJtIb8CTpAzfs6N173f81fzM/4OLS0pSYWdgQ== + dependencies: + "@polywrap/core-js" "0.10.0" + "@polywrap/msgpack-js" "0.10.0" + "@polywrap/result" "0.10.0" + "@polywrap/tracing-js" "0.10.0" + "@polywrap/wrap-manifest-types-js" "0.10.0" + +"@polywrap/plugin-js@0.10.0-pre.10": + version "0.10.0-pre.10" + resolved "https://registry.yarnpkg.com/@polywrap/plugin-js/-/plugin-js-0.10.0-pre.10.tgz#090c1963f40ab862a09deda8c18e6d522fd2e3f2" + integrity sha512-J/OEGEdalP83MnO4bBTeqC7eX+NBMQq6TxmUf68iNIydl8fgN7MNB7+koOTKdkTtNzrwXOnhavHecdSRZxuhDA== + dependencies: + "@polywrap/core-js" "0.10.0-pre.10" + "@polywrap/msgpack-js" "0.10.0-pre.10" + "@polywrap/result" "0.10.0-pre.10" + "@polywrap/tracing-js" "0.10.0-pre.10" + "@polywrap/wrap-manifest-types-js" "0.10.0-pre.10" + +"@polywrap/plugin-js@0.12.0-pre.1": + version "0.12.0-pre.1" + resolved "https://registry.yarnpkg.com/@polywrap/plugin-js/-/plugin-js-0.12.0-pre.1.tgz#86865f63545086b47ebfbd546ed18ab0ce146752" + integrity sha512-juHMEUsuoY/ZpbsVWZ9puMkX83PcCeT/hKKWxVl+CfmoWpmFiatorgdS3kMgr/O19+o/b6eyd/sqKyWSxmVdQw== + dependencies: + "@polywrap/core-js" "0.12.0-pre.1" + "@polywrap/msgpack-js" "0.12.0-pre.1" + "@polywrap/result" "0.12.0-pre.1" + "@polywrap/tracing-js" "0.12.0-pre.1" + "@polywrap/wrap-manifest-types-js" "0.12.0-pre.1" + +"@polywrap/plugin-js@~0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@polywrap/plugin-js/-/plugin-js-0.10.1.tgz#e11ce19dde01245750c297a62f2f75fd58ef9ced" + integrity sha512-WBk4ZUrI5m6FG4bIocLHo7XS+QMeNa23odli6Ss6onUyo7mPIo1wlceEgw7Cu4gd/3bmuc6VGoCKRA1/glBT3g== + dependencies: + "@polywrap/core-js" "0.10.1" + "@polywrap/msgpack-js" "0.10.1" + "@polywrap/result" "0.10.1" + "@polywrap/tracing-js" "0.10.1" + "@polywrap/wrap-manifest-types-js" "0.10.1" + +"@polywrap/polywrap-manifest-schemas@0.11.0-pre.4": + version "0.11.0-pre.4" + resolved "https://registry.yarnpkg.com/@polywrap/polywrap-manifest-schemas/-/polywrap-manifest-schemas-0.11.0-pre.4.tgz#6423498fb61a11be1b0c5b041d0dfd2d45694b24" + integrity sha512-e13BFaWazkqNPXlEtgyg5ZwgjjyyW8L1Vvf51xlxByjIBGKINOnZzAJOKIeS7+ynlDsskcKHApIqUxFyx/W9mw== + +"@polywrap/polywrap-manifest-types-js@0.11.0-pre.4": + version "0.11.0-pre.4" + resolved "https://registry.yarnpkg.com/@polywrap/polywrap-manifest-types-js/-/polywrap-manifest-types-js-0.11.0-pre.4.tgz#96d3e9d902c4461804c82bdec0888a26edf5a089" + integrity sha512-lbq9ELDmVE/0DE+T02OAmoilmL6W5vE4tmlbAOce5NXT8g3d52S0jE2vuVv57YhPzSsvC46VwlPV+aDbNg2LPQ== + dependencies: + "@polywrap/logging-js" "0.11.0-pre.4" + "@polywrap/polywrap-manifest-schemas" "0.11.0-pre.4" + jsonschema "1.4.0" + semver "7.5.3" + yaml "2.2.2" + +"@polywrap/result@0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@polywrap/result/-/result-0.10.0.tgz#712339223fba524dfabfb0bf868411f357d52e34" + integrity sha512-IxTBfGP89/OPNlUPMkjOrdYt/hwyvgI7TsYap6S35MHo4pXkR9mskzrHJ/AGE5DyGqP81CIIJNSYfooF97KY3A== + +"@polywrap/result@0.10.0-pre.10": + version "0.10.0-pre.10" + resolved "https://registry.yarnpkg.com/@polywrap/result/-/result-0.10.0-pre.10.tgz#6e88ac447d92d8a10c7e7892a6371af29a072240" + integrity sha512-SqNnEbXky4dFXgps2B2juFShq1024do0f1HLUbuj3MlIPp5aW9g9sfBslsy3YTnpg2QW7LFVT15crrJMgbowIQ== + +"@polywrap/result@0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@polywrap/result/-/result-0.10.1.tgz#e60122396521fc07edda6951915ada4aaa5f6694" + integrity sha512-9EoS/JUgKFwRk396lQ+3tDAGbZExsOf26SUG4l41HJv4FZLLLOL5ksppJK8StvjtbpQOIgFls23c83CXzS1hBQ== + +"@polywrap/result@0.12.0-pre.1": + version "0.12.0-pre.1" + resolved "https://registry.yarnpkg.com/@polywrap/result/-/result-0.12.0-pre.1.tgz#5b5ea8b4e3b0be65ee27e66050acd3f0fb6096c0" + integrity sha512-OgBmuuwCcQ8zCX+FbG01RQ402xfnwarHR7zoc9+7EXhd+jd0BdbUCg026bK43VjRZT5cQPbh0XWh5YzK1ozkGA== + +"@polywrap/schema-bind@0.11.0-pre.4": + version "0.11.0-pre.4" + resolved "https://registry.yarnpkg.com/@polywrap/schema-bind/-/schema-bind-0.11.0-pre.4.tgz#2ed1157dc15e2ec8fcc5835319639ccfb6dde6a0" + integrity sha512-1Pbvgvi3hkKybHTCi4KqDshO/6jLMKKfolVyra7Lmqq2+OGRIpMCLfysal6yqqm6TI0dcuVlGFuG2+JrGcacsw== + dependencies: + "@polywrap/client-js" "0.12.0-pre.1" + "@polywrap/os-js" "0.11.0-pre.4" + "@polywrap/schema-parse" "0.11.0-pre.4" + "@polywrap/wrap-manifest-types-js" "0.12.0-pre.1" + mustache "4.0.1" + +"@polywrap/schema-compose@0.11.0-pre.4": + version "0.11.0-pre.4" + resolved "https://registry.yarnpkg.com/@polywrap/schema-compose/-/schema-compose-0.11.0-pre.4.tgz#56214f7510996044642396e9c4e5966ef5e8c0b4" + integrity sha512-0scZaViN5xUBzoVCqjRKxYqd8mtXtEa8RJJFXY4KWDq1K5cxAl7cfz5DaJpZhpVbaqLnKy9pQWsNQRi7lCxwig== + dependencies: + "@polywrap/schema-parse" "0.11.0-pre.4" + "@polywrap/wrap-manifest-types-js" "0.12.0-pre.1" + graphql "15.5.0" + mustache "4.0.1" + +"@polywrap/schema-parse@0.11.0-pre.4": + version "0.11.0-pre.4" + resolved "https://registry.yarnpkg.com/@polywrap/schema-parse/-/schema-parse-0.11.0-pre.4.tgz#cc157e5800155625f29720cd44e2e5fccf0715e3" + integrity sha512-rpGmbK8CCbOI3UlMfcOJDqY/xQ2dkFVX8xL5WJOykf4B2fo//QvcTWqRs6s0Iir/W91E0g9bVZ0XXNU8mtd4aQ== + dependencies: + "@dorgjelli/graphql-schema-cycles" "1.1.4" + "@polywrap/wrap-manifest-types-js" "0.12.0-pre.1" + graphql "15.5.0" + +"@polywrap/sys-config-bundle-js@0.12.0-pre.1": + version "0.12.0-pre.1" + resolved "https://registry.yarnpkg.com/@polywrap/sys-config-bundle-js/-/sys-config-bundle-js-0.12.0-pre.1.tgz#7487c5e5d181aa4140ab8d7015fcb0779a4af9f8" + integrity sha512-upyi2kwIr4/sL6bPL/ECqJpisaSFtIm5wwwl8PoUE5Ib+T/O2WUZxc4A3JNczV0Y1UnqPh6cTbfDH8qXqviAdQ== + dependencies: + "@polywrap/concurrent-plugin-js" "~0.10.0" + "@polywrap/config-bundle-types-js" "0.12.0-pre.1" + "@polywrap/datetime-plugin-js" "~0.10.0" + "@polywrap/file-system-plugin-js" "~0.10.0" + "@polywrap/http-plugin-js" "~0.10.0" + "@polywrap/logger-plugin-js" "~0.10.0" + "@polywrap/uri-resolver-extensions-js" "0.12.0-pre.1" + base64-to-uint8array "1.0.0" + +"@polywrap/tracing-js@0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@polywrap/tracing-js/-/tracing-js-0.10.0.tgz#31d7ca9cc73a1dbd877fc684000652aa2c22acdc" + integrity sha512-077oN9VfbCNsYMRjX9NA6D1vFV+Y3TH92LjZATKQ2W2fRx/IGRARamAjhNfR4qRKstrOCd9D4E2DmaqFax3QIg== + dependencies: + "@fetsorn/opentelemetry-console-exporter" "0.0.3" + "@opentelemetry/api" "1.2.0" + "@opentelemetry/exporter-trace-otlp-http" "0.32.0" + "@opentelemetry/resources" "1.6.0" + "@opentelemetry/sdk-trace-base" "1.6.0" + "@opentelemetry/sdk-trace-web" "1.6.0" + +"@polywrap/tracing-js@0.10.0-pre.10": + version "0.10.0-pre.10" + resolved "https://registry.yarnpkg.com/@polywrap/tracing-js/-/tracing-js-0.10.0-pre.10.tgz#f50fb01883dcba4217a1711718aa53f3dd61cb1c" + integrity sha512-6wFw/zANVPG0tWMTSxwDzIpABVSSR9wO4/XxhCnKKgXwW6YANhtLj86uSRMTWqXeX2rpHwpMoWh4MDgYeAf+ng== + dependencies: + "@fetsorn/opentelemetry-console-exporter" "0.0.3" + "@opentelemetry/api" "1.2.0" + "@opentelemetry/exporter-trace-otlp-http" "0.32.0" + "@opentelemetry/resources" "1.6.0" + "@opentelemetry/sdk-trace-base" "1.6.0" + "@opentelemetry/sdk-trace-web" "1.6.0" + +"@polywrap/tracing-js@0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@polywrap/tracing-js/-/tracing-js-0.10.1.tgz#488dd505f3c5232cb292e848de7a182c83a4405a" + integrity sha512-4ZjPgNBFbX4DIzqRbzyMq64FvYv51JLuFIxL0EweI5paEbR69a1m4iN4BLxJc+jBjDYpWgy399+tYGnc94aM6A== + dependencies: + "@fetsorn/opentelemetry-console-exporter" "0.0.3" + "@opentelemetry/api" "1.2.0" + "@opentelemetry/exporter-trace-otlp-http" "0.32.0" + "@opentelemetry/resources" "1.6.0" + "@opentelemetry/sdk-trace-base" "1.6.0" + "@opentelemetry/sdk-trace-web" "1.6.0" + +"@polywrap/tracing-js@0.12.0-pre.1": + version "0.12.0-pre.1" + resolved "https://registry.yarnpkg.com/@polywrap/tracing-js/-/tracing-js-0.12.0-pre.1.tgz#53794c111a42fca5921e3ac1bade7acbe025140d" + integrity sha512-TbLJisZujA9XbSPAvBrC0iTsJiqC1DDF3BKIP1m9d6Bs4KX4zS2UhZzQAJZFKaAo/acoUW9NgXd6O8PtixZmGw== + dependencies: + "@fetsorn/opentelemetry-console-exporter" "0.0.3" + "@opentelemetry/api" "1.2.0" + "@opentelemetry/exporter-trace-otlp-http" "0.32.0" + "@opentelemetry/resources" "1.6.0" + "@opentelemetry/sdk-trace-base" "1.6.0" + "@opentelemetry/sdk-trace-web" "1.6.0" + +"@polywrap/uri-resolver-extensions-js@0.12.0-pre.1": + version "0.12.0-pre.1" + resolved "https://registry.yarnpkg.com/@polywrap/uri-resolver-extensions-js/-/uri-resolver-extensions-js-0.12.0-pre.1.tgz#d62ab34b859a74924a139e94a22b30a6b09759af" + integrity sha512-sRT7I7RYkijQpuD+0+gDsUTJsVSL9M9caowfFOPkDhHuTcoIct/Fte/hAD5ncDChSUc84MZgHZPWcQxOz12zzg== + dependencies: + "@polywrap/core-js" "0.12.0-pre.1" + "@polywrap/result" "0.12.0-pre.1" + "@polywrap/uri-resolvers-js" "0.12.0-pre.1" + "@polywrap/wasm-js" "0.12.0-pre.1" + "@polywrap/wrap-manifest-types-js" "0.12.0-pre.1" + +"@polywrap/uri-resolvers-js@0.12.0-pre.1": + version "0.12.0-pre.1" + resolved "https://registry.yarnpkg.com/@polywrap/uri-resolvers-js/-/uri-resolvers-js-0.12.0-pre.1.tgz#58b6238cde9380dbb302e3a0c00f7a493a679765" + integrity sha512-tVqTWRS4rtlq3JKQHyOPqE2lql/qCWT+cy7IYT/VN/jaD6nHLMI+tWwp9spDlibotOn/6Bwtk+v6HOPS6SkiOg== + dependencies: + "@polywrap/core-js" "0.12.0-pre.1" + "@polywrap/result" "0.12.0-pre.1" + "@polywrap/wrap-manifest-types-js" "0.12.0-pre.1" + +"@polywrap/wasm-js@0.12.0-pre.1": + version "0.12.0-pre.1" + resolved "https://registry.yarnpkg.com/@polywrap/wasm-js/-/wasm-js-0.12.0-pre.1.tgz#d1641b12692f7d90dc16c8687b6a8e2f70153124" + integrity sha512-ItIJnvz9DuCifaiYy+ZQiTXU5gotUUcSA/BmO+joe1b96c5b1n7gbiU3eqaYWPDpzNxo417/Utwr8RHtZ4248Q== + dependencies: + "@polywrap/asyncify-js" "0.12.0-pre.1" + "@polywrap/core-js" "0.12.0-pre.1" + "@polywrap/msgpack-js" "0.12.0-pre.1" + "@polywrap/result" "0.12.0-pre.1" + "@polywrap/tracing-js" "0.12.0-pre.1" + "@polywrap/wrap-manifest-types-js" "0.12.0-pre.1" + +"@polywrap/web3-config-bundle-js@0.12.0-pre.1": + version "0.12.0-pre.1" + resolved "https://registry.yarnpkg.com/@polywrap/web3-config-bundle-js/-/web3-config-bundle-js-0.12.0-pre.1.tgz#477a64fa4912f5ac5edb94037315e0f6cdaa92d7" + integrity sha512-L+yZBfooyGgOLdoNcMiEHexpNf+3OnxzVpFlHtR9JdHJmOv4VxqI0LFuVoBDCBwv6m/zxzSYw9C/v8LzIPQLgA== + dependencies: + "@polywrap/config-bundle-types-js" "0.12.0-pre.1" + "@polywrap/ethereum-provider-js" "npm:@polywrap/ethereum-provider-js@~0.3.1" + "@polywrap/ethereum-provider-js-v1" "npm:@polywrap/ethereum-provider-js@~0.2.4" + "@polywrap/sys-config-bundle-js" "0.12.0-pre.1" + "@polywrap/uri-resolver-extensions-js" "0.12.0-pre.1" + "@polywrap/wasm-js" "0.12.0-pre.1" + base64-to-uint8array "1.0.0" + +"@polywrap/wrap-manifest-types-js@0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@polywrap/wrap-manifest-types-js/-/wrap-manifest-types-js-0.10.0.tgz#f009a69d1591ee770dd13d67989d88f51e345d36" + integrity sha512-T3G/7NvNTuS1XyguRggTF4k7/h7yZCOcCbbUOTVoyVNfiNUY31hlrNZaFL4iriNqQ9sBDl9x6oRdOuFB7L9mlw== + dependencies: + "@apidevtools/json-schema-ref-parser" "9.0.9" + jsonschema "1.4.0" + semver "7.4.0" + +"@polywrap/wrap-manifest-types-js@0.10.0-pre.10": + version "0.10.0-pre.10" + resolved "https://registry.yarnpkg.com/@polywrap/wrap-manifest-types-js/-/wrap-manifest-types-js-0.10.0-pre.10.tgz#81b339f073c48880b34f06f151aa41373f442f88" + integrity sha512-Hgsa6nJIh0cCqKO14ufjAsN0WEKuLuvFBfBycjoRLfkwD3fcxP/xrvWgE2NRSvwQ77aV6PGMbhlSMDGI5jahrw== + dependencies: + "@apidevtools/json-schema-ref-parser" "9.0.9" + jsonschema "1.4.0" + semver "7.3.8" + +"@polywrap/wrap-manifest-types-js@0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@polywrap/wrap-manifest-types-js/-/wrap-manifest-types-js-0.10.1.tgz#df7099357af2ccdbb61a6fb42ebaa047c6d97d70" + integrity sha512-0UxTZY6AcQpEkeL9HMMZvHv5a0OXXSRr4clPVyyo7BAmUjwJRE0veKY2hy0bR0Je7rZjxlwR5uS9+CToqYAd9g== + dependencies: + "@apidevtools/json-schema-ref-parser" "9.0.9" + "@polywrap/msgpack-js" "0.10.1" + jsonschema "1.4.0" + semver "7.5.0" + +"@polywrap/wrap-manifest-types-js@0.12.0-pre.1": + version "0.12.0-pre.1" + resolved "https://registry.yarnpkg.com/@polywrap/wrap-manifest-types-js/-/wrap-manifest-types-js-0.12.0-pre.1.tgz#81ea326c2ccebf3761425a44fda26b171fad4409" + integrity sha512-BdM1QrSb2gEbFqeMyh1UPa1zUdilwkNyMr5A8Pfw1nYv93W9/UK8O2IYXeh1WUWAnsPSgjNbtM0bbdXMqqDyHQ== + dependencies: + "@polywrap/msgpack-js" "0.12.0-pre.1" + ajv "8.12.0" + semver "7.5.0" + +"@types/json-schema@^7.0.6": + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== + +"@types/node@*": + version "20.4.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.5.tgz#9dc0a5cb1ccce4f7a731660935ab70b9c00a5d69" + integrity sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg== + +"@types/yauzl@^2.9.1": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" + integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== + dependencies: + "@types/node" "*" + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + +ajv@8.12.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +axios@0.21.2: + version "0.21.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.2.tgz#21297d5084b2aeeb422f5d38e7be4fbb82239017" + integrity sha512-87otirqUw3e8CzHTMO+/9kh/FSgXt/eVDvipijwDtEuwbkySWZ9SBm6VEubmJ/kLKEoLQV/POhxXFb66bfekfg== + dependencies: + follow-redirects "^1.14.0" + +axios@0.21.4: + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.8: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base64-to-uint8array@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base64-to-uint8array/-/base64-to-uint8array-1.0.0.tgz#725f9e9886331b43785cadd807e76803d5494e05" + integrity sha512-drjWQcees55+XQSVHYxiUF05Fj6ko3XJUoxykZEXbm0BMmNz2ieWiZGJ+6TFWnjN2saucG6pI13LS92O4kaiAg== + +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +buffer@^5.5.0, buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +call-me-maybe@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" + integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== + +chalk@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + +cids@^0.7.1: + version "0.7.5" + resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" + integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== + dependencies: + buffer "^5.5.0" + class-is "^1.1.0" + multibase "~0.6.0" + multicodec "^1.0.0" + multihashes "~0.4.15" + +class-is@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" + integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.2.0.tgz#6e21014b2ed90d8b7c9647230d8b7a94a4a419a9" + integrity sha512-e2i4wANQiSXgnrBlIatyHtP1odfUp0BbV5Y5nEGbxtIrStkEOAAzCUirvLBNXHLr7kwLvJl6V+4V3XV9x7Wd9w== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +content-hash@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" + integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== + dependencies: + cids "^0.7.1" + multicodec "^0.5.5" + multihashes "^0.4.15" + +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-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cross-spawn@^7.0.0: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@^4.1.1: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +docker-compose@0.23.17: + version "0.23.17" + resolved "https://registry.yarnpkg.com/docker-compose/-/docker-compose-0.23.17.tgz#8816bef82562d9417dc8c790aa4871350f93a2ba" + integrity sha512-YJV18YoYIcxOdJKeFcCFihE6F4M2NExWM/d4S1ITcS9samHKnNUihz9kjggr0dNtsrbpFNc7/Yzd19DWs+m1xg== + dependencies: + yaml "^1.10.2" + +elliptic@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +ethers@5.7.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.0.tgz#0055da174b9e076b242b8282638bc94e04b39835" + integrity sha512-5Xhzp2ZQRi0Em+0OkOcRHxPzCfoBfgtOQA+RUylSkuHbhTEaQklnYi2hsWbRgs3ztJsXVXd9VKBcO1ScWL8YfA== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.0" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.0" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.0" + "@ethersproject/wordlists" "5.7.0" + +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +extract-zip@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +fast-deep-equal@^3.1.1: + 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== + +fast-memoize@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/fast-memoize/-/fast-memoize-2.5.2.tgz#79e3bb6a4ec867ea40ba0e7146816f6cdce9b57e" + integrity sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw== + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +follow-redirects@^1.14.0: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +form-data@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fs-extra@9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-stream@^5.0.0, get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^7.0.5, glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphql-json-transform@^1.1.0-alpha.0: + version "1.1.0-alpha.0" + resolved "https://registry.yarnpkg.com/graphql-json-transform/-/graphql-json-transform-1.1.0-alpha.0.tgz#fb0c88d24840067e6c55ac64bbc8d4e5de245d2d" + integrity sha512-I6lR/lYEezSz4iru0f7a/wR8Rzi3pCafk7S0bX2b/WQOtK0vKabxLShGBXIslsi0arMehIjvOPHJl7MpOUqj0w== + +graphql@15.5.0: + version "15.5.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.5.0.tgz#39d19494dbe69d1ea719915b578bf920344a69d5" + integrity sha512-OmaM7y0kaK31NKG31q4YbD2beNYa6jBBKtMFT6gLYJljHLJr42IqJ8KX08u3Li/0ifzTU5HjmoOOrwa5BRLeDA== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +intl-messageformat-parser@6.4.2: + version "6.4.2" + resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-6.4.2.tgz#e2d28c3156c27961ead9d613ca55b6a155078d7d" + integrity sha512-IVNGy24lNEYr/KPWId5tF3KXRHFFbMgzIMI4kUonNa/ide2ywUYyBuOUro1IBGZJqjA2ncBVUyXdYKlMfzqpAA== + dependencies: + "@formatjs/ecma402-abstract" "1.6.2" + tslib "^2.1.0" + +intl-messageformat@9.5.2: + version "9.5.2" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-9.5.2.tgz#e72d32152c760b7411e413780e462909987c005a" + integrity sha512-sBGXcSQLyBuBA/kzAYhTpzhzkOGfSwGIau2W6FuwLZk0JE+VF3C+y0077FhVDOcRSi60iSfWzT8QC3Z7//dFxw== + dependencies: + fast-memoize "^2.5.2" + intl-messageformat-parser "6.4.2" + tslib "^2.1.0" + +invert-kv@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-3.0.1.tgz#a93c7a3d4386a1dc8325b97da9bb1620c0282523" + integrity sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +js-sha3@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.0.tgz#1afa34c4bc22190d8e42271ec17ac8b3404f87b2" + integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== + +lcid@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-3.1.1.tgz#9030ec479a058fc36b5e8243ebaac8b6ac582fd0" + integrity sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg== + dependencies: + invert-kv "^3.0.0" + +lodash.merge@4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +map-age-cleaner@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +mem@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/mem/-/mem-5.1.1.tgz#7059b67bf9ac2c924c9f1cff7155a064394adfb3" + integrity sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw== + dependencies: + map-age-cleaner "^0.1.3" + mimic-fn "^2.1.0" + p-is-promise "^2.1.0" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@^3.0.3, 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== + dependencies: + brace-expansion "^1.1.7" + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +multibase@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" + integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multibase@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" + integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multicodec@^0.5.5: + version "0.5.7" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" + integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== + dependencies: + varint "^5.0.0" + +multicodec@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" + integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== + dependencies: + buffer "^5.6.0" + varint "^5.0.0" + +multihashes@^0.4.15, multihashes@~0.4.15: + version "0.4.21" + resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" + integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== + dependencies: + buffer "^5.5.0" + multibase "^0.7.0" + varint "^5.0.0" + +mustache@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.0.1.tgz#d99beb031701ad433338e7ea65e0489416c854a2" + integrity sha512-yL5VE97+OXn4+Er3THSmTdCFCtx5hHWzrolvH+JObZnUYwuaG7XV+Ch4fR2cIrcYI0tFHxS7iyFYl14bW8y2sA== + +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" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +os-locale@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-5.0.0.tgz#6d26c1d95b6597c5d5317bf5fba37eccec3672e0" + integrity sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA== + dependencies: + execa "^4.0.0" + lcid "^3.0.0" + mem "^5.0.0" + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== + +p-is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +polywrap@~0.11.0-pre.4: + version "0.11.0-pre.4" + resolved "https://registry.yarnpkg.com/polywrap/-/polywrap-0.11.0-pre.4.tgz#6fcaf1cf912e17537acf51882b624c7c05b286b4" + integrity sha512-hmnR+eBXRJE3rCHTGk8PCBKwDjxNTLqqRdqcMcCAvrdtnv4Qpwjd6pZ9/z6GbvqKCrR71SuV5y+51pGbQwSQkA== + dependencies: + "@apidevtools/json-schema-ref-parser" "9.0.9" + "@ethersproject/providers" "5.6.8" + "@ethersproject/wallet" "5.6.2" + "@formatjs/intl" "1.8.2" + "@polywrap/asyncify-js" "0.12.0-pre.1" + "@polywrap/client-config-builder-js" "0.12.0-pre.1" + "@polywrap/client-js" "0.12.0-pre.1" + "@polywrap/core-js" "0.12.0-pre.1" + "@polywrap/ethereum-provider-js" "0.3.1" + "@polywrap/logging-js" "0.11.0-pre.4" + "@polywrap/os-js" "0.11.0-pre.4" + "@polywrap/polywrap-manifest-types-js" "0.11.0-pre.4" + "@polywrap/result" "0.12.0-pre.1" + "@polywrap/schema-bind" "0.11.0-pre.4" + "@polywrap/schema-compose" "0.11.0-pre.4" + "@polywrap/schema-parse" "0.11.0-pre.4" + "@polywrap/sys-config-bundle-js" "0.12.0-pre.1" + "@polywrap/uri-resolver-extensions-js" "0.12.0-pre.1" + "@polywrap/uri-resolvers-js" "0.12.0-pre.1" + "@polywrap/wasm-js" "0.12.0-pre.1" + "@polywrap/web3-config-bundle-js" "0.12.0-pre.1" + "@polywrap/wrap-manifest-types-js" "0.12.0-pre.1" + axios "0.21.2" + chalk "4.1.0" + chokidar "3.5.1" + commander "9.2.0" + content-hash "2.5.2" + copyfiles "2.4.1" + docker-compose "0.23.17" + extract-zip "2.0.1" + form-data "4.0.0" + fs-extra "9.0.1" + json-schema "0.4.0" + jsonschema "1.4.0" + mustache "4.0.1" + os-locale "5.0.0" + regex-parser "2.2.11" + rimraf "3.0.2" + toml "3.0.0" + typescript "4.9.5" + yaml "2.2.2" + yesno "0.4.0" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +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-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +regex-parser@2.2.11: + version "2.2.11" + resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" + integrity sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +rimraf@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +safe-buffer@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +scrypt-js@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +semver@7.3.8: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +semver@7.4.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.4.0.tgz#8481c92feffc531ab1e012a8ffc15bdd3a0f4318" + integrity sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw== + dependencies: + lru-cache "^6.0.0" + +semver@7.5.0: + version "7.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.0.tgz#ed8c5dc8efb6c629c88b23d41dc9bf40c1d96cd0" + integrity sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA== + dependencies: + lru-cache "^6.0.0" + +semver@7.5.3: + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== + dependencies: + lru-cache "^6.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +through2@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toml@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" + integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== + +tslib@^2.1.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410" + integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== + +typescript@4.9.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +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== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +varint@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" + integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.2.tgz#ec551ef37326e6d42872dad1970300f8eb83a073" + integrity sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA== + +yaml@^1.10.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@^16.1.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +yesno@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/yesno/-/yesno-0.4.0.tgz#5d674f14d339f0bd4b0edc47f899612c74fcd895" + integrity sha512-tdBxmHvbXPBKYIg81bMCB7bVeDmHkRzk5rVJyYYXurwKkHq/MCd8rz4HSJUP7hW0H2NlXiq8IFiWvYKEHhlotA==