diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..c470b68 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @dOrgJelli diff --git a/.github/workflows/javascript-client.yaml b/.github/workflows/javascript-client.yaml new file mode 100644 index 0000000..d62f517 --- /dev/null +++ b/.github/workflows/javascript-client.yaml @@ -0,0 +1,30 @@ +name: JavaScript-Client + +on: + push: + branches: + - main + pull_request: + +jobs: + Client-Readiness: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Read .nvmrc + run: echo "NVMRC=$(cat .nvmrc)" >> $GITHUB_OUTPUT + id: nvm + working-directory: ./verify + + - name: Setup Node.js + uses: actions/setup-node@master + with: + node-version: '${{ steps.nvm.outputs.NVMRC }}' + + - name: Install + run: ./install.sh + + - name: Run + run: ./run.sh js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5148416 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +stdout +stderr +wraps/* +!wraps/install.sh +!wraps/public diff --git a/README.md b/README.md index 4ff1b2f..a633d5e 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,47 @@ # Client Readiness Checklist A place to define a "readiness checklist" for all Polywrap clients to adhere to. -## Checklist (WRAP 0.1) +## Checklist -| Feature :heavy_check_mark: | Description :thought_balloon: | Required :question: | Spec :clipboard: | -|-|-|-|-| -| URI | Create & sanitize a `wrap://` URI | Yes | [uri.yaml](./feature-specs/uri.yaml) | -| Resolve URI | Resolve a `wrap://` URI to a wrap or URI | Yes | ... | -| Load Wrap | Resolve a `wrap://` URI to a wrap | Yes | ... | -| Invoke | Invoke a wrap's function | Yes | ... | +| Feature :heavy_check_mark: | Scenario :thought_balloon: | Required :question: | Spec :clipboard: | JS :scroll: | +|-|-|-|-|-| +| **`wrap://` URIs** | | | | | +| | Create & sanitize a `wrap://` URI | Yes | [:mag:](./specs/uri.yaml) | [:heavy_check_mark:](./clients/js/src/features/uri.ts) | +| **Client Configuration** | | | | | +| | Add a wrap package | Yes | [:mag:](./specs/config_embed_wrap_package.yaml) | [:heavy_check_mark:](./clients/js/src/features/config_embed_wrap_package.ts) | +| | Add a plugin package | Yes | [:mag:](./specs/config_plugin_package.yaml) | [:heavy_check_mark:](./clients/js/src/features/config_plugin_package.ts) | +| | Add a plugin instance | Yes | [:mag:](./specs/config_plugin_instance.yaml) | [:heavy_check_mark:](./clients/js/src/features/config_plugin_instance.ts) | +| | Add a URI redirect | Yes | [:mag:](./specs/config_uri_redirect.yaml) | [:heavy_check_mark:](./clients/js/src/features/config_uri_redirect.ts) | +| | Add env variables | Yes | [:mag:](./specs/config_env_variables.yaml) | [:heavy_check_mark:](./clients/js/src/features/config_env_variables.ts) | +| | Add interface implementations | Yes | [:mag:](./specs/config_interface_implementations.yaml) | [:heavy_check_mark:](./clients/js/src/features/config_interface_implementations.ts) | +| | Add resolver | Yes | [:mag:](./specs/config_resolver.yaml) | [:heavy_check_mark:](./clients/js/src/features/config_resolver.ts) | +| | Add resolver ext | Yes | [:mag:](./specs/config_resolver_ext.yaml) | [:heavy_check_mark:](./clients/js/src/features/config_resolver_ext.ts) | +| **Invocation** | | | | | +| | Invoke a wrap function
(Wasm Runtime v0.1) | Yes | [:mag:](./specs/invoke_wrap_wasm_v0_1.yaml) | [:heavy_check_mark:](./clients/js/src/features/invoke_wrap_wasm_v0_1.ts) | +| | Invoke a plugin function | Yes | [:mag:](./specs/invoke_plugin.yaml) | [:heavy_check_mark:](./clients/js/src/features/invoke_plugin.ts) | +| | Subinvoke: `wrap -> wrap` | Yes | [:mag:](./specs/subinvoke_wrap_wrap.yaml) | [:heavy_check_mark:](./clients/js/src/features/subinvoke_wrap_wrap.ts) | +| | Subinvoke: `wrap -> plugin` | Yes | [:mag:](./specs/subinvoke_wrap_plugin.yaml) | [:heavy_check_mark:](./clients/js/src/features/subinvoke_wrap_plugin.ts) | +| | Subinvoke: `plugin -> wrap` | Yes | [:mag:](./specs/subinvoke_plugin_wrap.yaml) | [:heavy_check_mark:](./clients/js/src/features/subinvoke_plugin_wrap.ts) | +| **`wrap://` Resolution** | | | | | +| | Resolve a wrap package | Yes | [:mag:](./specs/resolve_package.yaml) | [:heavy_check_mark:](./clients/js/src/features/resolve_package.ts) | +| | Resolve a wrap instance | Yes | [:mag:](./specs/resolve_instance.yaml) | [:heavy_check_mark:](./clients/js/src/features/resolve_instance.ts) | +| | Resolve a redirect | Yes | [:mag:](./specs/resolve_redirect.yaml) | [:heavy_check_mark:](./clients/js/src/features/resolve_redirect.ts) | +| | Resolve `wrap://http/` &
`wrap://https/` | Yes | [:mag:](./specs/resolve_http.yaml) | [:heavy_check_mark:](./clients/js/src/features/resolve_http.ts) | +| | Resolve `wrap://file/` &
`wrap://fs/` | Yes | [:mag:](./specs/resolve_file.yaml) | [:heavy_check_mark:](./clients/js/src/features/resolve_file.ts) | +| | Resolve `wrap://ipfs/` | Yes | [:mag:](./specs/resolve_ipfs.yaml) | [:heavy_check_mark:](./clients/js/src/features/resolve_ipfs.ts) | +| | Resolve `wrap://ens/` contenthash | No | [:mag:](./specs/resolve_ens_contenthash.yaml) | [:heavy_check_mark:](./clients/js/src/features/resolve_ens_contenthash.ts) | +| | Resolve `wrap://ens/` text-records | No | [:mag:](./specs/resolve_ens_text_record.yaml) | [:heavy_check_mark:](./clients/js/src/features/resolve_ens_text_record.ts) | +| **[WRAP Features](https://github.com/polywrap/wrap-test-harness/tree/master/cases)** | | | | | +| | Wrap `Env` Variables | Yes | [:mag:](./specs/wrap_feature_env_vars.yaml) | [:heavy_check_mark:](./clients/js/src/features/wrap_feature_env_vars.ts) | +| | Wrap Interface Invocations | Yes | [:mag:](./specs/wrap_feature_interface_invoke.yaml) | [:heavy_check_mark:](./clients/js/src/features/wrap_feature_interface_invoke.ts) | +| **[WRAP ABI Type Support](https://github.com/polywrap/wrap-test-harness/tree/master/cases)** | | | | | +| | `(U)Int(8\|16\|32)` | Yes | [:mag:](./specs/wrap_type_ints.yaml) | [:heavy_check_mark:](./clients/js/src/features/wrap_type_ints.ts) | +| | `String` | Yes | TODO | TODO | +| | `Bytes` | Yes | [:mag:](./specs/wrap_type_bytes.yaml) | [:heavy_check_mark:](./clients/js/src/features/wrap_type_bytes.ts) | +| | `Object` | Yes | [:mag:](./specs/wrap_type_object.yaml) | [:heavy_check_mark:](./clients/js/src/features/wrap_type_object.ts) | +| | `Enum` | Yes | [:mag:](./specs/wrap_type_enum.yaml) | [:heavy_check_mark:](./clients/js/src/features/wrap_type_enum.ts) | +| | `BigInt` | Yes | [:mag:](./specs/wrap_type_bigint.yaml) | [:heavy_check_mark:](./clients/js/src/features/wrap_type_bigint.ts) | +| | `BigNumber` | Yes | [:mag:](./specs/wrap_type_bignumber.yaml) | [:heavy_check_mark:](./clients/js/src/features/wrap_type_bignumber.ts) | +| | `JSON` | Yes | [:mag:](./specs/wrap_type_json.yaml) | [:heavy_check_mark:](./clients/js/src/features/wrap_type_json.ts) | +| | `Array` | Yes | TODO | TODO | +| | `Map` | Yes | [:mag:](./specs/wrap_type_map.yaml) | [:heavy_check_mark:](./clients/js/src/features/wrap_type_map.ts) | diff --git a/clients/js/.gitignore b/clients/js/.gitignore new file mode 100644 index 0000000..4d29575 --- /dev/null +++ b/clients/js/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/clients/js/.nvmrc b/clients/js/.nvmrc new file mode 100644 index 0000000..5015706 --- /dev/null +++ b/clients/js/.nvmrc @@ -0,0 +1 @@ +v17.9.1 \ No newline at end of file diff --git a/clients/js/install.sh b/clients/js/install.sh new file mode 100755 index 0000000..bd5d27b --- /dev/null +++ b/clients/js/install.sh @@ -0,0 +1,2 @@ +nvm install && nvm use +yarn \ No newline at end of file diff --git a/clients/js/package.json b/clients/js/package.json new file mode 100644 index 0000000..df62c54 --- /dev/null +++ b/clients/js/package.json @@ -0,0 +1,19 @@ +{ + "name": "templates-app-typescript", + "description": "Polywrap App TypeScript Template", + "private": true, + "version": "0.10.1", + "scripts": { + "start": "ts-node ./src/index.ts" + }, + "dependencies": { + "@polywrap/client-js": "0.10.1", + "bignumber.js": "9.1.1", + "yaml": "2.2.1" + }, + "devDependencies": { + "@types/node": "^18.14.6", + "ts-node": "10.9.1", + "typescript": "4.9.5" + } +} diff --git a/clients/js/run.sh b/clients/js/run.sh new file mode 100755 index 0000000..42cf284 --- /dev/null +++ b/clients/js/run.sh @@ -0,0 +1 @@ +yarn start -- $1 2> stderr | tee stdout \ No newline at end of file diff --git a/clients/js/src/features/config_embed_wrap_package.ts b/clients/js/src/features/config_embed_wrap_package.ts new file mode 100644 index 0000000..daa4b95 --- /dev/null +++ b/clients/js/src/features/config_embed_wrap_package.ts @@ -0,0 +1,61 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; +import { WasmPackage } from "@polywrap/wasm-js"; + +import path from "path"; +import fs from "fs"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + directory: unknown; + method: unknown; + args: unknown; + }>(input); + + const wrapDir = Input.expectRootDir( + inputObj.directory, + path.join(__dirname, "../../../../") + ); + + const method = Input.expectString(inputObj.method); + const args = Input.expectObject>( + inputObj.args + ); + + console.log(`Reading wrap.info & wrap.wasm from ${inputObj.directory}`); + + const manifest = fs.readFileSync( + path.join(wrapDir, "wrap.info") + ); + const wasmModule = fs.readFileSync( + path.join(wrapDir, "wrap.wasm") + ); + + console.log("Creating WrapPackage from raw wrap.info & wrap.wasm bytes"); + + const wrapPackage = WasmPackage.from( + manifest, + wasmModule + ); + + console.log("Adding WrapPackage to ClientConfig"); + + const config = new ClientConfigBuilder() + .addPackage("embed/foo", wrapPackage) + .build(); + + const client = new PolywrapClient(config); + + console.log("Invoking WrapPackage"); + + const result = await client.invoke({ + uri: "embed/foo", + method, + args + }); + + if (result.ok) { + console.log("Success!"); + } +} diff --git a/clients/js/src/features/config_env_variables.ts b/clients/js/src/features/config_env_variables.ts new file mode 100644 index 0000000..fe9e853 --- /dev/null +++ b/clients/js/src/features/config_env_variables.ts @@ -0,0 +1,33 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + uri: unknown; + env: unknown; + }>(input); + const uri = Input.expectUri(inputObj.uri).uri; + const env = Input.expectObject>( + inputObj.env + ); + + console.log("Adding Env to ClientConfig"); + + const config = new ClientConfigBuilder() + .addEnv(uri, env) + .build(); + + const client = new PolywrapClient(config); + + console.log("Fetching Env"); + + const result = client.getEnvByUri(uri); + + if (result) { + for (const key of Object.keys(result)) { + console.log(`env.${key} = ${result[key]}`); + } + console.log("Success!"); + } +} diff --git a/clients/js/src/features/config_interface_implementations.ts b/clients/js/src/features/config_interface_implementations.ts new file mode 100644 index 0000000..a008e77 --- /dev/null +++ b/clients/js/src/features/config_interface_implementations.ts @@ -0,0 +1,32 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + interfaceUri: unknown; + implementations: unknown; + }>(input); + const interfaceUri = Input.expectUri(inputObj.interfaceUri).uri; + const implementations = Input.expectArray(inputObj.implementations); + + console.log("Adding Interface Implementations to ClientConfig"); + + const config = new ClientConfigBuilder() + .addInterfaceImplementations( + interfaceUri, + implementations + ) + .build(); + + const client = new PolywrapClient(config); + + console.log("Getting Implementations"); + + const result = await client.getImplementations(interfaceUri); + + if (result.ok && result.value.length > 0) { + console.log(`Found ${result.value.length} Implementations`); + console.log("Success!"); + } +} diff --git a/clients/js/src/features/config_plugin_instance.ts b/clients/js/src/features/config_plugin_instance.ts new file mode 100644 index 0000000..cbefe0e --- /dev/null +++ b/clients/js/src/features/config_plugin_instance.ts @@ -0,0 +1,53 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; +import { PluginWrapper, PluginModule } from "@polywrap/plugin-js"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + uri: unknown; + method: unknown; + }>(input); + const uri = Input.expectUri(inputObj.uri).uri; + const method = Input.expectString(inputObj.method); + + console.log("Creating Plugin Instance"); + + class Plugin extends PluginModule<{}, {}> { + counter: number = 0; + + increment() { + ++this.counter; + } + } + + const plugin = new Plugin({}); + + console.log("Adding Plugin Instance to ClientConfig"); + + const pluginWrapper = new PluginWrapper( + { version: "0.1", type: "plugin", name: "counter", abi: {} }, + plugin + ); + + const config = new ClientConfigBuilder() + .addWrapper(uri, pluginWrapper) + .build(); + + const client = new PolywrapClient(config); + + for (let i = 0; i < 2; ++i) { + console.log("Invoking Plugin Instance"); + + const result = await client.invoke({ + uri, + method + }); + + if (result.ok) { + console.log(`counter = ${plugin.counter}`); + } + } + + console.log("Success!"); +} diff --git a/clients/js/src/features/config_plugin_package.ts b/clients/js/src/features/config_plugin_package.ts new file mode 100644 index 0000000..bc4ea03 --- /dev/null +++ b/clients/js/src/features/config_plugin_package.ts @@ -0,0 +1,45 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; +import { PluginPackage } from "@polywrap/plugin-js"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + uri: unknown; + method: unknown; + args: unknown; + }>(input); + const uri = Input.expectUri(inputObj.uri).uri; + const method = Input.expectString(inputObj.method); + const args = Input.expectObject>( + inputObj.args + ); + + console.log("Creating PluginPackage"); + + const pluginPackage = PluginPackage.from(() => ({ + add: (args: { a: number, b: number }) => { + return args.a + args.b; + } + })); + + console.log("Adding PluginPackage to ClientConfig"); + + const config = new ClientConfigBuilder() + .addPackage(uri, pluginPackage) + .build(); + + const client = new PolywrapClient(config); + + console.log("Invoking PluginPackage"); + + const result = await client.invoke({ + uri, + method, + args + }); + + if (result.ok) { + console.log("Success!"); + } +} diff --git a/clients/js/src/features/config_resolver.ts b/clients/js/src/features/config_resolver.ts new file mode 100644 index 0000000..09a7f2d --- /dev/null +++ b/clients/js/src/features/config_resolver.ts @@ -0,0 +1,54 @@ +import { Input } from "../input"; + +import { + ClientConfigBuilder, + PolywrapClient, + IUriResolver, + Uri +} from "@polywrap/client-js"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + authority: unknown; + result: unknown; + }>(input); + const authority = Input.expectString(inputObj.authority); + const result = Input.expectString(inputObj.result); + + console.log("Adding Resolver to ClientConfig"); + + const resolver: IUriResolver = { + tryResolveUri: async (uri: Uri) => { + const response = uri.authority === authority + ? Uri.from(result) + : uri; + + return { + ok: true, + value: { + type: "uri", + uri: response + } + }; + } + } + + const config = new ClientConfigBuilder() + .addResolver(resolver) + .build(); + + const client = new PolywrapClient(config); + + console.log(`Resolving a wrap://${authority} URI`); + + const res = await client.tryResolveUri({ + uri: Uri.from(`wrap://${authority}/foo`) + }); + + console.log(res) + + if (res.ok && res.value.type === "uri") { + console.log(`Received URI '${res.value.uri}'`); + console.log("Success!"); + } +} diff --git a/clients/js/src/features/config_resolver_ext.ts b/clients/js/src/features/config_resolver_ext.ts new file mode 100644 index 0000000..8e5b87b --- /dev/null +++ b/clients/js/src/features/config_resolver_ext.ts @@ -0,0 +1,66 @@ +import { Input } from "../input"; + +import { + ClientConfigBuilder, + PolywrapClient, + Uri, + ExtendableUriResolver +} from "@polywrap/client-js"; +import { + PluginPackage +} from "@polywrap/plugin-js"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + authority: unknown; + result: unknown; + }>(input); + const authority = Input.expectString(inputObj.authority); + const result = Input.expectString(inputObj.result); + + console.log("Creating CustomResolverExt Plugin"); + + const customResolverExt = { + uri: "wrap://plugin/custom-resolver", + plugin: PluginPackage.from(() => ({ + tryResolveUri: async (args: { authority: string }) => { + + if (args.authority === authority) { + return { + manifest: null, + uri: Uri.from(result).uri + }; + } + + return null; + } + })) + }; + + console.log("Adding CustomResolverExt & ExtendableUriResolver to ClientConfig"); + + const config = new ClientConfigBuilder() + .addPackage( + customResolverExt.uri, + customResolverExt.plugin + ) + .addInterfaceImplementation( + ExtendableUriResolver.defaultExtInterfaceUris[0].uri, + customResolverExt.uri + ) + .addResolver(new ExtendableUriResolver()) + .build(); + + const client = new PolywrapClient(config); + + console.log(`Resolving a wrap://${authority} URI`); + + const res = await client.tryResolveUri({ + uri: Uri.from(`wrap://${authority}/foo`) + }); + + if (res.ok && res.value.type === "uri") { + console.log(`Received URI '${res.value.uri}'`); + console.log("Success!"); + } +} diff --git a/clients/js/src/features/config_uri_redirect.ts b/clients/js/src/features/config_uri_redirect.ts new file mode 100644 index 0000000..693e913 --- /dev/null +++ b/clients/js/src/features/config_uri_redirect.ts @@ -0,0 +1,29 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + from: unknown; + to: unknown; + }>(input); + const from = Input.expectUri(inputObj.from).uri; + const to = Input.expectUri(inputObj.to).uri; + + console.log("Adding URI Redirect to ClientConfig"); + + const config = new ClientConfigBuilder() + .addRedirect(from, to) + .build(); + + const client = new PolywrapClient(config); + + console.log("Resolving Redirect"); + + const result = await client.tryResolveUri({ uri: from }); + + if (result.ok && result.value.type === "uri") { + console.log(`Received URI '${result.value.uri}'`); + console.log("Success!"); + } +} diff --git a/clients/js/src/features/invoke_plugin.ts b/clients/js/src/features/invoke_plugin.ts new file mode 100644 index 0000000..b083f3e --- /dev/null +++ b/clients/js/src/features/invoke_plugin.ts @@ -0,0 +1,42 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; +import { PluginPackage } from "@polywrap/plugin-js"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + uri: unknown; + method: unknown; + args: unknown; + }>(input); + const uri = Input.expectUri(inputObj.uri).uri; + const method = Input.expectString(inputObj.method); + const args = Input.expectObject>( + inputObj.args + ); + + const pluginPackage = PluginPackage.from(() => ({ + add: (args: { a: number, b: number }) => { + return args.a + args.b; + } + })); + + const config = new ClientConfigBuilder() + .addPackage(uri, pluginPackage) + .build(); + + const client = new PolywrapClient(config); + + console.log(`Invoking ${method}`); + + const result = await client.invoke({ + uri, + method, + args + }); + + if (result.ok) { + console.log(`Received: ${result.value}`); + console.log("Success!"); + } +} diff --git a/clients/js/src/features/invoke_wrap_wasm_v0_1.ts b/clients/js/src/features/invoke_wrap_wasm_v0_1.ts new file mode 100644 index 0000000..f5ec729 --- /dev/null +++ b/clients/js/src/features/invoke_wrap_wasm_v0_1.ts @@ -0,0 +1,54 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; +import { WasmPackage } from "@polywrap/wasm-js"; + +import path from "path"; +import fs from "fs"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + directory: unknown; + method: unknown; + args: unknown; + }>(input); + const wrapDir = Input.expectRootDir( + inputObj.directory, + path.join(__dirname, "../../../../") + ); + const method = Input.expectString(inputObj.method); + const args = Input.expectObject>( + inputObj.args + ); + + const manifest = fs.readFileSync( + path.join(wrapDir, "wrap.info") + ); + const wasmModule = fs.readFileSync( + path.join(wrapDir, "wrap.wasm") + ); + + const wrapPackage = WasmPackage.from( + manifest, + wasmModule + ); + + const config = new ClientConfigBuilder() + .addPackage("embed/foo", wrapPackage) + .build(); + + const client = new PolywrapClient(config); + + console.log(`Invoking ${method}`); + + const result = await client.invoke({ + uri: "embed/foo", + method, + args + }); + + if (result.ok) { + console.log(`Received: ${result.value}`); + console.log("Success!"); + } +} diff --git a/clients/js/src/features/resolve_ens_contenthash.ts b/clients/js/src/features/resolve_ens_contenthash.ts new file mode 100644 index 0000000..f2a659b --- /dev/null +++ b/clients/js/src/features/resolve_ens_contenthash.ts @@ -0,0 +1,27 @@ +import { Input } from "../input"; + +import { + ClientConfigBuilder, + PolywrapClient +} from "@polywrap/client-js"; + +export async function runTestCase(input: unknown): Promise { + const uri = Input.expectUri(input); + + console.log(`URI Authority: ${uri.authority}`); + + const config = new ClientConfigBuilder() + .addDefaults() + .build(); + + const client = new PolywrapClient(config); + + console.log(`Resolving: ${uri}`); + + const result = await client.tryResolveUri({ uri }); + + if (result.ok) { + console.log(`Received: ${result.value.type}`); + console.log("Success!"); + } +} diff --git a/clients/js/src/features/resolve_ens_text_record.ts b/clients/js/src/features/resolve_ens_text_record.ts new file mode 100644 index 0000000..f2a659b --- /dev/null +++ b/clients/js/src/features/resolve_ens_text_record.ts @@ -0,0 +1,27 @@ +import { Input } from "../input"; + +import { + ClientConfigBuilder, + PolywrapClient +} from "@polywrap/client-js"; + +export async function runTestCase(input: unknown): Promise { + const uri = Input.expectUri(input); + + console.log(`URI Authority: ${uri.authority}`); + + const config = new ClientConfigBuilder() + .addDefaults() + .build(); + + const client = new PolywrapClient(config); + + console.log(`Resolving: ${uri}`); + + const result = await client.tryResolveUri({ uri }); + + if (result.ok) { + console.log(`Received: ${result.value.type}`); + console.log("Success!"); + } +} diff --git a/clients/js/src/features/resolve_file.ts b/clients/js/src/features/resolve_file.ts new file mode 100644 index 0000000..f726ba1 --- /dev/null +++ b/clients/js/src/features/resolve_file.ts @@ -0,0 +1,36 @@ +import { Input } from "../input"; + +import { + ClientConfigBuilder, + PolywrapClient, + Uri +} from "@polywrap/client-js"; +import path from "path"; + +export async function runTestCase(input: unknown): Promise { + const inputUri = Input.expectUri(input); + const uri = Uri.from( + inputUri.authority + "/" + + Input.expectRootDir( + inputUri.path, + path.join(__dirname, "../../../../") + ) + ); + + console.log(`URI Authority: ${uri.authority}`); + + const config = new ClientConfigBuilder() + .addDefaults() + .build(); + + const client = new PolywrapClient(config); + + console.log(`Resolving: ${input}`); + + const result = await client.tryResolveUri({ uri }); + + if (result.ok) { + console.log(`Received: ${result.value.type}`); + console.log("Success!"); + } +} diff --git a/clients/js/src/features/resolve_http.ts b/clients/js/src/features/resolve_http.ts new file mode 100644 index 0000000..f2a659b --- /dev/null +++ b/clients/js/src/features/resolve_http.ts @@ -0,0 +1,27 @@ +import { Input } from "../input"; + +import { + ClientConfigBuilder, + PolywrapClient +} from "@polywrap/client-js"; + +export async function runTestCase(input: unknown): Promise { + const uri = Input.expectUri(input); + + console.log(`URI Authority: ${uri.authority}`); + + const config = new ClientConfigBuilder() + .addDefaults() + .build(); + + const client = new PolywrapClient(config); + + console.log(`Resolving: ${uri}`); + + const result = await client.tryResolveUri({ uri }); + + if (result.ok) { + console.log(`Received: ${result.value.type}`); + console.log("Success!"); + } +} diff --git a/clients/js/src/features/resolve_instance.ts b/clients/js/src/features/resolve_instance.ts new file mode 100644 index 0000000..ebef7c8 --- /dev/null +++ b/clients/js/src/features/resolve_instance.ts @@ -0,0 +1,45 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; +import { WasmWrapper } from "@polywrap/wasm-js"; + +import path from "path"; +import fs from "fs"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + directory: unknown; + uri: unknown; + }>(input); + const wrapDir = Input.expectRootDir( + inputObj.directory, + path.join(__dirname, "../../../../") + ); + const uri = Input.expectUri(inputObj.uri).uri; + + const manifest = fs.readFileSync( + path.join(wrapDir, "wrap.info") + ); + const wasmModule = fs.readFileSync( + path.join(wrapDir, "wrap.wasm") + ); + const wrapInstance = await WasmWrapper.from( + manifest, + wasmModule + ); + + const config = new ClientConfigBuilder() + .addWrapper(uri, wrapInstance) + .build(); + + const client = new PolywrapClient(config); + + console.log(`Resolving URI: ${uri}`); + + const result = await client.tryResolveUri({ uri }); + + if (result.ok) { + console.log(`Received: ${result.value.type}`); + console.log("Success!"); + } +} diff --git a/clients/js/src/features/resolve_ipfs.ts b/clients/js/src/features/resolve_ipfs.ts new file mode 100644 index 0000000..f2a659b --- /dev/null +++ b/clients/js/src/features/resolve_ipfs.ts @@ -0,0 +1,27 @@ +import { Input } from "../input"; + +import { + ClientConfigBuilder, + PolywrapClient +} from "@polywrap/client-js"; + +export async function runTestCase(input: unknown): Promise { + const uri = Input.expectUri(input); + + console.log(`URI Authority: ${uri.authority}`); + + const config = new ClientConfigBuilder() + .addDefaults() + .build(); + + const client = new PolywrapClient(config); + + console.log(`Resolving: ${uri}`); + + const result = await client.tryResolveUri({ uri }); + + if (result.ok) { + console.log(`Received: ${result.value.type}`); + console.log("Success!"); + } +} diff --git a/clients/js/src/features/resolve_package.ts b/clients/js/src/features/resolve_package.ts new file mode 100644 index 0000000..9bf77f2 --- /dev/null +++ b/clients/js/src/features/resolve_package.ts @@ -0,0 +1,45 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; +import { WasmPackage } from "@polywrap/wasm-js"; + +import path from "path"; +import fs from "fs"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + directory: unknown; + uri: unknown; + }>(input); + const wrapDir = Input.expectRootDir( + inputObj.directory, + path.join(__dirname, "../../../../") + ) + const uri = Input.expectUri(inputObj.uri).uri; + + const manifest = fs.readFileSync( + path.join(wrapDir, "wrap.info") + ); + const wasmModule = fs.readFileSync( + path.join(wrapDir, "wrap.wasm") + ); + const wrapPackage = WasmPackage.from( + manifest, + wasmModule + ); + + const config = new ClientConfigBuilder() + .addPackage(uri, wrapPackage) + .build(); + + const client = new PolywrapClient(config); + + console.log(`Resolving URI: ${uri}`); + + const result = await client.tryResolveUri({ uri }); + + if (result.ok) { + console.log(`Received: ${result.value.type}`); + console.log("Success!"); + } +} diff --git a/clients/js/src/features/resolve_redirect.ts b/clients/js/src/features/resolve_redirect.ts new file mode 100644 index 0000000..b515cc9 --- /dev/null +++ b/clients/js/src/features/resolve_redirect.ts @@ -0,0 +1,27 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + from: unknown; + to: unknown; + }>(input); + const from = Input.expectUri(inputObj.from).uri; + const to = Input.expectUri(inputObj.to).uri; + + const config = new ClientConfigBuilder() + .addRedirect(from, to) + .build(); + + const client = new PolywrapClient(config); + + console.log("Resolving Redirect"); + + const result = await client.tryResolveUri({ uri: from }); + + if (result.ok && result.value.type === "uri") { + console.log(`Received URI '${result.value.uri}'`); + console.log("Success!"); + } +} diff --git a/clients/js/src/features/subinvoke_plugin_wrap.ts b/clients/js/src/features/subinvoke_plugin_wrap.ts new file mode 100644 index 0000000..ba74437 --- /dev/null +++ b/clients/js/src/features/subinvoke_plugin_wrap.ts @@ -0,0 +1,76 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient, Uri } from "@polywrap/client-js"; +import { WasmPackage } from "@polywrap/wasm-js"; +import { PluginPackage } from "@polywrap/plugin-js"; + +import path from "path"; +import fs from "fs"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + directory: unknown; + method: unknown; + args: unknown; + }>(input); + const wrapDir = Input.expectRootDir( + inputObj.directory, + path.join(__dirname, "../../../../") + ); + const method = Input.expectString(inputObj.method); + const args = Input.expectObject>( + inputObj.args + ); + + const manifest = fs.readFileSync( + path.join(wrapDir, "wrap.info") + ); + const wasmModule = fs.readFileSync( + path.join(wrapDir, "wrap.wasm") + ); + + const wrap = { + package: WasmPackage.from(manifest, wasmModule), + uri: Uri.from("embed/foo") + }; + + const plugin = { + package: PluginPackage.from(() => ({ + performSubinvoke: async (_, client) => { + console.log(`Subinvoking ${method}`); + const res = await client.invoke({ + uri: wrap.uri, + method, + args + }); + if (res.ok) { + console.log(`Received: ${res.value}`); + return true; + } else { + return false; + } + } + })), + uri: Uri.from("plugin/bar") + }; + + const config = new ClientConfigBuilder() + .addPackages({ + [wrap.uri.uri]: wrap.package, + [plugin.uri.uri]: plugin.package + }) + .build(); + + const client = new PolywrapClient(config); + + console.log(`Invoking Plugin`); + + const result = await client.invoke({ + uri: plugin.uri, + method: "performSubinvoke" + }); + + if (result.ok && result.value) { + console.log("Success!"); + } +} diff --git a/clients/js/src/features/subinvoke_wrap_plugin.ts b/clients/js/src/features/subinvoke_wrap_plugin.ts new file mode 100644 index 0000000..ba91100 --- /dev/null +++ b/clients/js/src/features/subinvoke_wrap_plugin.ts @@ -0,0 +1,66 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; +import { WasmPackage } from "@polywrap/wasm-js"; +import { PluginPackage } from "@polywrap/plugin-js"; + +import path from "path"; +import fs from "fs"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + rootWrap: unknown; + subWrapUri: unknown; + method: unknown; + args: unknown; + }>(input); + const subWrapUri = Input.expectUri(inputObj.subWrapUri); + const method = Input.expectString(inputObj.method); + const args = Input.expectObject>( + inputObj.args + ); + + const rootWrapObj = Input.expectObject<{ + directory: unknown; + uri: unknown; + }>(inputObj.rootWrap); + + const rootWrapDirectory = Input.expectRootDir( + rootWrapObj.directory, + path.join(__dirname, "../../../../") + ); + + const rootWrapUri = Input.expectUri(rootWrapObj.uri); + const rootWrapPackage = WasmPackage.from( + fs.readFileSync(path.join(rootWrapDirectory, "wrap.info")), + fs.readFileSync(path.join(rootWrapDirectory, "wrap.wasm")) + ); + + const subWrapPackage = PluginPackage.from(() => ({ + add: (args: { a: number, b: number }) => { + return args.a + args.b; + } + })); + + const config = new ClientConfigBuilder() + .addPackages({ + [rootWrapUri.uri]: rootWrapPackage, + [subWrapUri.uri]: subWrapPackage + }) + .build(); + + const client = new PolywrapClient(config); + + console.log(`Invoking ${method}`); + + const result = await client.invoke({ + uri: rootWrapUri, + method, + args + }); + + if (result.ok) { + console.log(`Received: ${result.value}`); + console.log("Success!"); + } +} diff --git a/clients/js/src/features/subinvoke_wrap_wrap.ts b/clients/js/src/features/subinvoke_wrap_wrap.ts new file mode 100644 index 0000000..dda95d2 --- /dev/null +++ b/clients/js/src/features/subinvoke_wrap_wrap.ts @@ -0,0 +1,78 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient, Uri } from "@polywrap/client-js"; +import { WasmPackage } from "@polywrap/wasm-js"; + +import path from "path"; +import fs from "fs"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + rootWrap: unknown; + subWrap: unknown; + method: unknown; + args: unknown; + }>(input); + const method = Input.expectString(inputObj.method); + const args = Input.expectObject>( + inputObj.args + ); + + const verifyWrap = (wrap: unknown, name: string): { + directory: string; + uri: Uri; + } => { + const wrapObj = Input.expectObject<{ + directory: unknown; + uri: unknown; + }>(wrap); + + const directory = Input.expectRootDir( + wrapObj.directory, + path.join(__dirname, "../../../../") + ); + const uri = Input.expectUri(wrapObj.uri); + + return { + directory, + uri + }; + } + + const rootInput = verifyWrap(inputObj.rootWrap, "rootWrap"); + const subInput = verifyWrap(inputObj.subWrap, "subWrap"); + + const loadWasmPackage = (wrapDir: string): WasmPackage => + WasmPackage.from( + fs.readFileSync(path.join(wrapDir, "wrap.info")), + fs.readFileSync(path.join(wrapDir, "wrap.wasm")) + ); + + const rootWrapUri = rootInput.uri; + const rootWrapPackage = loadWasmPackage(rootInput.directory); + + const subWrapUri = subInput.uri; + const subWrapPackage = loadWasmPackage(subInput.directory); + + const config = new ClientConfigBuilder() + .addPackages({ + [rootWrapUri.uri]: rootWrapPackage, + [subWrapUri.uri]: subWrapPackage + }) + .build(); + + const client = new PolywrapClient(config); + + console.log(`Invoking ${method}`); + + const result = await client.invoke({ + uri: rootWrapUri, + method, + args + }); + + if (result.ok) { + console.log(`Received: ${result.value}`); + console.log("Success!"); + } +} diff --git a/clients/js/src/features/uri.ts b/clients/js/src/features/uri.ts new file mode 100644 index 0000000..4c9e59d --- /dev/null +++ b/clients/js/src/features/uri.ts @@ -0,0 +1,14 @@ +import { Input } from "../input"; + +import { Uri } from "@polywrap/client-js"; + +export function runTestCase(input: unknown): void { + const str = Input.expectString(input); + + const uri = new Uri(str); + + console.log("WRAP URI successfully created."); + console.log(`uri - ${uri}`); + console.log(`uri.authority - ${uri.authority}`); + console.log(`uri.path - ${uri.path}`); +} diff --git a/clients/js/src/features/wrap_feature_env_vars.ts b/clients/js/src/features/wrap_feature_env_vars.ts new file mode 100644 index 0000000..54deb4a --- /dev/null +++ b/clients/js/src/features/wrap_feature_env_vars.ts @@ -0,0 +1,77 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient, Uri } from "@polywrap/client-js"; +import path from "path"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + mainEnv: unknown; + extEnv: unknown; + }>(input); + + const mainEnv = Input.expectObject>( + inputObj.mainEnv + ); + const extEnv = Input.expectObject>( + inputObj.extEnv + ); + + const root = path.join(__dirname, "../../../../wraps"); + const externalWrapperPath = path.join(root, "/env-type/00-external/implementations/as"); + const { uri: externalWrapperUri } = Uri.from( + `file/${externalWrapperPath}` + ); + + const wrapperPath = path.join(root, "/env-type/01-main/implementations/as"); + const { uri: wrapperUri } = Uri.from(`file/${wrapperPath}`); + + const envs = { + [wrapperUri]: mainEnv, + [externalWrapperUri]: extEnv, + }; + + const config = new ClientConfigBuilder() + .addDefaults() + .addEnvs(envs) + .addRedirect("ens/external-env.polywrap.eth", externalWrapperUri) + .build(); + + const client = new PolywrapClient(config); + + console.log("Invoking methodRequireEnv"); + + const methodRequireEnvResult = await client.invoke({ + uri: wrapperUri, + method: "methodRequireEnv", + args: { + arg: "string", + }, + }); + + if (!methodRequireEnvResult.ok) throw methodRequireEnvResult.error; + + console.log("Success!"); + + console.log("Invoking subinvokeEnvMethod"); + + const subinvokeEnvMethodResult = await client.invoke<{ + local: unknown, + external: unknown + }>({ + uri: wrapperUri, + method: "subinvokeEnvMethod", + args: { + arg: "string", + }, + }); + + if (!subinvokeEnvMethodResult.ok) throw subinvokeEnvMethodResult.error; + + console.log( + "response.local exists:", !!subinvokeEnvMethodResult.value.local + ); + console.log( + "response.external exists:", !!subinvokeEnvMethodResult.value.external + ); + console.log("Success!") +} diff --git a/clients/js/src/features/wrap_feature_interface_invoke.ts b/clients/js/src/features/wrap_feature_interface_invoke.ts new file mode 100644 index 0000000..2f8633b --- /dev/null +++ b/clients/js/src/features/wrap_feature_interface_invoke.ts @@ -0,0 +1,35 @@ +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; +import path from "path"; + +export async function runTestCase(_: unknown): Promise { + const root = path.join(__dirname, "../../../../wraps"); + const interfaceUri = "wrap://ens/interface.eth"; + const implementationPath = path.join(root, "/interface-invoke/01-implementation/implementations/as"); + const implementationUri = `fs/${implementationPath}`; + + const config = new ClientConfigBuilder() + .addDefaults() + .addInterfaceImplementation(interfaceUri, implementationUri); + + const client = new PolywrapClient(config.build()); + + const wrapperPath = path.join(root, "/interface-invoke/02-wrapper/implementations/as"); + const wrapperUri = `fs/${wrapperPath}`; + + console.log("Invoking moduleMethod"); + + const result = await client.invoke({ + uri: wrapperUri, + method: "moduleMethod", + args: { + arg: { + uint8: 1, + str: "Test String 1", + }, + }, + }); + + if (!result.ok) throw result.error; + + console.log("Success!"); +} diff --git a/clients/js/src/features/wrap_type_bigint.ts b/clients/js/src/features/wrap_type_bigint.ts new file mode 100644 index 0000000..58ff640 --- /dev/null +++ b/clients/js/src/features/wrap_type_bigint.ts @@ -0,0 +1,36 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; +import path from "path"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + args: unknown; + }>(input); + const args = Input.expectObject>( + inputObj.args + ); + + const root = path.join(__dirname, "../../../../wraps"); + const uri = `fs/${root}/bigint-type/implementations/as`; + + const config = new ClientConfigBuilder() + .addDefaults() + .build(); + const client = new PolywrapClient(config); + + console.log("Invoking method"); + + let response = await client.invoke({ + uri, + method: "method", + args: args, + }); + + if (!response.ok) throw response.error; + + const bigint = BigInt(response.value); + + console.log("Result:", bigint.toString()); + console.log("Success!"); +} diff --git a/clients/js/src/features/wrap_type_bignumber.ts b/clients/js/src/features/wrap_type_bignumber.ts new file mode 100644 index 0000000..06ff5a3 --- /dev/null +++ b/clients/js/src/features/wrap_type_bignumber.ts @@ -0,0 +1,37 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; +import BigNumber from "bignumber.js"; +import path from "path"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + args: unknown; + }>(input); + const args = Input.expectObject>( + inputObj.args + ); + + const root = path.join(__dirname, "../../../../wraps"); + const uri = `fs/${root}/bignumber-type/implementations/as`; + + const config = new ClientConfigBuilder() + .addDefaults() + .build(); + const client = new PolywrapClient(config); + + console.log("Invoking method"); + + let response = await client.invoke({ + uri, + method: "method", + args: args, + }); + + if (!response.ok) throw response.error; + + const bignumber = new BigNumber(response.value); + + console.log("Result:", bignumber.toString()); + console.log("Success!"); +} diff --git a/clients/js/src/features/wrap_type_bytes.ts b/clients/js/src/features/wrap_type_bytes.ts new file mode 100644 index 0000000..5d8d3d4 --- /dev/null +++ b/clients/js/src/features/wrap_type_bytes.ts @@ -0,0 +1,36 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; +import path from "path"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + method: unknown; + args: unknown; + }>(input); + const method = Input.expectString(inputObj.method); + const args = Input.expectObject>( + inputObj.args + ); + + const root = path.join(__dirname, "../../../../wraps"); + const uri = `fs/${root}/bytes-type/implementations/as`; + + const config = new ClientConfigBuilder() + .addDefaults() + .build(); + const client = new PolywrapClient(config); + + console.log(`Invoking ${method}`); + + let response = await client.invoke({ + uri, + method, + args: args, + }); + + if (!response.ok) throw response.error; + + console.log("Result:", JSON.stringify(Array.apply([], response.value))); + console.log("Success!"); +} diff --git a/clients/js/src/features/wrap_type_enum.ts b/clients/js/src/features/wrap_type_enum.ts new file mode 100644 index 0000000..21b7fb9 --- /dev/null +++ b/clients/js/src/features/wrap_type_enum.ts @@ -0,0 +1,36 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; +import path from "path"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + method: unknown; + args: unknown; + }>(input); + const method = Input.expectString(inputObj.method); + const args = Input.expectObject>( + inputObj.args + ); + + const root = path.join(__dirname, "../../../../wraps"); + const uri = `fs/${root}/enum-type/implementations/as`; + + const config = new ClientConfigBuilder() + .addDefaults() + .build(); + const client = new PolywrapClient(config); + + console.log(`Invoking ${method}`); + + let response = await client.invoke({ + uri, + method, + args: args, + }); + + if (!response.ok) throw response.error; + + console.log("Result:", response.value); + console.log("Success!"); +} diff --git a/clients/js/src/features/wrap_type_ints.ts b/clients/js/src/features/wrap_type_ints.ts new file mode 100644 index 0000000..eb6ca1a --- /dev/null +++ b/clients/js/src/features/wrap_type_ints.ts @@ -0,0 +1,36 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; +import path from "path"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + method: unknown; + args: unknown; + }>(input); + const method = Input.expectString(inputObj.method); + const args = Input.expectObject>( + inputObj.args + ); + + const root = path.join(__dirname, "../../../../wraps"); + const uri = `fs/${root}/numbers-type/implementations/as`; + + const config = new ClientConfigBuilder() + .addDefaults() + .build(); + const client = new PolywrapClient(config); + + console.log(`Invoking ${method}`); + + let response = await client.invoke({ + uri, + method, + args: args, + }); + + if (!response.ok) throw response.error; + + console.log("Result:", response.value); + console.log("Success!"); +} diff --git a/clients/js/src/features/wrap_type_json.ts b/clients/js/src/features/wrap_type_json.ts new file mode 100644 index 0000000..0eedca6 --- /dev/null +++ b/clients/js/src/features/wrap_type_json.ts @@ -0,0 +1,36 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; +import path from "path"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + method: unknown; + args: unknown; + }>(input); + const method = Input.expectString(inputObj.method); + const args = Input.expectObject>( + inputObj.args + ); + + const root = path.join(__dirname, "../../../../wraps"); + const uri = `fs/${root}/json-type/implementations/as`; + + const config = new ClientConfigBuilder() + .addDefaults() + .build(); + const client = new PolywrapClient(config); + + console.log(`Invoking ${method}`); + + let response = await client.invoke({ + uri, + method, + args: args, + }); + + if (!response.ok) throw response.error; + + console.log("Result:", response.value); + console.log("Success!"); +} diff --git a/clients/js/src/features/wrap_type_map.ts b/clients/js/src/features/wrap_type_map.ts new file mode 100644 index 0000000..0fd5eb6 --- /dev/null +++ b/clients/js/src/features/wrap_type_map.ts @@ -0,0 +1,47 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; +import path from "path"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + map: unknown; + }>(input); + const map = Input.expectObject>( + inputObj.map + ); + + const root = path.join(__dirname, "../../../../wraps"); + const uri = `fs/${root}/map-type/implementations/as`; + + const config = new ClientConfigBuilder() + .addDefaults() + .build(); + const client = new PolywrapClient(config); + + const mapClass = new Map(); + + for (const entry of Object.entries(map)) { + mapClass.set(entry[0], entry[1] as number); + } + + console.log("Invoking returnMap"); + + const returnMapResponse1 = await client.invoke>({ + uri, + method: "returnMap", + args: { + map: mapClass, + }, + }); + + if (!returnMapResponse1.ok) throw returnMapResponse1.error; + + const returnedMap = returnMapResponse1.value; + + for (const entry of Object.entries(map)) { + console.log(`key '${entry[0]}' = ${returnedMap.get(entry[0])}`); + } + + console.log("Success!"); +} diff --git a/clients/js/src/features/wrap_type_object.ts b/clients/js/src/features/wrap_type_object.ts new file mode 100644 index 0000000..4720813 --- /dev/null +++ b/clients/js/src/features/wrap_type_object.ts @@ -0,0 +1,36 @@ +import { Input } from "../input"; + +import { ClientConfigBuilder, PolywrapClient } from "@polywrap/client-js"; +import path from "path"; + +export async function runTestCase(input: unknown): Promise { + const inputObj = Input.expectObject<{ + method: unknown; + args: unknown; + }>(input); + const method = Input.expectString(inputObj.method); + const args = Input.expectObject>( + inputObj.args + ); + + const root = path.join(__dirname, "../../../../wraps"); + const uri = `fs/${root}/object-type/implementations/as`; + + const config = new ClientConfigBuilder() + .addDefaults() + .build(); + const client = new PolywrapClient(config); + + console.log(`Invoking ${method}`); + + let response = await client.invoke({ + uri, + method, + args: args, + }); + + if (!response.ok) throw response.error; + + console.log("Result:", JSON.stringify(response.value, null, 2)); + console.log("Success!"); +} diff --git a/clients/js/src/index.ts b/clients/js/src/index.ts new file mode 100644 index 0000000..3c94be8 --- /dev/null +++ b/clients/js/src/index.ts @@ -0,0 +1,56 @@ +import { loadFeatureSpecs } from "./load-feature-specs"; + +import path from "path"; + +async function main() { + // Optional 2nd argument, spec filter + let filter = process.argv.length > 2 ? process.argv[2] : undefined; + + const specs = loadFeatureSpecs( + path.join(__dirname, "../../../specs") + ); + + for (const specName of Object.keys(specs)) { + if (filter && filter !== specName) { + continue; + } + + const spec = specs[specName]; + const feature = await import(`./features/${specName}`); + + if (!feature.runTestCase || typeof feature.runTestCase !== "function") { + if (!spec.required) { + continue; + } + throw Error(`Invalid feature definition: ${feature}`); + } + + console.log("===================================="); + console.log(`Begin Feature Spec Test Cases [${specName}]`); + console.log("===================================="); + + const testCases = specs[specName].cases; + + for (const testCase of Object.keys(testCases)) { + console.log(`$Test Start [${specName}.${testCase}]`); + + try { + await feature.runTestCase(testCases[testCase].input); + } catch (e) { + console.error(`!Test Error [${specName}.${testCase}]`); + console.error(e); + } + } + + console.log("===================================="); + console.log(`End Feature Spec Test Cases [${specName}]`); + console.log("===================================="); + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/clients/js/src/input.ts b/clients/js/src/input.ts new file mode 100644 index 0000000..ba2af67 --- /dev/null +++ b/clients/js/src/input.ts @@ -0,0 +1,34 @@ +import { Uri } from "@polywrap/client-js"; + +export const Input = { + expectObject: (input: unknown): T => { + if (!input || typeof input !== "object") { + throw Error("expected an object"); + } + return input as T; + }, + expectRootDir: (input: unknown, rootDir: string): string => { + if (typeof input !== "string" || !input.includes("$ROOT/")) { + throw Error("expected a string that starts with $ROOT/"); + } + return input.replace("$ROOT/", rootDir); + }, + expectString: (input: unknown): string => { + if (typeof input !== "string") { + throw Error("expected a string"); + } + return input; + }, + expectUri: (input: unknown): Uri => { + if (typeof input !== "string" || !Uri.isValidUri(input)) { + throw Error("expected a valid WRAP URI"); + } + return Uri.from(input); + }, + expectArray: (input: unknown): Array => { + if (!input || !Array.isArray(input)) { + throw Error("expected an array"); + } + return input as Array; + } +} diff --git a/clients/js/src/load-feature-specs.ts b/clients/js/src/load-feature-specs.ts new file mode 100644 index 0000000..6f21aa7 --- /dev/null +++ b/clients/js/src/load-feature-specs.ts @@ -0,0 +1,68 @@ +import fs from "fs"; +import path from "path"; +import yaml from "yaml"; + +export interface TestCases { + [testCase: string]: { + input: unknown; + } +} + +export interface Spec { + required: boolean; + cases: TestCases; +} + +export interface FeatureSpecs { + [spec: string]: Spec; +} + +export function loadFeatureSpecs(directory: string): FeatureSpecs { + const featureSpecs: FeatureSpecs = { }; + + const specFiles = fs.readdirSync( + directory + ); + + for (const specFile of specFiles) { + const specYaml = fs.readFileSync( + path.join(directory, specFile), + "utf-8" + ); + + const spec = yaml.parse(specYaml); + + if (!spec || typeof spec !== "object") { + throw Error(`Failed to load feature-spec ${specFile}, must be an object.`); + } + + const required = spec.required; + + if (typeof required !== "boolean") { + throw Error(`Failed to load feature-spec ${specFile}, must have property 'required'.`); + } + + const cases = spec.cases; + + if (typeof cases !== "object") { + throw Error(`Failed to load feature-spec ${specFile}, must have property 'cases'.`); + } + + for (const testCase of Object.keys(cases)) { + if (!cases[testCase].input) { + throw Error( + `Failed to load feature spec test case ${specFile}.cases.${testCase}, missing 'input' property` + ); + } + } + + const specName = specFile.replace( + path.extname(specFile), + "" + ); + + featureSpecs[specName] = spec; + } + + return featureSpecs; +} diff --git a/clients/js/tsconfig.json b/clients/js/tsconfig.json new file mode 100644 index 0000000..2e01ca5 --- /dev/null +++ b/clients/js/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "esModuleInterop": true, + "lib": [ + "es2015", + "es5", + "dom" + ], + "downlevelIteration": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "declaration": true, + "preserveSymlinks": true, + "preserveWatchOutput": true, + "pretty": false, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "noImplicitAny": true, + "noImplicitReturns": true, + "noUnusedLocals": true, + "module": "commonjs", + "sourceMap": true, + "target": "es5", + "resolveJsonModule": true, + "strictNullChecks": true + }, + "include": [ + "./src/**/*" + ], +} diff --git a/clients/js/yarn.lock b/clients/js/yarn.lock new file mode 100644 index 0000000..f83cb07 --- /dev/null +++ b/clients/js/yarn.lock @@ -0,0 +1,1145 @@ +# 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" + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@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.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.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.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.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": + 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.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.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": + 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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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== + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@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.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@polywrap/asyncify-js/-/asyncify-js-0.10.1.tgz#00d656a39bfd54c1b8af82adf648264b0415259b" + integrity sha512-qXD2GNAoG18sDLPOtN3bbdEJUM+5hhII2EJkcAREJSBpi4g7yFxlySz/qQGzDnlIRNl9MGNgaf+TYbpQnNBeLw== + +"@polywrap/client-config-builder-js@0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@polywrap/client-config-builder-js/-/client-config-builder-js-0.10.1.tgz#d52430645b4530b235f97318ccdeef256eb4c425" + integrity sha512-cXQXe+u+r9WVCovp507FmERWWFa6OJSl8ZQd3QpKnIaNeBmXbAa4WoM5889VTPe2oe5iDgo4jR4U/fHBg8qoyQ== + dependencies: + "@polywrap/concurrent-plugin-js" "~0.10.0" + "@polywrap/core-js" "0.10.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/file-system-plugin-js" "~0.10.0" + "@polywrap/http-plugin-js" "~0.10.0" + "@polywrap/logger-plugin-js" "~0.10.1" + "@polywrap/uri-resolver-extensions-js" "0.10.1" + "@polywrap/uri-resolvers-js" "0.10.1" + "@polywrap/wasm-js" "0.10.1" + base64-to-uint8array "1.0.0" + +"@polywrap/client-js@0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@polywrap/client-js/-/client-js-0.10.1.tgz#d324420b1558d7fb47c6928042c083eef7b3b6f6" + integrity sha512-xIZoGOPPS+J2RjiyEF8A8huMIr0IyN+VEwHWcCUdp7NxTQ1xmve1lxQfbbdE0BC37o5Ni7lJwiIXmAUfhuMyGg== + dependencies: + "@polywrap/client-config-builder-js" "0.10.1" + "@polywrap/core-client-js" "0.10.1" + "@polywrap/core-js" "0.10.1" + "@polywrap/msgpack-js" "0.10.1" + "@polywrap/plugin-js" "0.10.1" + "@polywrap/result" "0.10.1" + "@polywrap/tracing-js" "0.10.1" + "@polywrap/uri-resolver-extensions-js" "0.10.1" + "@polywrap/uri-resolvers-js" "0.10.1" + "@polywrap/wrap-manifest-types-js" "0.10.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/core-client-js@0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@polywrap/core-client-js/-/core-client-js-0.10.1.tgz#7342adfcffe2ce97ce7066c4c8ae1fc54250cb4f" + integrity sha512-ew5B4nNTgzgzqt8KZE06bclhqUrfZbA0D9n2BlyQ4+RfiSTQFoqoN8jN53TuHRFJRmt0v/a/RPRvKujF5mMf9g== + 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/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": + 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/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@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.1": + 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/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/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.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/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/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/uri-resolver-extensions-js@0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@polywrap/uri-resolver-extensions-js/-/uri-resolver-extensions-js-0.10.1.tgz#6385ec63de3d53a8eddedeba10c59f0c8b2de36e" + integrity sha512-dsihLqgC3o76xnhWMH+o0Nol58BBy2KljxSoRGdi1XbEEkdHHKx2qwxfWAjOA83ljGJXToh0IsaxbCUuPEMIZQ== + dependencies: + "@polywrap/core-js" "0.10.1" + "@polywrap/result" "0.10.1" + "@polywrap/uri-resolvers-js" "0.10.1" + "@polywrap/wasm-js" "0.10.1" + "@polywrap/wrap-manifest-types-js" "0.10.1" + +"@polywrap/uri-resolvers-js@0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@polywrap/uri-resolvers-js/-/uri-resolvers-js-0.10.1.tgz#8ea24ba9348f31da0ccc691f92024c864db27d00" + integrity sha512-/PtGzoR/PwQPIr630iV15/ah7yu/zKYMzm0TfUIFpF+pRWfIR/6VD086d20PLE6h6UE4Jd5VHzEIXeb6FqdbgA== + dependencies: + "@polywrap/core-js" "0.10.1" + "@polywrap/result" "0.10.1" + "@polywrap/wrap-manifest-types-js" "0.10.1" + +"@polywrap/wasm-js@0.10.1": + version "0.10.1" + resolved "https://registry.yarnpkg.com/@polywrap/wasm-js/-/wasm-js-0.10.1.tgz#21e208e1e65417a41478a8828131d6e0cefcfdcb" + integrity sha512-ZWd/bqbpjyxp7NFx34SNlRvK4S3MF4s/6AWdauIHHZORUyRJvemXtmZSh8etTkltZzXTl+PTJ9xYPM5oEIs4nw== + dependencies: + "@polywrap/asyncify-js" "0.10.1" + "@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/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" + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + +"@types/json-schema@^7.0.6": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/node@^18.14.6": + version "18.15.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" + integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== + +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +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== + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +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== + +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" + +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== + +bignumber.js@9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" + integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== + +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== + +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== + +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== + +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" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +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== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +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" + +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" + +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" + +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" + +inherits@^2.0.3, inherits@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +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" + +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== + +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" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +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" + +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== + +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" + +ts-node@10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +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== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +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== + +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.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.1.tgz#3014bf0482dcd15147aa8e56109ce8632cd60ce4" + integrity sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw== + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..74d7b30 --- /dev/null +++ b/install.sh @@ -0,0 +1,3 @@ +cd wraps && ./install.sh && cd ../ +cd verify && ./install.sh && cd ../ +cd clients/js && ./install.sh && cd ../ diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..befcac4 --- /dev/null +++ b/run.sh @@ -0,0 +1,11 @@ +if [ "$1" = "" ] +then + echo "Usage: $0 " + exit +fi + +cd ./clients/$1 +./run.sh $2 + +cd ../../verify +./run.sh $1 $2 diff --git a/specs/config_embed_wrap_package.yaml b/specs/config_embed_wrap_package.yaml new file mode 100644 index 0000000..d4f9b86 --- /dev/null +++ b/specs/config_embed_wrap_package.yaml @@ -0,0 +1,17 @@ +required: true +cases: + sanity: + input: + directory: $ROOT/wraps/numbers-type/implementations/as + method: u8Method + args: + first: 8 + second: 10 + output: + stdout: + - "$Test Start [config_embed_wrap_package.sanity]" + - Reading wrap.info & wrap.wasm from $ROOT/wraps/numbers-type/implementations/as + - Creating WrapPackage from raw wrap.info & wrap.wasm bytes + - Adding WrapPackage to ClientConfig + - Invoking WrapPackage + - Success! diff --git a/specs/config_env_variables.yaml b/specs/config_env_variables.yaml new file mode 100644 index 0000000..7744f0c --- /dev/null +++ b/specs/config_env_variables.yaml @@ -0,0 +1,16 @@ +required: true +cases: + sanity: + input: + uri: wrap://uri/a + env: + str: "foo bar" + num: 5 + output: + stdout: + - "$Test Start [config_env_variables.sanity]" + - Adding Env to ClientConfig + - Fetching Env + - env.str = foo bar + - env.num = 5 + - Success! diff --git a/specs/config_interface_implementations.yaml b/specs/config_interface_implementations.yaml new file mode 100644 index 0000000..96da462 --- /dev/null +++ b/specs/config_interface_implementations.yaml @@ -0,0 +1,16 @@ +required: true +cases: + sanity: + input: + interfaceUri: wrap://uri/animal + implementations: + - wrap://uri/dog + - wrap://uri/cat + - wrap://uri/cow + output: + stdout: + - "$Test Start [config_interface_implementations.sanity]" + - Adding Interface Implementations to ClientConfig + - Getting Implementations + - Found 3 Implementations + - Success! diff --git a/specs/config_plugin_instance.yaml b/specs/config_plugin_instance.yaml new file mode 100644 index 0000000..07d7475 --- /dev/null +++ b/specs/config_plugin_instance.yaml @@ -0,0 +1,16 @@ +required: true +cases: + sanity: + input: + uri: wrap://plugin/counter + method: increment + output: + stdout: + - "$Test Start [config_plugin_instance.sanity]" + - Creating Plugin Instance + - Adding Plugin Instance to ClientConfig + - Invoking Plugin Instance + - counter = 1 + - Invoking Plugin Instance + - counter = 2 + - Success! diff --git a/specs/config_plugin_package.yaml b/specs/config_plugin_package.yaml new file mode 100644 index 0000000..553e7ad --- /dev/null +++ b/specs/config_plugin_package.yaml @@ -0,0 +1,16 @@ +required: true +cases: + sanity: + input: + uri: wrap://plugin/calculator + method: add + args: + a: 8 + b: 10 + output: + stdout: + - "$Test Start [config_plugin_package.sanity]" + - Creating PluginPackage + - Adding PluginPackage to ClientConfig + - Invoking PluginPackage + - Success! diff --git a/specs/config_resolver.yaml b/specs/config_resolver.yaml new file mode 100644 index 0000000..0980e4d --- /dev/null +++ b/specs/config_resolver.yaml @@ -0,0 +1,13 @@ +required: true +cases: + sanity: + input: + authority: custom + result: wrap://uri/result + output: + stdout: + - "$Test Start [config_resolver.sanity]" + - Adding Resolver to ClientConfig + - Resolving a wrap://custom URI + - Received URI 'wrap://uri/result' + - Success! diff --git a/specs/config_resolver_ext.yaml b/specs/config_resolver_ext.yaml new file mode 100644 index 0000000..78b32bb --- /dev/null +++ b/specs/config_resolver_ext.yaml @@ -0,0 +1,14 @@ +required: true +cases: + sanity: + input: + authority: custom + result: wrap://uri/result + output: + stdout: + - "$Test Start [config_resolver_ext.sanity]" + - Creating CustomResolverExt Plugin + - Adding CustomResolverExt & ExtendableUriResolver to ClientConfig + - Resolving a wrap://custom URI + - Received URI 'wrap://uri/result' + - Success! diff --git a/specs/config_uri_redirect.yaml b/specs/config_uri_redirect.yaml new file mode 100644 index 0000000..ea12796 --- /dev/null +++ b/specs/config_uri_redirect.yaml @@ -0,0 +1,13 @@ +required: true +cases: + sanity: + input: + from: wrap://uri/a + to: wrap://uri/b + output: + stdout: + - "$Test Start [config_uri_redirect.sanity]" + - Adding URI Redirect to ClientConfig + - Resolving Redirect + - Received URI 'wrap://uri/b' + - Success! diff --git a/specs/invoke_plugin.yaml b/specs/invoke_plugin.yaml new file mode 100644 index 0000000..eb60fbf --- /dev/null +++ b/specs/invoke_plugin.yaml @@ -0,0 +1,15 @@ +required: true +cases: + sanity: + input: + uri: wrap://plugin/calculator + method: add + args: + a: 8 + b: 10 + output: + stdout: + - "$Test Start [invoke_plugin.sanity]" + - Invoking add + - "Received: 18" + - Success! diff --git a/specs/invoke_wrap_wasm_v0_1.yaml b/specs/invoke_wrap_wasm_v0_1.yaml new file mode 100644 index 0000000..58c3ca0 --- /dev/null +++ b/specs/invoke_wrap_wasm_v0_1.yaml @@ -0,0 +1,15 @@ +required: true +cases: + sanity: + input: + directory: $ROOT/wraps/numbers-type/implementations/as + method: u8Method + args: + first: 8 + second: 10 + output: + stdout: + - "$Test Start [invoke_wrap_wasm_v0_1.sanity]" + - Invoking u8Method + - "Received: 18" + - Success! diff --git a/specs/resolve_ens_contenthash.yaml b/specs/resolve_ens_contenthash.yaml new file mode 100644 index 0000000..055c035 --- /dev/null +++ b/specs/resolve_ens_contenthash.yaml @@ -0,0 +1,11 @@ +required: false +cases: + sanity: + input: wrap://ens/wrap-link.eth + output: + stdout: + - "$Test Start [resolve_ens_contenthash.sanity]" + - "URI Authority: ens" + - "Resolving: wrap://ens/wrap-link.eth" + - "Received: package" + - Success! diff --git a/specs/resolve_ens_text_record.yaml b/specs/resolve_ens_text_record.yaml new file mode 100644 index 0000000..bd078ef --- /dev/null +++ b/specs/resolve_ens_text_record.yaml @@ -0,0 +1,11 @@ +required: false +cases: + sanity: + input: wrap://ens/uniswap.wraps.eth:v3 + output: + stdout: + - "$Test Start [resolve_ens_text_record.sanity]" + - "URI Authority: ens" + - "Resolving: wrap://ens/uniswap.wraps.eth:v3" + - "Received: package" + - Success! diff --git a/specs/resolve_file.yaml b/specs/resolve_file.yaml new file mode 100644 index 0000000..4761bf8 --- /dev/null +++ b/specs/resolve_file.yaml @@ -0,0 +1,20 @@ +required: true +cases: + fs: + input: wrap://fs/$ROOT/wraps/numbers-type/implementations/as + output: + stdout: + - "$Test Start [resolve_file.fs]" + - "URI Authority: fs" + - "Resolving: wrap://fs/$ROOT/wraps/numbers-type/implementations/as" + - "Received: package" + - Success! + file: + input: wrap://file/$ROOT/wraps/numbers-type/implementations/as + output: + stdout: + - "$Test Start [resolve_file.file]" + - "URI Authority: file" + - "Resolving: wrap://file/$ROOT/wraps/numbers-type/implementations/as" + - "Received: package" + - Success! diff --git a/specs/resolve_http.yaml b/specs/resolve_http.yaml new file mode 100644 index 0000000..596883a --- /dev/null +++ b/specs/resolve_http.yaml @@ -0,0 +1,20 @@ +required: true +cases: + http: + input: wrap://http/raw.githubusercontent.com/polywrap/client-readiness/init-scaffolding/wraps/public + output: + stdout: + - "$Test Start [resolve_http.http]" + - "URI Authority: http" + - "Resolving: wrap://http/raw.githubusercontent.com/polywrap/client-readiness/init-scaffolding/wraps/public" + - "Received: package" + - Success! + https: + input: wrap://https/raw.githubusercontent.com/polywrap/client-readiness/init-scaffolding/wraps/public + output: + stdout: + - "$Test Start [resolve_http.https]" + - "URI Authority: https" + - "Resolving: wrap://https/raw.githubusercontent.com/polywrap/client-readiness/init-scaffolding/wraps/public" + - "Received: package" + - Success! diff --git a/specs/resolve_instance.yaml b/specs/resolve_instance.yaml new file mode 100644 index 0000000..df8dca4 --- /dev/null +++ b/specs/resolve_instance.yaml @@ -0,0 +1,12 @@ +required: true +cases: + sanity: + input: + directory: $ROOT/wraps/numbers-type/implementations/as + uri: wrap://embed/wrap + output: + stdout: + - "$Test Start [resolve_instance.sanity]" + - "Resolving URI: wrap://embed/wrap" + - "Received: wrapper" + - Success! diff --git a/specs/resolve_ipfs.yaml b/specs/resolve_ipfs.yaml new file mode 100644 index 0000000..2cf0df3 --- /dev/null +++ b/specs/resolve_ipfs.yaml @@ -0,0 +1,20 @@ +required: true +cases: + ipfs_cid_v0: + input: wrap://ipfs/QmfRCVA1MSAjUbrXXjya4xA9QHkbWeiKRsT7Um1cvrR7FY + output: + stdout: + - "$Test Start [resolve_ipfs.ipfs_cid_v0]" + - "URI Authority: ipfs" + - "Resolving: wrap://ipfs/QmfRCVA1MSAjUbrXXjya4xA9QHkbWeiKRsT7Um1cvrR7FY" + - "Received: package" + - Success! + ipfs_cid_v1: + input: wrap://ipfs/bafybeih5ydxfp7q53ukh7rkolrfqttwjuykfnju4yefrl4b55vsdapgm2m + output: + stdout: + - "$Test Start [resolve_ipfs.ipfs_cid_v1]" + - "URI Authority: ipfs" + - "Resolving: wrap://ipfs/bafybeih5ydxfp7q53ukh7rkolrfqttwjuykfnju4yefrl4b55vsdapgm2m" + - "Received: package" + - Success! diff --git a/specs/resolve_package.yaml b/specs/resolve_package.yaml new file mode 100644 index 0000000..cbad05b --- /dev/null +++ b/specs/resolve_package.yaml @@ -0,0 +1,12 @@ +required: true +cases: + sanity: + input: + directory: $ROOT/wraps/numbers-type/implementations/as + uri: wrap://embed/wrap + output: + stdout: + - "$Test Start [resolve_package.sanity]" + - "Resolving URI: wrap://embed/wrap" + - "Received: package" + - Success! diff --git a/specs/resolve_redirect.yaml b/specs/resolve_redirect.yaml new file mode 100644 index 0000000..70ec0ab --- /dev/null +++ b/specs/resolve_redirect.yaml @@ -0,0 +1,12 @@ +required: true +cases: + sanity: + input: + from: wrap://uri/a + to: wrap://uri/b + output: + stdout: + - "$Test Start [resolve_redirect.sanity]" + - Resolving Redirect + - Received URI 'wrap://uri/b' + - Success! diff --git a/specs/subinvoke_plugin_wrap.yaml b/specs/subinvoke_plugin_wrap.yaml new file mode 100644 index 0000000..616a251 --- /dev/null +++ b/specs/subinvoke_plugin_wrap.yaml @@ -0,0 +1,16 @@ +required: true +cases: + sanity: + input: + directory: $ROOT/wraps/numbers-type/implementations/as + method: u8Method + args: + first: 8 + second: 10 + output: + stdout: + - "$Test Start [subinvoke_plugin_wrap.sanity]" + - Invoking Plugin + - Subinvoking u8Method + - "Received: 18" + - Success! diff --git a/specs/subinvoke_wrap_plugin.yaml b/specs/subinvoke_wrap_plugin.yaml new file mode 100644 index 0000000..419f332 --- /dev/null +++ b/specs/subinvoke_wrap_plugin.yaml @@ -0,0 +1,18 @@ +required: true +cases: + sanity: + input: + rootWrap: + directory: $ROOT/wraps/subinvoke/01-invoke/implementations/as + uri: ens/invoke.eth + subWrapUri: ens/imported-subinvoke.eth + method: addAndIncrement + args: + a: 1 + b: 1 + output: + stdout: + - "$Test Start [subinvoke_wrap_plugin.sanity]" + - Invoking addAndIncrement + - "Received: 3" + - Success! diff --git a/specs/subinvoke_wrap_wrap.yaml b/specs/subinvoke_wrap_wrap.yaml new file mode 100644 index 0000000..34a6de8 --- /dev/null +++ b/specs/subinvoke_wrap_wrap.yaml @@ -0,0 +1,20 @@ +required: true +cases: + sanity: + input: + rootWrap: + directory: $ROOT/wraps/subinvoke/01-invoke/implementations/as + uri: ens/invoke.eth + subWrap: + directory: $ROOT/wraps/subinvoke/00-subinvoke/implementations/as + uri: ens/imported-subinvoke.eth + method: addAndIncrement + args: + a: 1 + b: 1 + output: + stdout: + - "$Test Start [subinvoke_wrap_wrap.sanity]" + - Invoking addAndIncrement + - "Received: 3" + - Success! diff --git a/specs/uri.yaml b/specs/uri.yaml new file mode 100644 index 0000000..27d4ae5 --- /dev/null +++ b/specs/uri.yaml @@ -0,0 +1,28 @@ +required: true +cases: + valid_uri: + input: wrap://authority/path/to/wrap + output: + stdout: + - "$Test Start [uri.valid_uri]" + - WRAP URI successfully created. + - uri - wrap://authority/path/to/wrap + - uri.authority - authority + - uri.path - path/to/wrap + shorthand_uri: + input: authority/path/to/wrap + output: + stdout: + - "$Test Start [uri.shorthand_uri]" + - WRAP URI successfully created. + - uri - wrap://authority/path/to/wrap + - uri.authority - authority + - uri.path - path/to/wrap + invalid_uri: + input: wrap://invalid.uri + output: + stdout: + - "$Test Start [uri.invalid_uri]" + stderr: + - "!Test Error [uri.invalid_uri]" + - "Invalid URI Received: wrap://invalid.uri" diff --git a/specs/wrap_feature_env_vars.yaml b/specs/wrap_feature_env_vars.yaml new file mode 100644 index 0000000..466db41 --- /dev/null +++ b/specs/wrap_feature_env_vars.yaml @@ -0,0 +1,25 @@ +required: true +cases: + sanity: + input: + mainEnv: + object: + prop: "object string" + str: "string" + optFilledStr: "optional string" + number: 10 + bool: true + en: "FIRST" + array: [32, 23] + extEnv: + externalArray: [1, 2, 3] + externalString: "iamexternal" + output: + stdout: + - "$Test Start [wrap_feature_env_vars.sanity]" + - Invoking methodRequireEnv + - Success! + - Invoking subinvokeEnvMethod + - "response.local exists: true" + - "response.external exists: true" + - Success! diff --git a/specs/wrap_feature_interface_invoke.yaml b/specs/wrap_feature_interface_invoke.yaml new file mode 100644 index 0000000..a9fe880 --- /dev/null +++ b/specs/wrap_feature_interface_invoke.yaml @@ -0,0 +1,9 @@ +required: true +cases: + sanity: + input: true + output: + stdout: + - "$Test Start [wrap_feature_interface_invoke.sanity]" + - Invoking moduleMethod + - Success! diff --git a/specs/wrap_type_bigint.yaml b/specs/wrap_type_bigint.yaml new file mode 100644 index 0000000..4837149 --- /dev/null +++ b/specs/wrap_type_bigint.yaml @@ -0,0 +1,14 @@ +required: true +cases: + sanity: + input: + args: + arg1: "123456789123456789" + obj: + prop1: "987654321987654321" + output: + stdout: + - "$Test Start [wrap_type_bigint.sanity]" + - Invoking method + - "Result: 121932631356500531347203169112635269" + - Success! diff --git a/specs/wrap_type_bignumber.yaml b/specs/wrap_type_bignumber.yaml new file mode 100644 index 0000000..39e2a49 --- /dev/null +++ b/specs/wrap_type_bignumber.yaml @@ -0,0 +1,14 @@ +required: true +cases: + sanity: + input: + args: + arg1: "1234.56789123456789" + obj: + prop1: "98.7654321987654321" + output: + stdout: + - "$Test Start [wrap_type_bignumber.sanity]" + - Invoking method + - "Result: 121932.631356500531347203169112635269" + - Success! diff --git a/specs/wrap_type_bytes.yaml b/specs/wrap_type_bytes.yaml new file mode 100644 index 0000000..b149a38 --- /dev/null +++ b/specs/wrap_type_bytes.yaml @@ -0,0 +1,14 @@ +required: true +cases: + sanity: + input: + method: bytesMethod + args: + arg: + prop: [65, 114, 103, 117, 109, 101, 110, 116, 32, 86, 97, 108, 117, 101] + output: + stdout: + - "$Test Start [wrap_type_bytes.sanity]" + - Invoking bytesMethod + - "Result: [65,114,103,117,109,101,110,116,32,86,97,108,117,101,32,83,97,110,105,116,121,33]" + - Success! diff --git a/specs/wrap_type_enum.yaml b/specs/wrap_type_enum.yaml new file mode 100644 index 0000000..95c1227 --- /dev/null +++ b/specs/wrap_type_enum.yaml @@ -0,0 +1,24 @@ +required: true +cases: + enum_number: + input: + method: method1 + args: + en: 2 + output: + stdout: + - "$Test Start [wrap_type_enum.enum_number]" + - Invoking method1 + - "Result: 2" + - Success! + enum_string: + input: + method: method1 + args: + en: "OPTION2" + output: + stdout: + - "$Test Start [wrap_type_enum.enum_string]" + - Invoking method1 + - "Result: 1" + - Success! diff --git a/specs/wrap_type_ints.yaml b/specs/wrap_type_ints.yaml new file mode 100644 index 0000000..f8ffda4 --- /dev/null +++ b/specs/wrap_type_ints.yaml @@ -0,0 +1,74 @@ +required: true +cases: + i8: + input: + method: i8Method + args: + first: 5 + second: -6 + output: + stdout: + - "$Test Start [wrap_type_ints.i8]" + - Invoking i8Method + - "Result: -1" + - Success! + u8: + input: + method: u8Method + args: + first: 5 + second: 6 + output: + stdout: + - "$Test Start [wrap_type_ints.u8]" + - Invoking u8Method + - "Result: 11" + - Success! + i16: + input: + method: i16Method + args: + first: 500 + second: -679 + output: + stdout: + - "$Test Start [wrap_type_ints.i16]" + - Invoking i16Method + - "Result: -179" + - Success! + u16: + input: + method: u16Method + args: + first: 500 + second: 679 + output: + stdout: + - "$Test Start [wrap_type_ints.u16]" + - Invoking u16Method + - "Result: 1179" + - Success! + i32: + input: + method: i32Method + args: + first: 55000 + second: -32800 + output: + stdout: + - "$Test Start [wrap_type_ints.i32]" + - Invoking i32Method + - "Result: 22200" + - Success! + u32: + input: + method: u32Method + args: + first: 75535 + second: 88935 + output: + stdout: + - "$Test Start [wrap_type_ints.u32]" + - Invoking u32Method + - "Result: 164470" + - Success! diff --git a/specs/wrap_type_json.yaml b/specs/wrap_type_json.yaml new file mode 100644 index 0000000..d2400f8 --- /dev/null +++ b/specs/wrap_type_json.yaml @@ -0,0 +1,26 @@ +required: true +cases: + parse: + input: + method: parse + args: + value: '{ "foo": "bar", "bar": "bar" }' + output: + stdout: + - "$Test Start [wrap_type_json.parse]" + - Invoking parse + - 'Result: {"foo":"bar","bar":"bar"}' + - Success! + stringify: + input: + method: stringify + args: + values: + - '{ "bar": "foo" }' + - '{ "baz": "fuz" }' + output: + stdout: + - "$Test Start [wrap_type_json.stringify]" + - Invoking stringify + - 'Result: {"bar":"foo"}{"baz":"fuz"}' + - Success! diff --git a/specs/wrap_type_map.yaml b/specs/wrap_type_map.yaml new file mode 100644 index 0000000..bd8a345 --- /dev/null +++ b/specs/wrap_type_map.yaml @@ -0,0 +1,14 @@ +required: true +cases: + sanity: + input: + map: + Hello: 1 + Heyo: 50 + output: + stdout: + - "$Test Start [wrap_type_map.sanity]" + - Invoking returnMap + - "key 'Hello' = 1" + - "key 'Heyo' = 50" + - Success! diff --git a/specs/wrap_type_object.yaml b/specs/wrap_type_object.yaml new file mode 100644 index 0000000..0d89ccc --- /dev/null +++ b/specs/wrap_type_object.yaml @@ -0,0 +1,30 @@ +required: true +cases: + sanity: + input: + method: method1 + args: + arg1: + prop: "arg1 prop" + nested: + prop: "arg1 nested prop" + output: + stdout: + - "$Test Start [wrap_type_object.sanity]" + - Invoking method1 + - | + Result: [ + { + "prop": "arg1 prop", + "nested": { + "prop": "arg1 nested prop" + } + }, + { + "prop": "", + "nested": { + "prop": "" + } + } + ] + - Success! diff --git a/verify/.gitignore b/verify/.gitignore new file mode 100644 index 0000000..4d29575 --- /dev/null +++ b/verify/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/verify/.nvmrc b/verify/.nvmrc new file mode 100644 index 0000000..0828ab7 --- /dev/null +++ b/verify/.nvmrc @@ -0,0 +1 @@ +v18 \ No newline at end of file diff --git a/verify/install.sh b/verify/install.sh new file mode 100755 index 0000000..bd5d27b --- /dev/null +++ b/verify/install.sh @@ -0,0 +1,2 @@ +nvm install && nvm use +yarn \ No newline at end of file diff --git a/verify/package.json b/verify/package.json new file mode 100644 index 0000000..dc15caa --- /dev/null +++ b/verify/package.json @@ -0,0 +1,15 @@ +{ + "name": "client-readiness-verify-cli", + "private": true, + "scripts": { + "start": "ts-node ./src/index.ts" + }, + "dependencies": { + "yaml": "2.2.1" + }, + "devDependencies": { + "@types/node": "^18.15.13", + "ts-node": "10.9.1", + "typescript": "4.9.5" + } +} diff --git a/verify/run.sh b/verify/run.sh new file mode 100755 index 0000000..fff4b3a --- /dev/null +++ b/verify/run.sh @@ -0,0 +1,7 @@ +if [ "$1" = "" ] +then + echo "Usage: $0 " + exit +fi + +yarn start -- ../clients/$1 $2 diff --git a/verify/src/index.ts b/verify/src/index.ts new file mode 100644 index 0000000..6277787 --- /dev/null +++ b/verify/src/index.ts @@ -0,0 +1,113 @@ +import { loadFeatureSpecs } from "./load-feature-specs"; + +import path from "path"; +import fs from "fs"; + +async function main() { + if (process.argv.length < 3) { + throw Error("No client directory specified."); + } + + const arg = process.argv[2]; + const cwd = process.cwd(); + const clientDir = path.join(cwd, arg); + + // Optional 2nd argument, spec filter + const filter = process.argv.length > 3 ? process.argv[3] : undefined; + + // Read stdout & stderr log files + const stdout = fs.readFileSync( + path.join(clientDir, "stdout"), + "utf-8" + ); + const stderr = fs.readFileSync( + path.join(clientDir, "stderr"), + "utf-8" + ); + + // Load Feature Specs + const featureSpecs = loadFeatureSpecs( + path.join(__dirname, "../../specs") + ); + + const errors = []; + + for (const featureSpec of Object.keys(featureSpecs)) { + if (filter && filter !== featureSpec) { + continue; + } + + const spec = featureSpecs[featureSpec]; + const cases = spec.cases; + + for (const testCaseName of Object.keys(cases)) { + const testCase = cases[testCaseName]; + + const verify = ( + marker: string, + stream: "stdout" | "stderr", + expected: string[], + received: string + ): string[] => { + // Find the first line of output + const firstLine = expected[0]; + const firstLineIdx = received.indexOf(firstLine); + + if (firstLineIdx < 0) { + return [ + `Error: ${featureSpec}.${testCaseName} missing ${stream} output "${firstLine}"` + ]; + } + + let testOutput = received.substring(firstLineIdx); + + // Isolate the test output by removing all future test output + const nextMarkerIdx = testOutput.indexOf(marker, firstLine.length); + + if (nextMarkerIdx > -1) { + testOutput = testOutput.substring( + 0, nextMarkerIdx + ); + } + + // Check the test output for all expected strings + const errors = []; + + for (let i = 1; i < expected.length; ++i) { + const expectedIdx = testOutput.indexOf(expected[i]); + + if (expectedIdx < 0) { + errors.push( + `Error: ${featureSpec}.${testCaseName} missing ${stream} output "${expected[i]}"` + ); + } + + testOutput = testOutput.substring(expectedIdx + expected[i].length); + } + + return errors; + } + + errors.push( + ...verify("$Test Start", "stdout", testCase.output.stdout, stdout) + ); + + if (testCase.output.stderr) { + errors.push( + ...verify("$Test Start", "stderr", testCase.output.stderr, stderr) + ); + } + } + } + + if (errors.length) { + throw errors.join("\n"); + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/verify/src/load-feature-specs.ts b/verify/src/load-feature-specs.ts new file mode 100644 index 0000000..5970e87 --- /dev/null +++ b/verify/src/load-feature-specs.ts @@ -0,0 +1,91 @@ +import fs from "fs"; +import path from "path"; +import yaml from "yaml"; + +export interface TestCases { + [testCase: string]: { + output: { + stdout: string[]; + stderr?: string[]; + } + } +} + +export interface Spec { + required: boolean; + cases: TestCases; +} + +export interface FeatureSpecs { + [spec: string]: Spec; +} + +export function loadFeatureSpecs(directory: string): FeatureSpecs { + const featureSpecs: FeatureSpecs = { }; + + const specFiles = fs.readdirSync( + directory + ); + + for (const specFile of specFiles) { + const specYaml = fs.readFileSync( + path.join(directory, specFile), + "utf-8" + ); + + const spec = yaml.parse(specYaml); + + if (!spec || typeof spec !== "object") { + throw Error(`Failed to load feature-spec ${specFile}, must be an object.`); + } + + const required = spec.required; + + if (typeof required !== "boolean") { + throw Error(`Failed to load feature-spec ${specFile}, must have property 'required'.`); + } + + const cases = spec.cases; + + if (typeof cases !== "object") { + throw Error(`Failed to load feature-spec ${specFile}, must have property 'cases'.`); + } + + for (const testCase of Object.keys(cases)) { + if (!cases[testCase].output) { + throw Error( + `Failed to load feature-spec test-case ${specFile}.cases.${testCase}, missing 'output' property` + ); + } + + const output = cases[testCase].output; + + if (typeof output !== "object") { + throw Error( + `Test case ${specFile}.cases.${testCase} 'output' property must be an object` + ); + } + + if (!output.stdout || !Array.isArray(output.stdout)) { + throw Error( + `Test case ${specFile}.cases.${testCase} 'output.stdout' property must be an array` + ); + } + + if (output.stderr && !Array.isArray(output.stderr)) { + throw Error( + `Test case ${specFile}.cases.${testCase} 'output.stderr' property must be an array` + ); + } + } + + const specName = specFile.replace( + path.extname(specFile), + "" + ); + + featureSpecs[specName] = spec; + } + + return featureSpecs; +} diff --git a/verify/tsconfig.json b/verify/tsconfig.json new file mode 100644 index 0000000..2e01ca5 --- /dev/null +++ b/verify/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "esModuleInterop": true, + "lib": [ + "es2015", + "es5", + "dom" + ], + "downlevelIteration": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "declaration": true, + "preserveSymlinks": true, + "preserveWatchOutput": true, + "pretty": false, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "noImplicitAny": true, + "noImplicitReturns": true, + "noUnusedLocals": true, + "module": "commonjs", + "sourceMap": true, + "target": "es5", + "resolveJsonModule": true, + "strictNullChecks": true + }, + "include": [ + "./src/**/*" + ], +} diff --git a/verify/yarn.lock b/verify/yarn.lock new file mode 100644 index 0000000..ec0a9af --- /dev/null +++ b/verify/yarn.lock @@ -0,0 +1,122 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== + +"@types/node@^18.15.13": + version "18.15.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" + integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== + +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +ts-node@10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +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== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +yaml@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.2.1.tgz#3014bf0482dcd15147aa8e56109ce8632cd60ce4" + integrity sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw== + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== diff --git a/wraps/install.sh b/wraps/install.sh new file mode 100755 index 0000000..60759d5 --- /dev/null +++ b/wraps/install.sh @@ -0,0 +1,10 @@ +# Download test wrappers +curl -L https://github.com/polywrap/wrap-test-harness/releases/download/0.1.0/wrappers --output wrappers.zip +unzip -o wrappers.zip +rm -rf wrappers.zip + +# Publish one wrapper to a public directory (used for http resolution tests) +rm -rf public +mkdir public +cp ./numbers-type/implementations/as/wrap.info ./public/wrap.info +cp ./numbers-type/implementations/as/wrap.wasm ./public/wrap.wasm diff --git a/wraps/public/wrap.info b/wraps/public/wrap.info new file mode 100644 index 0000000..aba3fbd --- /dev/null +++ b/wraps/public/wrap.info @@ -0,0 +1 @@ +��version�0.1�name�numbers-type�type�wasm�abi��version�0.1�moduleType��type�Module�kind̀�methods���name�i8Method�return��type�Int8�name�i8Method�requiredäkind"�scalar��name�i8Method�type�Int8�requiredäkind�type�Method�kind@�requiredéarguments���type�Int8�name�first�requiredäkind"�scalar��name�first�type�Int8�requiredäkind��type�Int8�name�second�requiredäkind"�scalar��name�second�type�Int8�requiredäkind��name�u8Method�return��type�UInt8�name�u8Method�requiredäkind"�scalar��name�u8Method�type�UInt8�requiredäkind�type�Method�kind@�requiredéarguments���type�UInt8�name�first�requiredäkind"�scalar��name�first�type�UInt8�requiredäkind��type�UInt8�name�second�requiredäkind"�scalar��name�second�type�UInt8�requiredäkind��name�i16Method�return��type�Int16�name�i16Method�requiredäkind"�scalar��name�i16Method�type�Int16�requiredäkind�type�Method�kind@�requiredéarguments���type�Int16�name�first�requiredäkind"�scalar��name�first�type�Int16�requiredäkind��type�Int16�name�second�requiredäkind"�scalar��name�second�type�Int16�requiredäkind��name�u16Method�return��type�UInt16�name�u16Method�requiredäkind"�scalar��name�u16Method�type�UInt16�requiredäkind�type�Method�kind@�requiredéarguments���type�UInt16�name�first�requiredäkind"�scalar��name�first�type�UInt16�requiredäkind��type�UInt16�name�second�requiredäkind"�scalar��name�second�type�UInt16�requiredäkind��name�i32Method�return��type�Int�name�i32Method�requiredäkind"�scalar��name�i32Method�type�Int�requiredäkind�type�Method�kind@�requiredéarguments���type�Int�name�first�requiredäkind"�scalar��name�first�type�Int�requiredäkind��type�Int�name�second�requiredäkind"�scalar��name�second�type�Int�requiredäkind��name�u32Method�return��type�UInt32�name�u32Method�requiredäkind"�scalar��name�u32Method�type�UInt32�requiredäkind�type�Method�kind@�requiredéarguments���type�UInt32�name�first�requiredäkind"�scalar��name�first�type�UInt32�requiredäkind��type�UInt32�name�second�requiredäkind"�scalar��name�second�type�UInt32�requiredäkind \ No newline at end of file diff --git a/wraps/public/wrap.wasm b/wraps/public/wrap.wasm new file mode 100644 index 0000000..a7c9550 Binary files /dev/null and b/wraps/public/wrap.wasm differ