From bcd1f23165eb3891f14196936e8d6f9e10ed7341 Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Mon, 26 Dec 2022 16:17:25 +0400 Subject: [PATCH 01/22] refactor(core): TUri with Uri --- packages/js/core/package.json | 1 - .../src/algorithms/get-implementations.ts | 116 +++++++++--------- .../js/core/src/interfaces/uri-resolver.ts | 61 ++++----- packages/js/core/src/types/CoreClient.ts | 33 +++-- packages/js/core/src/types/Env.ts | 32 +++-- packages/js/core/src/types/IUriPackage.ts | 4 +- packages/js/core/src/types/IUriRedirect.ts | 6 +- packages/js/core/src/types/IUriWrapper.ts | 4 +- .../src/types/InterfaceImplementations.ts | 40 +++--- packages/js/core/src/types/Invoke.ts | 17 ++- packages/js/core/src/types/Uri.ts | 19 ++- packages/js/core/src/types/UriResolver.ts | 8 +- packages/js/core/src/types/Wrapper.ts | 3 +- .../src/uri-resolution/UriPackageOrWrapper.ts | 4 +- .../js/core/src/utils/getEnvFromUriHistory.ts | 2 +- packages/js/plugin/package.json | 1 - packages/js/plugin/src/PluginWrapper.ts | 23 +--- .../src/UriResolverExtensionFileReader.ts | 13 +- .../src/UriResolverWrapper.ts | 2 +- .../uri-resolvers/src/helpers/UriResolver.ts | 18 +-- .../src/helpers/UriResolverLike.ts | 7 +- .../src/static/StaticResolver.ts | 18 +-- .../src/static/StaticResolverLike.ts | 8 +- packages/js/wasm/package.json | 1 - packages/js/wasm/src/WasmWrapper.ts | 23 +--- packages/js/wasm/src/imports.ts | 8 +- 26 files changed, 201 insertions(+), 271 deletions(-) diff --git a/packages/js/core/package.json b/packages/js/core/package.json index 7e3d509374..86566e4648 100644 --- a/packages/js/core/package.json +++ b/packages/js/core/package.json @@ -20,7 +20,6 @@ }, "dependencies": { "@polywrap/result": "0.10.0-pre.6", - "@polywrap/tracing-js": "0.10.0-pre.6", "@polywrap/wrap-manifest-types-js": "0.10.0-pre.6" }, "devDependencies": { diff --git a/packages/js/core/src/algorithms/get-implementations.ts b/packages/js/core/src/algorithms/get-implementations.ts index 2865dffbe6..1e61f4b2f9 100644 --- a/packages/js/core/src/algorithms/get-implementations.ts +++ b/packages/js/core/src/algorithms/get-implementations.ts @@ -3,76 +3,72 @@ import { IUriResolutionContext } from "../uri-resolution"; import { GetImplementationsError } from "./GetImplementationsError"; import { applyResolution } from "./applyResolution"; -import { Tracer } from "@polywrap/tracing-js"; import { Result, ResultErr, ResultOk } from "@polywrap/result"; -export const getImplementations = Tracer.traceFunc( - "core: getImplementations", - async ( - wrapperInterfaceUri: Uri, - interfaces: readonly InterfaceImplementations[], - client?: CoreClient, - resolutionContext?: IUriResolutionContext - ): Promise> => { - const result: Uri[] = []; +export const getImplementations = async ( + wrapperInterfaceUri: Uri, + interfaces: readonly InterfaceImplementations[], + client?: CoreClient, + resolutionContext?: IUriResolutionContext +): Promise> => { + const result: Uri[] = []; - const addUniqueResult = (uri: Uri) => { - // If the URI hasn't been added already - if (result.findIndex((i) => Uri.equals(i, uri)) === -1) { - result.push(uri); - } - }; + const addUniqueResult = (uri: Uri) => { + // If the URI hasn't been added already + if (result.findIndex((i) => Uri.equals(i, uri)) === -1) { + result.push(uri); + } + }; - const addAllImplementationsFromImplementationsArray = async ( - implementationsArray: readonly InterfaceImplementations[], - wrapperInterfaceUri: Uri - ): Promise> => { - for (const interfaceImplementations of implementationsArray) { - let fullyResolvedUri: Uri; - if (client) { - const redirectsResult = await applyResolution( - interfaceImplementations.interface, - client, - resolutionContext - ); - if (!redirectsResult.ok) { - return redirectsResult; - } - fullyResolvedUri = redirectsResult.value; - } else { - fullyResolvedUri = interfaceImplementations.interface; + const addAllImplementationsFromImplementationsArray = async ( + implementationsArray: readonly InterfaceImplementations[], + wrapperInterfaceUri: Uri + ): Promise> => { + for (const interfaceImplementations of implementationsArray) { + let fullyResolvedUri: Uri; + if (client) { + const redirectsResult = await applyResolution( + interfaceImplementations.interface, + client, + resolutionContext + ); + if (!redirectsResult.ok) { + return redirectsResult; } + fullyResolvedUri = redirectsResult.value; + } else { + fullyResolvedUri = interfaceImplementations.interface; + } - if (Uri.equals(fullyResolvedUri, wrapperInterfaceUri)) { - for (const implementation of interfaceImplementations.implementations) { - addUniqueResult(implementation); - } + if (Uri.equals(fullyResolvedUri, wrapperInterfaceUri)) { + for (const implementation of interfaceImplementations.implementations) { + addUniqueResult(implementation); } } - return ResultOk(undefined); - }; + } + return ResultOk(undefined); + }; - let finalUri = wrapperInterfaceUri; + let finalUri = wrapperInterfaceUri; - if (client) { - const redirectsResult = await applyResolution( - wrapperInterfaceUri, - client, - resolutionContext - ); - if (!redirectsResult.ok) { - return ResultErr(new GetImplementationsError(redirectsResult.error)); - } - finalUri = redirectsResult.value; + if (client) { + const redirectsResult = await applyResolution( + wrapperInterfaceUri, + client, + resolutionContext + ); + if (!redirectsResult.ok) { + return ResultErr(new GetImplementationsError(redirectsResult.error)); } + finalUri = redirectsResult.value; + } - const addAllImp = await addAllImplementationsFromImplementationsArray( - interfaces, - finalUri - ); + const addAllImp = await addAllImplementationsFromImplementationsArray( + interfaces, + finalUri + ); - return addAllImp.ok - ? ResultOk(result) - : ResultErr(new GetImplementationsError(addAllImp.error)); - } -); + return addAllImp.ok + ? ResultOk(result) + : ResultErr(new GetImplementationsError(addAllImp.error)); +}; diff --git a/packages/js/core/src/interfaces/uri-resolver.ts b/packages/js/core/src/interfaces/uri-resolver.ts index 9b886a3da5..a72e5f3629 100644 --- a/packages/js/core/src/interfaces/uri-resolver.ts +++ b/packages/js/core/src/interfaces/uri-resolver.ts @@ -1,6 +1,5 @@ import { Uri, Invoker } from "../"; -import { Tracer } from "@polywrap/tracing-js"; import { Result } from "@polywrap/result"; export interface MaybeUriOrManifest { @@ -9,37 +8,31 @@ export interface MaybeUriOrManifest { } export const module = { - tryResolveUri: Tracer.traceFunc( - "core: uri-resolver: tryResolveUri", - async ( - invoker: Invoker, - wrapper: Uri, - uri: Uri - ): Promise> => { - return invoker.invoke({ - uri: wrapper.uri, - method: `tryResolveUri`, - args: { - authority: uri.authority, - path: uri.path, - }, - }); - } - ), - getFile: Tracer.traceFunc( - "core: uri-resolver: getFile", - async ( - invoker: Invoker, - wrapper: Uri, - path: string - ): Promise> => { - return invoker.invoke({ - uri: wrapper.uri, - method: "getFile", - args: { - path, - }, - }); - } - ), + tryResolveUri: async ( + invoker: Invoker, + wrapper: Uri, + uri: Uri + ): Promise> => { + return invoker.invoke({ + uri: wrapper, + method: `tryResolveUri`, + args: { + authority: uri.authority, + path: uri.path, + }, + }); + }, + getFile: async ( + invoker: Invoker, + wrapper: Uri, + path: string + ): Promise> => { + return invoker.invoke({ + uri: wrapper, + method: "getFile", + args: { + path, + }, + }); + }, }; diff --git a/packages/js/core/src/types/CoreClient.ts b/packages/js/core/src/types/CoreClient.ts index a81768fdc3..fd0a01e483 100644 --- a/packages/js/core/src/types/CoreClient.ts +++ b/packages/js/core/src/types/CoreClient.ts @@ -5,9 +5,9 @@ import { UriResolverHandler } from "./UriResolver"; import { WrapManifest } from "@polywrap/wrap-manifest-types-js"; import { Result } from "@polywrap/result"; -export interface CoreClientConfig { - readonly interfaces?: Readonly[]>; - readonly envs?: Readonly[]>; +export interface CoreClientConfig { + readonly interfaces?: Readonly; + readonly envs?: Readonly; readonly resolver: Readonly>; } @@ -31,32 +31,27 @@ export interface ValidateOptions { } export interface CoreClient extends Invoker, UriResolverHandler { - getConfig(): CoreClientConfig; + getConfig(): CoreClientConfig; - getInterfaces(): readonly InterfaceImplementations[] | undefined; + getInterfaces(): readonly InterfaceImplementations[] | undefined; - getEnvs(): readonly Env[] | undefined; + getEnvs(): readonly Env[] | undefined; - getEnvByUri(uri: TUri): Env | undefined; + getEnvByUri(uri: Uri): Env | undefined; getResolver(): IUriResolver; - getManifest( - uri: TUri - ): Promise>; + getManifest(uri: Uri): Promise>; - getFile( - uri: TUri, + getFile( + uri: Uri, options: GetFileOptions ): Promise>; - getImplementations( - uri: TUri, + getImplementations( + uri: Uri, options: GetImplementationsOptions - ): Promise>; + ): Promise>; - validate( - uri: TUri, - options?: ValidateOptions - ): Promise>; + validate(uri: Uri, options?: ValidateOptions): Promise>; } diff --git a/packages/js/core/src/types/Env.ts b/packages/js/core/src/types/Env.ts index df02244e33..6078c92688 100644 --- a/packages/js/core/src/types/Env.ts +++ b/packages/js/core/src/types/Env.ts @@ -1,27 +1,25 @@ import { Uri } from "."; -import { Tracer } from "@polywrap/tracing-js"; - -export interface Env { +export interface Env { /** Uri of wrapper */ - uri: TUri; + uri: Uri; /** Env variables used by the module */ env: Record; } -export const sanitizeEnvs = Tracer.traceFunc( - "core: sanitizeEnvs", - (environments: Env[]): Env[] => { - const output: Env[] = []; +// export const sanitizeEnvs = Tracer.traceFunc( +// "core: sanitizeEnvs", +// (environments: Env[]): Env[] => { +// const output: Env[] = []; - for (const env of environments) { - output.push({ - ...env, - uri: Uri.from(env.uri), - }); - } +// for (const env of environments) { +// output.push({ +// ...env, +// uri: Uri.from(env.uri), +// }); +// } - return output; - } -); +// return output; +// } +// ); diff --git a/packages/js/core/src/types/IUriPackage.ts b/packages/js/core/src/types/IUriPackage.ts index f7b27f64e0..eead0b4c09 100644 --- a/packages/js/core/src/types/IUriPackage.ts +++ b/packages/js/core/src/types/IUriPackage.ts @@ -1,6 +1,6 @@ import { Uri, IWrapPackage } from "."; -export interface IUriPackage { - uri: TUri; +export interface IUriPackage { + uri: Uri; package: IWrapPackage; } diff --git a/packages/js/core/src/types/IUriRedirect.ts b/packages/js/core/src/types/IUriRedirect.ts index 3475f727a0..c707427091 100644 --- a/packages/js/core/src/types/IUriRedirect.ts +++ b/packages/js/core/src/types/IUriRedirect.ts @@ -1,6 +1,6 @@ import { Uri } from "."; -export interface IUriRedirect { - from: TUri; - to: TUri; +export interface IUriRedirect { + from: Uri; + to: Uri; } diff --git a/packages/js/core/src/types/IUriWrapper.ts b/packages/js/core/src/types/IUriWrapper.ts index 0a5aa5c622..bb0b606c53 100644 --- a/packages/js/core/src/types/IUriWrapper.ts +++ b/packages/js/core/src/types/IUriWrapper.ts @@ -1,6 +1,6 @@ import { Uri, Wrapper } from "."; -export interface IUriWrapper { - uri: TUri; +export interface IUriWrapper { + uri: Uri; wrapper: Wrapper; } diff --git a/packages/js/core/src/types/InterfaceImplementations.ts b/packages/js/core/src/types/InterfaceImplementations.ts index d38fd3f55d..2092f71a47 100644 --- a/packages/js/core/src/types/InterfaceImplementations.ts +++ b/packages/js/core/src/types/InterfaceImplementations.ts @@ -1,29 +1,25 @@ import { Uri } from "."; -import { Tracer } from "@polywrap/tracing-js"; - -export interface InterfaceImplementations { - interface: TUri; - implementations: TUri[]; +export interface InterfaceImplementations { + interface: Uri; + implementations: Uri[]; } -export const sanitizeInterfaceImplementations = Tracer.traceFunc( - "core: sanitizeInterfaceImplementations", - ( - input: InterfaceImplementations[] - ): InterfaceImplementations[] => { - const output: InterfaceImplementations[] = []; - for (const definition of input) { - const interfaceUri = Uri.from(definition.interface); +// export const sanitizeInterfaceImplementations = Tracer.traceFunc( +// "core: sanitizeInterfaceImplementations", +// (input: InterfaceImplementations[]): InterfaceImplementations[] => { +// const output: InterfaceImplementations[] = []; +// for (const definition of input) { +// const interfaceUri = Uri.from(definition.interface); - const implementations = definition.implementations.map(Uri.from); +// const implementations = definition.implementations.map(Uri.from); - output.push({ - interface: interfaceUri, - implementations: implementations, - }); - } +// output.push({ +// interface: interfaceUri, +// implementations: implementations, +// }); +// } - return output; - } -); +// return output; +// } +// ); diff --git a/packages/js/core/src/types/Invoke.ts b/packages/js/core/src/types/Invoke.ts index 3a0214f5fb..8aabcc9b4b 100644 --- a/packages/js/core/src/types/Invoke.ts +++ b/packages/js/core/src/types/Invoke.ts @@ -4,9 +4,9 @@ import { IUriResolutionContext } from "../uri-resolution"; import { Result } from "@polywrap/result"; /** Options required for an Wrapper invocation. */ -export interface InvokeOptions { +export interface InvokeOptions { /** The Wrapper's URI */ - uri: TUri; + uri: Uri; /** Method to be executed. */ method: string; @@ -32,17 +32,16 @@ export interface InvokeOptions { */ export type InvokeResult = Result; -export interface InvokerOptions - extends InvokeOptions { +export interface InvokerOptions extends InvokeOptions { encodeResult?: boolean; } export interface Invoker { - invokeWrapper( - options: InvokerOptions & { wrapper: Wrapper } + invokeWrapper( + options: InvokerOptions & { wrapper: Wrapper } ): Promise>; - invoke( - options: InvokerOptions + invoke( + options: InvokerOptions ): Promise>; } @@ -52,7 +51,7 @@ export type InvocableResult = InvokeResult & { export interface Invocable { invoke( - options: InvokeOptions, + options: InvokeOptions, invoker: Invoker ): Promise>; } diff --git a/packages/js/core/src/types/Uri.ts b/packages/js/core/src/types/Uri.ts index cc8afb7c2a..55996748a8 100644 --- a/packages/js/core/src/types/Uri.ts +++ b/packages/js/core/src/types/Uri.ts @@ -1,4 +1,3 @@ -import { Tracer } from "@polywrap/tracing-js"; import { Result, ResultErr, ResultOk } from "@polywrap/result"; /** URI configuration */ @@ -62,15 +61,6 @@ export class Uri { return result.ok; } - public toString(): string { - return this._config.uri; - } - - public toJSON(): string { - return this._config.uri; - } - - @Tracer.traceMethod("Uri: parseUri") public static parseUri(uri: string): Result { if (!uri) { return ResultErr(Error("The provided URI is empty")); @@ -125,7 +115,6 @@ export class Uri { }); } - @Tracer.traceMethod("Uri: from") public static from(uri: Uri | string): Uri { if (typeof uri === "string") { return new Uri(uri); @@ -135,4 +124,12 @@ export class Uri { throw Error(`Unknown uri type, cannot convert. ${JSON.stringify(uri)}`); } } + + public toString(): string { + return this._config.uri; + } + + public toJSON(): string { + return this._config.uri; + } } diff --git a/packages/js/core/src/types/UriResolver.ts b/packages/js/core/src/types/UriResolver.ts index fb0552dc7a..0fa8964bf9 100644 --- a/packages/js/core/src/types/UriResolver.ts +++ b/packages/js/core/src/types/UriResolver.ts @@ -4,15 +4,15 @@ import { IUriResolutionContext, UriPackageOrWrapper } from "../uri-resolution"; import { Result } from "@polywrap/result"; /** Options required for an URI resolution. */ -export interface TryResolveUriOptions { +export interface TryResolveUriOptions { /** The Wrapper's URI */ - uri: TUri; + uri: Uri; resolutionContext?: IUriResolutionContext; } export interface UriResolverHandler { - tryResolveUri( - options?: TryResolveUriOptions + tryResolveUri( + options?: TryResolveUriOptions ): Promise>; } diff --git a/packages/js/core/src/types/Wrapper.ts b/packages/js/core/src/types/Wrapper.ts index 5d5655b4b3..d1afe4d906 100644 --- a/packages/js/core/src/types/Wrapper.ts +++ b/packages/js/core/src/types/Wrapper.ts @@ -1,5 +1,4 @@ import { - Uri, GetFileOptions, InvokeOptions, Invocable, @@ -25,7 +24,7 @@ export interface Wrapper extends Invocable { * This client will be used for any sub-invokes that occur. */ invoke( - options: InvokeOptions, + options: InvokeOptions, invoker: Invoker ): Promise>; diff --git a/packages/js/core/src/uri-resolution/UriPackageOrWrapper.ts b/packages/js/core/src/uri-resolution/UriPackageOrWrapper.ts index ce662e6a76..8b762b825e 100644 --- a/packages/js/core/src/uri-resolution/UriPackageOrWrapper.ts +++ b/packages/js/core/src/uri-resolution/UriPackageOrWrapper.ts @@ -6,11 +6,11 @@ export type UriValue = { uri: Uri; }; -export type UriPackageValue = IUriPackage & { +export type UriPackageValue = IUriPackage & { type: "package"; }; -export type UriWrapperValue = IUriWrapper & { +export type UriWrapperValue = IUriWrapper & { type: "wrapper"; }; diff --git a/packages/js/core/src/utils/getEnvFromUriHistory.ts b/packages/js/core/src/utils/getEnvFromUriHistory.ts index 6266e5475a..ef96d2cad4 100644 --- a/packages/js/core/src/utils/getEnvFromUriHistory.ts +++ b/packages/js/core/src/utils/getEnvFromUriHistory.ts @@ -3,7 +3,7 @@ import { Uri, CoreClient, Env } from "../types"; export const getEnvFromUriHistory = ( uriHistory: Uri[], client: CoreClient -): Env | undefined => { +): Env | undefined => { for (const uri of uriHistory) { const env = client.getEnvByUri(uri); diff --git a/packages/js/plugin/package.json b/packages/js/plugin/package.json index e3422163b0..d7d9a50ba5 100644 --- a/packages/js/plugin/package.json +++ b/packages/js/plugin/package.json @@ -22,7 +22,6 @@ "@polywrap/core-js": "0.10.0-pre.6", "@polywrap/msgpack-js": "0.10.0-pre.6", "@polywrap/result": "0.10.0-pre.6", - "@polywrap/tracing-js": "0.10.0-pre.6", "@polywrap/wrap-manifest-types-js": "0.10.0-pre.6" }, "devDependencies": { diff --git a/packages/js/plugin/src/PluginWrapper.ts b/packages/js/plugin/src/PluginWrapper.ts index b1540953e4..0f9a7bd6fd 100644 --- a/packages/js/plugin/src/PluginWrapper.ts +++ b/packages/js/plugin/src/PluginWrapper.ts @@ -5,26 +5,18 @@ import { CoreClient, InvokeOptions, InvocableResult, - Uri, GetFileOptions, isBuffer, } from "@polywrap/core-js"; import { WrapManifest } from "@polywrap/wrap-manifest-types-js"; import { msgpackDecode } from "@polywrap/msgpack-js"; -import { Tracer, TracingLevel } from "@polywrap/tracing-js"; import { Result, ResultErr, ResultOk } from "@polywrap/result"; export class PluginWrapper implements Wrapper { constructor( private manifest: WrapManifest, private module: PluginModule - ) { - Tracer.startSpan("PluginWrapper: constructor"); - Tracer.setAttribute("args", { - plugin: this.module, - }); - Tracer.endSpan(); - } + ) {} public async getFile( _: GetFileOptions @@ -34,21 +26,14 @@ export class PluginWrapper implements Wrapper { ); } - @Tracer.traceMethod("PluginWrapper: getManifest") public getManifest(): WrapManifest { return this.manifest; } - @Tracer.traceMethod("PluginWrapper: invoke", TracingLevel.High) public async invoke( - options: InvokeOptions, + options: InvokeOptions, client: CoreClient ): Promise> { - Tracer.setAttribute( - "label", - `Plugin Wrapper invoked: ${options.uri.uri}, with method ${options.method}`, - TracingLevel.High - ); const { method } = options; const args = options.args || {}; @@ -65,8 +50,6 @@ export class PluginWrapper implements Wrapper { if (isBuffer(args)) { const result = msgpackDecode(args); - Tracer.addEvent("msgpack-decoded", result); - if (typeof result !== "object") { const msgPackException = Error( `PluginWrapper: decoded MsgPack args did not result in an object.\nResult: ${result}` @@ -85,8 +68,6 @@ export class PluginWrapper implements Wrapper { if (result.ok) { const data = result.value; - Tracer.addEvent("Result", data); - return { ...ResultOk(data), encoded: false, diff --git a/packages/js/uri-resolver-extensions/src/UriResolverExtensionFileReader.ts b/packages/js/uri-resolver-extensions/src/UriResolverExtensionFileReader.ts index b367d8df4d..caa438d80f 100644 --- a/packages/js/uri-resolver-extensions/src/UriResolverExtensionFileReader.ts +++ b/packages/js/uri-resolver-extensions/src/UriResolverExtensionFileReader.ts @@ -21,14 +21,13 @@ export class UriResolverExtensionFileReader implements IFileReader { const path = combinePaths(this.wrapperUri.path, filePath); const result = await UriResolverInterface.module.getFile( { - invoke: ( - options: InvokeOptions + invoke: ( + options: InvokeOptions + ): Promise> => this.client.invoke(options), + invokeWrapper: ( + options: InvokeOptions & { wrapper: Wrapper } ): Promise> => - this.client.invoke(options), - invokeWrapper: ( - options: InvokeOptions & { wrapper: Wrapper } - ): Promise> => - this.client.invokeWrapper(options), + this.client.invokeWrapper(options), }, this.resolverExtensionUri, path diff --git a/packages/js/uri-resolver-extensions/src/UriResolverWrapper.ts b/packages/js/uri-resolver-extensions/src/UriResolverWrapper.ts index ba7ed50958..c41135fdc2 100644 --- a/packages/js/uri-resolver-extensions/src/UriResolverWrapper.ts +++ b/packages/js/uri-resolver-extensions/src/UriResolverWrapper.ts @@ -83,7 +83,7 @@ const tryResolveUriWithImplementation = async ( const invokeResult = await client.invokeWrapper( { wrapper: extensionWrapper, - uri: implementationUri.uri, + uri: implementationUri, method: "tryResolveUri", args: { authority: uri.authority, diff --git a/packages/js/uri-resolvers/src/helpers/UriResolver.ts b/packages/js/uri-resolvers/src/helpers/UriResolver.ts index f9b55411bc..c2686be96c 100644 --- a/packages/js/uri-resolvers/src/helpers/UriResolver.ts +++ b/packages/js/uri-resolvers/src/helpers/UriResolver.ts @@ -37,28 +37,28 @@ export class UriResolver { } else if ((resolverLike as IUriResolver).tryResolveUri !== undefined) { return resolverLike as IUriResolver; } else if ( - (resolverLike as IUriRedirect).from !== undefined && - (resolverLike as IUriRedirect).to !== undefined + (resolverLike as IUriRedirect).from !== undefined && + (resolverLike as IUriRedirect).to !== undefined ) { - const uriRedirect = resolverLike as IUriRedirect; + const uriRedirect = resolverLike as IUriRedirect; return (new RedirectResolver( uriRedirect.from, uriRedirect.to ) as unknown) as IUriResolver; } else if ( - (resolverLike as IUriPackage).uri !== undefined && - (resolverLike as IUriPackage).package !== undefined + (resolverLike as IUriPackage).uri !== undefined && + (resolverLike as IUriPackage).package !== undefined ) { - const uriPackage = resolverLike as IUriPackage; + const uriPackage = resolverLike as IUriPackage; return (new PackageResolver( Uri.from(uriPackage.uri), uriPackage.package ) as unknown) as IUriResolver; } else if ( - (resolverLike as IUriWrapper).uri !== undefined && - (resolverLike as IUriWrapper).wrapper !== undefined + (resolverLike as IUriWrapper).uri !== undefined && + (resolverLike as IUriWrapper).wrapper !== undefined ) { - const uriWrapper = resolverLike as IUriWrapper; + const uriWrapper = resolverLike as IUriWrapper; return (new WrapperResolver( Uri.from(uriWrapper.uri), uriWrapper.wrapper diff --git a/packages/js/uri-resolvers/src/helpers/UriResolverLike.ts b/packages/js/uri-resolvers/src/helpers/UriResolverLike.ts index 100756f54b..499399a048 100644 --- a/packages/js/uri-resolvers/src/helpers/UriResolverLike.ts +++ b/packages/js/uri-resolvers/src/helpers/UriResolverLike.ts @@ -1,5 +1,4 @@ import { - Uri, IUriResolver, IUriRedirect, IUriPackage, @@ -8,7 +7,7 @@ import { export type UriResolverLike = | IUriResolver - | IUriRedirect - | IUriPackage - | IUriWrapper + | IUriRedirect + | IUriPackage + | IUriWrapper | UriResolverLike[]; diff --git a/packages/js/uri-resolvers/src/static/StaticResolver.ts b/packages/js/uri-resolvers/src/static/StaticResolver.ts index 52a550dbaa..578eb13bc2 100644 --- a/packages/js/uri-resolvers/src/static/StaticResolver.ts +++ b/packages/js/uri-resolvers/src/static/StaticResolver.ts @@ -27,10 +27,10 @@ export class StaticResolver uriMap.set(uri, uriPackageOrWrapper); } } else if ( - (staticResolverLike as IUriRedirect).from !== undefined && - (staticResolverLike as IUriRedirect).to !== undefined + (staticResolverLike as IUriRedirect).from !== undefined && + (staticResolverLike as IUriRedirect).to !== undefined ) { - const uriRedirect = staticResolverLike as IUriRedirect; + const uriRedirect = staticResolverLike as IUriRedirect; const from = Uri.from(uriRedirect.from); uriMap.set(from.uri, { @@ -38,10 +38,10 @@ export class StaticResolver uri: Uri.from(uriRedirect.to), }); } else if ( - (staticResolverLike as IUriPackage).uri !== undefined && - (staticResolverLike as IUriPackage).package !== undefined + (staticResolverLike as IUriPackage).uri !== undefined && + (staticResolverLike as IUriPackage).package !== undefined ) { - const uriPackage = staticResolverLike as IUriPackage; + const uriPackage = staticResolverLike as IUriPackage; const uri = Uri.from(uriPackage.uri); uriMap.set(uri.uri, { @@ -50,10 +50,10 @@ export class StaticResolver package: uriPackage.package, }); } else if ( - (staticResolverLike as IUriWrapper).uri !== undefined && - (staticResolverLike as IUriWrapper).wrapper !== undefined + (staticResolverLike as IUriWrapper).uri !== undefined && + (staticResolverLike as IUriWrapper).wrapper !== undefined ) { - const uriWrapper = staticResolverLike as IUriWrapper; + const uriWrapper = staticResolverLike as IUriWrapper; const uri = Uri.from(uriWrapper.uri); uriMap.set(uri.uri, { diff --git a/packages/js/uri-resolvers/src/static/StaticResolverLike.ts b/packages/js/uri-resolvers/src/static/StaticResolverLike.ts index d2b1ce67a0..bdb020c009 100644 --- a/packages/js/uri-resolvers/src/static/StaticResolverLike.ts +++ b/packages/js/uri-resolvers/src/static/StaticResolverLike.ts @@ -1,7 +1,7 @@ -import { IUriRedirect, Uri, IUriPackage, IUriWrapper } from "@polywrap/core-js"; +import { IUriRedirect, IUriPackage, IUriWrapper } from "@polywrap/core-js"; export type StaticResolverLike = - | IUriRedirect - | IUriPackage - | IUriWrapper + | IUriRedirect + | IUriPackage + | IUriWrapper | StaticResolverLike[]; diff --git a/packages/js/wasm/package.json b/packages/js/wasm/package.json index fa0738a960..7dd8530d45 100644 --- a/packages/js/wasm/package.json +++ b/packages/js/wasm/package.json @@ -23,7 +23,6 @@ "@polywrap/core-js": "0.10.0-pre.6", "@polywrap/msgpack-js": "0.10.0-pre.6", "@polywrap/result": "0.10.0-pre.6", - "@polywrap/tracing-js": "0.10.0-pre.6", "@polywrap/wrap-manifest-types-js": "0.10.0-pre.6" }, "devDependencies": { diff --git a/packages/js/wasm/src/WasmWrapper.ts b/packages/js/wasm/src/WasmWrapper.ts index 1cb83f16d0..5f9509d8b7 100644 --- a/packages/js/wasm/src/WasmWrapper.ts +++ b/packages/js/wasm/src/WasmWrapper.ts @@ -7,11 +7,9 @@ import { createWasmWrapper } from "./helpers/createWasmWrapper"; import { WrapManifest } from "@polywrap/wrap-manifest-types-js"; import { msgpackEncode } from "@polywrap/msgpack-js"; -import { Tracer, TracingLevel } from "@polywrap/tracing-js"; import { AsyncWasmInstance } from "@polywrap/asyncify-js"; import { Wrapper, - Uri, InvokeOptions, CoreClient, InvocableResult, @@ -53,14 +51,7 @@ export class WasmWrapper implements Wrapper { constructor( private _manifest: WrapManifest, private _fileReader: IFileReader - ) { - Tracer.startSpan("WasmWrapper: constructor"); - Tracer.setAttribute("args", { - manifest: this._manifest, - fileReader: this._fileReader, - }); - Tracer.endSpan(); - } + ) {} static async from( manifestBuffer: Uint8Array, @@ -99,7 +90,6 @@ export class WasmWrapper implements Wrapper { ); } - @Tracer.traceMethod("WasmWrapper: getFile") public async getFile( options: GetFileOptions ): Promise> { @@ -131,21 +121,14 @@ export class WasmWrapper implements Wrapper { return ResultOk(data); } - @Tracer.traceMethod("WasmWrapper: getManifest") public getManifest(): WrapManifest { return this._manifest; } - @Tracer.traceMethod("WasmWrapper: invoke", TracingLevel.High) public async invoke( - options: InvokeOptions, + options: InvokeOptions, client: CoreClient ): Promise> { - Tracer.setAttribute( - "label", - `WASM Wrapper invoked: ${options.uri.uri}, with method ${options.method}`, - TracingLevel.High - ); try { const { method } = options; const args = options.args || {}; @@ -222,7 +205,6 @@ export class WasmWrapper implements Wrapper { } } - @Tracer.traceMethod("WasmWrapper: _processInvokeResult") private _processInvokeResult( state: State, result: boolean, @@ -243,7 +225,6 @@ export class WasmWrapper implements Wrapper { } } - @Tracer.traceMethod("WasmWrapper: getWasmModule") private async _getWasmModule(): Promise> { if (this._wasmModule === undefined) { const result = await this._fileReader.readFile(WRAP_MODULE_PATH); diff --git a/packages/js/wasm/src/imports.ts b/packages/js/wasm/src/imports.ts index 583e34a6ce..91edfed00f 100644 --- a/packages/js/wasm/src/imports.ts +++ b/packages/js/wasm/src/imports.ts @@ -5,7 +5,7 @@ import { readBytes, readString, writeBytes, writeString } from "./buffer"; import { State } from "./WasmWrapper"; import { msgpackEncode } from "@polywrap/msgpack-js"; -import { CoreClient } from "@polywrap/core-js"; +import { CoreClient, Uri } from "@polywrap/core-js"; export const createImports = (config: { client: CoreClient; @@ -34,7 +34,7 @@ export const createImports = (config: { const args = readBytes(memory.buffer, argsPtr, argsLen); const result = await client.invoke({ - uri: uri, + uri: Uri.from(uri), method: method, args: new Uint8Array(args), encodeResult: true, @@ -100,7 +100,7 @@ export const createImports = (config: { state.subinvokeImplementation.args = [implUri, method, args]; const result = await client.invoke({ - uri: implUri, + uri: Uri.from(implUri), method: method, args: new Uint8Array(args), encodeResult: true, @@ -178,7 +178,7 @@ export const createImports = (config: { uriLen: u32 ): Promise => { const uri = readString(memory.buffer, uriPtr, uriLen); - const result = await client.getImplementations(uri, {}); + const result = await client.getImplementations(Uri.from(uri), {}); if (!result.ok) { abort(result.error?.message as string); return false; From 8443d6d17e957b4a467d1a2345616dcd91d109de Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Mon, 26 Dec 2022 18:13:32 +0400 Subject: [PATCH 02/22] refactor: core-client --- .../js/core-client/src/PolywrapCoreClient.ts | 220 ++---------------- .../src/PolywrapCoreClientConfig.ts | 8 - .../src/__tests__/embedded-package.spec.ts | 2 +- .../src/__tests__/embedded-wrapper.spec.ts | 2 +- packages/js/core-client/src/index.ts | 1 - packages/js/core/src/types/CoreClient.ts | 2 - 6 files changed, 24 insertions(+), 211 deletions(-) delete mode 100644 packages/js/core-client/src/PolywrapCoreClientConfig.ts diff --git a/packages/js/core-client/src/PolywrapCoreClient.ts b/packages/js/core-client/src/PolywrapCoreClient.ts index 1fcd2b8db7..76484f49fd 100644 --- a/packages/js/core-client/src/PolywrapCoreClient.ts +++ b/packages/js/core-client/src/PolywrapCoreClient.ts @@ -1,5 +1,4 @@ import { UriResolverError } from "./UriResolverError"; -import { PolywrapCoreClientConfig } from "./PolywrapCoreClientConfig"; import { Wrapper, @@ -19,70 +18,33 @@ import { UriResolutionContext, getEnvFromUriHistory, InvokeResult, - ValidateOptions, buildCleanUriHistory, + CoreClientConfig, } from "@polywrap/core-js"; import { msgpackEncode, msgpackDecode } from "@polywrap/msgpack-js"; import { - compareSignature, DeserializeManifestOptions, WrapManifest, - ImportedModuleDefinition, } from "@polywrap/wrap-manifest-types-js"; -import { Tracer, TracerConfig, TracingLevel } from "@polywrap/tracing-js"; import { Result, ResultErr, ResultOk } from "@polywrap/result"; export class PolywrapCoreClient implements CoreClient { - private _config: PolywrapCoreClientConfig; - /** * Instantiate a PolywrapClient * * @param config - a core client configuration */ - constructor(config: PolywrapCoreClientConfig) { - try { - this.setTracingEnabled(config?.tracerConfig); - - Tracer.startSpan("PolywrapClient: constructor"); - - this._config = this.buildConfigFromPolywrapCoreClientConfig(config); - - Tracer.setAttribute("config", this._config); - } catch (error) { - Tracer.recordException(error); - throw error; - } finally { - Tracer.endSpan(); - } - } + constructor(private _config: CoreClientConfig) {} /** * Returns the configuration used to instantiate the client * * @returns an immutable Polywrap client config */ - public getConfig(): PolywrapCoreClientConfig { + public getConfig(): CoreClientConfig { return this._config; } - /** - * Enable tracing for intricate debugging - * - * @remarks - * Tracing uses the @polywrap/tracing-js package - * - * @param tracerConfig - configure options such as the tracing level - * @returns void - */ - public setTracingEnabled(tracerConfig?: Partial): void { - if (tracerConfig?.consoleEnabled || tracerConfig?.httpEnabled) { - Tracer.enableTracing("PolywrapClient", tracerConfig); - } else { - Tracer.disableTracing(); - } - } - /** * returns all plugin registrations from the configuration used to instantiate the client * @@ -99,8 +61,7 @@ export class PolywrapCoreClient implements CoreClient { * * @returns an array of interfaces and their registered implementations */ - @Tracer.traceMethod("PolywrapClient: getInterfaces") - public getInterfaces(): readonly InterfaceImplementations[] | undefined { + public getInterfaces(): readonly InterfaceImplementations[] | undefined { return this._config.interfaces; } @@ -109,8 +70,7 @@ export class PolywrapCoreClient implements CoreClient { * * @returns an array of env objects containing wrapper environmental variables */ - @Tracer.traceMethod("PolywrapClient: getEnvs") - public getEnvs(): readonly Env[] | undefined { + public getEnvs(): readonly Env[] | undefined { return this._config.envs; } @@ -119,7 +79,6 @@ export class PolywrapCoreClient implements CoreClient { * * @returns an object that implements the IUriResolver interface */ - @Tracer.traceMethod("PolywrapClient: getUriResolver") public getResolver(): IUriResolver { return this._config.resolver; } @@ -130,10 +89,7 @@ export class PolywrapCoreClient implements CoreClient { * @param uri - the URI used to register the env * @returns an env, or undefined if an env is not found at the given URI */ - @Tracer.traceMethod("PolywrapClient: getEnvByUri") - public getEnvByUri( - uri: TUri - ): Env | undefined { + public getEnvByUri(uri: Uri): Env | undefined { const uriUri = Uri.from(uri); const envs = this.getEnvs(); @@ -151,10 +107,7 @@ export class PolywrapCoreClient implements CoreClient { * @param options - { noValidate?: boolean } * @returns a Result containing the WrapManifest if the request was successful */ - @Tracer.traceMethod("PolywrapClient: getManifest") - public async getManifest( - uri: TUri - ): Promise> { + public async getManifest(uri: Uri): Promise> { const load = await this.loadWrapper(Uri.from(uri), undefined); if (!load.ok) { return load; @@ -172,9 +125,8 @@ export class PolywrapCoreClient implements CoreClient { * @param options - { path: string; encoding?: "utf-8" | string } * @returns a Promise of a Result containing a file if the request was successful */ - @Tracer.traceMethod("PolywrapClient: getFile") - public async getFile( - uri: TUri, + public async getFile( + uri: Uri, options: GetFileOptions ): Promise> { const load = await this.loadWrapper(Uri.from(uri), undefined); @@ -194,12 +146,10 @@ export class PolywrapCoreClient implements CoreClient { * @param options - { applyResolution?: boolean } * @returns a Result containing URI array if the request was successful */ - @Tracer.traceMethod("PolywrapClient: getImplementations") - public async getImplementations( - uri: TUri, + public async getImplementations( + uri: Uri, options: GetImplementationsOptions = {} - ): Promise> { - const isUriTypeString = typeof uri === "string"; + ): Promise> { const applyResolution = !!options.applyResolution; const getImplResult = await getImplementations( @@ -213,9 +163,7 @@ export class PolywrapCoreClient implements CoreClient { return getImplResult; } - const uris = isUriTypeString - ? (getImplResult.value.map((x: Uri) => x.uri) as TUri[]) - : (getImplResult.value as TUri[]); + const uris = getImplResult.value; return ResultOk(uris); } @@ -244,15 +192,11 @@ export class PolywrapCoreClient implements CoreClient { * * @returns A Promise with a Result containing the return value or an error */ - @Tracer.traceMethod("PolywrapClient: invokeWrapper") - public async invokeWrapper< - TData = unknown, - TUri extends Uri | string = string - >( - options: InvokerOptions & { wrapper: Wrapper } + public async invokeWrapper( + options: InvokerOptions & { wrapper: Wrapper } ): Promise> { try { - const typedOptions: InvokeOptions = { + const typedOptions: InvokeOptions = { ...options, uri: Uri.from(options.uri), }; @@ -305,12 +249,11 @@ export class PolywrapCoreClient implements CoreClient { * * @returns A Promise with a Result containing the return value or an error */ - @Tracer.traceMethod("PolywrapClient: invoke") - public async invoke( - options: InvokerOptions + public async invoke( + options: InvokerOptions ): Promise> { try { - const typedOptions: InvokeOptions = { + const typedOptions: InvokeOptions = { ...options, uri: Uri.from(options.uri), }; @@ -334,7 +277,7 @@ export class PolywrapCoreClient implements CoreClient { this ); - const invokeResult = await this.invokeWrapper({ + const invokeResult = await this.invokeWrapper({ env: env?.env, ...typedOptions, wrapper, @@ -356,9 +299,8 @@ export class PolywrapCoreClient implements CoreClient { * @param options - { uri: TUri; resolutionContext?: IUriResolutionContext } * @returns A Promise with a Result containing either a wrap package, a wrapper, or a URI if successful */ - @Tracer.traceMethod("PolywrapClient: tryResolveUri", TracingLevel.High) - public async tryResolveUri( - options: TryResolveUriOptions + public async tryResolveUri( + options: TryResolveUriOptions ): Promise> { const uri = Uri.from(options.uri); @@ -373,14 +315,6 @@ export class PolywrapCoreClient implements CoreClient { resolutionContext ); - if (options.resolutionContext) { - Tracer.setAttribute( - "label", - buildCleanUriHistory(options.resolutionContext.getHistory()), - TracingLevel.High - ); - } - return response; } @@ -397,14 +331,11 @@ export class PolywrapCoreClient implements CoreClient { * @param options - { noValidate?: boolean } * @returns A Promise with a Result containing either a wrapper if successful */ - @Tracer.traceMethod("PolywrapClient: loadWrapper", TracingLevel.High) public async loadWrapper( uri: Uri, resolutionContext?: IUriResolutionContext, options?: DeserializeManifestOptions ): Promise> { - Tracer.setAttribute("label", `Wrapper loaded: ${uri}`, TracingLevel.High); - if (!resolutionContext) { resolutionContext = new UriResolutionContext(); } @@ -459,111 +390,4 @@ export class PolywrapCoreClient implements CoreClient { return ResultOk(uriPackageOrWrapper.wrapper); } } - - @Tracer.traceMethod("PolywrapClient: validateConfig") - public async validate( - uri: TUri, - options: ValidateOptions - ): Promise> { - const wrapper = await this.loadWrapper(Uri.from(uri)); - if (!wrapper.ok) { - return ResultErr(new Error(wrapper.error?.message)); - } - - const { abi } = await wrapper.value.getManifest(); - const importedModules: ImportedModuleDefinition[] = - abi.importedModuleTypes || []; - - const importUri = (importedModuleType: ImportedModuleDefinition) => { - return this.tryResolveUri({ uri: importedModuleType.uri }); - }; - const resolvedModules = await Promise.all(importedModules.map(importUri)); - const modulesNotFound = resolvedModules.filter(({ ok }) => !ok) as { - error: Error; - }[]; - - if (modulesNotFound.length) { - const missingModules = modulesNotFound.map(({ error }) => { - const uriIndex = error?.message.indexOf("\n"); - return error?.message.substring(0, uriIndex); - }); - const error = new Error(JSON.stringify(missingModules)); - return ResultErr(error); - } - - if (options.abi) { - for (const importedModule of importedModules) { - const importedModuleManifest = await this.getManifest( - importedModule.uri - ); - if (!importedModuleManifest.ok) { - return ResultErr(importedModuleManifest.error); - } - const importedMethods = - importedModuleManifest.value.abi.moduleType?.methods || []; - - const expectedMethods = importedModules.find( - ({ uri }) => importedModule.uri === uri - ); - - const errorMessage = `ABI from Uri: ${importedModule.uri} is not compatible with Uri: ${uri}`; - for (const [i, _] of Object.keys(importedMethods).entries()) { - const importedMethod = importedMethods[i]; - - if (expectedMethods?.methods && expectedMethods?.methods.length < i) { - const expectedMethod = expectedMethods?.methods[i]; - const areEqual = compareSignature(importedMethod, expectedMethod); - - if (!areEqual) return ResultErr(new Error(errorMessage)); - } else { - return ResultErr(new Error(errorMessage)); - } - } - } - } - - if (options.recursive) { - const validateImportedModules = importedModules.map(({ uri }) => - this.validate(uri, options) - ); - const resolverUris = await Promise.all(validateImportedModules); - const invalidUris = resolverUris.filter(({ ok }) => !ok) as { - error: Error; - }[]; - if (invalidUris.length) { - const missingUris = invalidUris.map(({ error }) => { - const uriIndex = error?.message.indexOf("\n"); - return error?.message.substring(0, uriIndex); - }); - const error = new Error(JSON.stringify(missingUris)); - return ResultErr(error); - } - } - return ResultOk(true); - } - - private buildConfigFromPolywrapCoreClientConfig( - config: PolywrapCoreClientConfig - ): PolywrapCoreClientConfig { - return { - interfaces: - config?.interfaces?.map((x) => ({ - interface: Uri.from(x.interface), - implementations: x.implementations.map((y) => Uri.from(y)), - })) ?? [], - envs: - config?.envs?.map((x) => ({ - uri: Uri.from(x.uri), - env: x.env, - })) ?? [], - resolver: config.resolver, - tracerConfig: { - consoleEnabled: !!config?.tracerConfig?.consoleEnabled, - consoleDetailed: config?.tracerConfig?.consoleDetailed, - httpEnabled: !!config?.tracerConfig?.httpEnabled, - httpUrl: config?.tracerConfig?.httpUrl, - tracingLevel: config?.tracerConfig?.tracingLevel, - }, - }; - } } diff --git a/packages/js/core-client/src/PolywrapCoreClientConfig.ts b/packages/js/core-client/src/PolywrapCoreClientConfig.ts deleted file mode 100644 index aa5baf913c..0000000000 --- a/packages/js/core-client/src/PolywrapCoreClientConfig.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { CoreClientConfig, Uri } from "@polywrap/core-js"; -import { TracerConfig } from "@polywrap/tracing-js"; - -export interface PolywrapCoreClientConfig< - TUri extends Uri | string = Uri | string -> extends CoreClientConfig { - readonly tracerConfig?: Readonly>; -} diff --git a/packages/js/core-client/src/__tests__/embedded-package.spec.ts b/packages/js/core-client/src/__tests__/embedded-package.spec.ts index 23767d6e3c..f4ce431aa4 100644 --- a/packages/js/core-client/src/__tests__/embedded-package.spec.ts +++ b/packages/js/core-client/src/__tests__/embedded-package.spec.ts @@ -34,7 +34,7 @@ describe("Embedded package", () => { }); const result = await client.invoke({ - uri: simpleWrapperUri.uri, + uri: simpleWrapperUri, method: "simpleMethod", args: { arg: "test", diff --git a/packages/js/core-client/src/__tests__/embedded-wrapper.spec.ts b/packages/js/core-client/src/__tests__/embedded-wrapper.spec.ts index bcfa276989..768a21fe33 100644 --- a/packages/js/core-client/src/__tests__/embedded-wrapper.spec.ts +++ b/packages/js/core-client/src/__tests__/embedded-wrapper.spec.ts @@ -34,7 +34,7 @@ describe("Embedded wrapper", () => { }); const result = await client.invoke({ - uri: simpleWrapperUri.uri, + uri: simpleWrapperUri, method: "simpleMethod", args: { arg: "test", diff --git a/packages/js/core-client/src/index.ts b/packages/js/core-client/src/index.ts index 67a86223b0..d65e626e47 100644 --- a/packages/js/core-client/src/index.ts +++ b/packages/js/core-client/src/index.ts @@ -1,2 +1 @@ export * from "./PolywrapCoreClient"; -export * from "./PolywrapCoreClientConfig"; diff --git a/packages/js/core/src/types/CoreClient.ts b/packages/js/core/src/types/CoreClient.ts index fd0a01e483..268767ef6f 100644 --- a/packages/js/core/src/types/CoreClient.ts +++ b/packages/js/core/src/types/CoreClient.ts @@ -52,6 +52,4 @@ export interface CoreClient extends Invoker, UriResolverHandler { uri: Uri, options: GetImplementationsOptions ): Promise>; - - validate(uri: Uri, options?: ValidateOptions): Promise>; } From 06910ff764c9fa63a5cdd0acb8da0edc6daac93e Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Mon, 26 Dec 2022 19:32:10 +0400 Subject: [PATCH 03/22] refactor: client-config-builder --- .../src/BaseClientConfigBuilder.ts | 349 +++++++----------- .../src/BuilderConfig.ts | 13 + .../client-config-builder/src/ClientConfig.ts | 13 +- .../src/ClientConfigBuilder.ts | 21 +- .../src/IClientConfigBuilder.ts | 58 ++- .../src/bundles/getDefaultConfig.ts | 169 +++------ .../js/client-config-builder/src/index.ts | 1 + .../src/buildPolywrapCoreClientConfig.ts | 11 +- 8 files changed, 236 insertions(+), 399 deletions(-) create mode 100644 packages/js/client-config-builder/src/BuilderConfig.ts diff --git a/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts b/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts index d511610be1..4bc8d6fbca 100644 --- a/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts +++ b/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts @@ -1,54 +1,63 @@ +import { BuilderConfig } from "./BuilderConfig"; import { ClientConfig } from "./ClientConfig"; -import { IClientConfigBuilder } from "./IClientConfigBuilder"; -import { ClientConfigBuilder } from "./ClientConfigBuilder"; +import { IClientConfigBuilder, TEnv, TUri } from "./IClientConfigBuilder"; import { CoreClientConfig, - Uri, - IUriPackage, - IUriWrapper, + Wrapper, + IWrapPackage, Env, + Uri, + InterfaceImplementations, IUriRedirect, + IUriWrapper, + IUriPackage, } from "@polywrap/core-js"; import { UriResolverLike } from "@polywrap/uri-resolvers-js"; export abstract class BaseClientConfigBuilder implements IClientConfigBuilder { - protected config: ClientConfig = { - envs: [], - interfaces: [], - redirects: [], - wrappers: [], - packages: [], + protected _config: BuilderConfig = { + envs: {}, + interfaces: {}, + redirects: {}, + wrappers: {}, + packages: {}, resolvers: [], }; - abstract addDefaults(): ClientConfigBuilder; - abstract buildCoreConfig(): CoreClientConfig; + abstract addDefaults(): IClientConfigBuilder; + abstract buildCoreConfig(): CoreClientConfig; - add(config: Partial): ClientConfigBuilder { - if (config.envs) { - this.addEnvs(config.envs); - } + get config(): BuilderConfig { + return this._config; + } - if (config.interfaces) { - for (const interfaceImpl of config.interfaces) { - this.addInterfaceImplementations( - interfaceImpl.interface, - interfaceImpl.implementations - ); - } + add(config: Partial): IClientConfigBuilder { + if (config.envs) { + this._config.envs = { ...this._config.envs, ...config.envs }; } if (config.redirects) { - this.addRedirects(config.redirects); + this._config.redirects = { + ...this._config.redirects, + ...config.redirects, + }; } if (config.wrappers) { - this.addWrappers(config.wrappers); + this._config.wrappers = { ...this._config.wrappers, ...config.wrappers }; } if (config.packages) { - this.addPackages(config.packages); + this._config.packages = { ...this._config.packages, ...config.packages }; + } + + if (config.interfaces) { + for (const [interfaceUri, implementations] of Object.entries( + config.interfaces + )) { + this.addInterfaceImplementations(interfaceUri, implementations); + } } if (config.resolvers) { @@ -58,283 +67,136 @@ export abstract class BaseClientConfigBuilder implements IClientConfigBuilder { return this; } - addWrapper(uriWrapper: IUriWrapper): ClientConfigBuilder { - const wrapperUri = Uri.from(uriWrapper.uri); - - const existingRegistration = this.config.wrappers.find((x) => - Uri.equals(x.uri, wrapperUri) - ); - - if (existingRegistration) { - existingRegistration.wrapper = uriWrapper.wrapper; - } else { - this.config.wrappers.push({ - uri: wrapperUri, - wrapper: uriWrapper.wrapper, - }); - } + addWrapper(uri: string, wrapper: Wrapper): IClientConfigBuilder { + this._config.wrappers[uri] = wrapper; return this; } - addWrappers(uriWrappers: IUriWrapper[]): ClientConfigBuilder { - for (const uriWrapper of uriWrappers) { - this.addWrapper(uriWrapper); - } + addWrappers(uriWrappers: Record): IClientConfigBuilder { + this._config.wrappers = { ...this._config.wrappers, ...uriWrappers }; return this; } - removeWrapper(uri: Uri | string): ClientConfigBuilder { - const wrapperUri = Uri.from(uri); - - const idx = this.config.wrappers.findIndex((x) => - Uri.equals(x.uri, wrapperUri) - ); - - if (idx > -1) { - this.config.wrappers.splice(idx, 1); - } + removeWrapper(uri: string): IClientConfigBuilder { + delete this._config.wrappers[uri]; return this; } - addPackage(uriPackage: IUriPackage): ClientConfigBuilder { - const packageUri = Uri.from(uriPackage.uri); - - const existingRegistration = this.config.packages.find((x) => - Uri.equals(x.uri, packageUri) - ); - - if (existingRegistration) { - existingRegistration.package = uriPackage.package; - } else { - this.config.packages.push({ - uri: packageUri, - package: uriPackage.package, - }); - } + addPackage(uri: string, wrapPackage: IWrapPackage): IClientConfigBuilder { + this._config.packages[uri] = wrapPackage; return this; } - addPackages(uriPackages: IUriPackage[]): ClientConfigBuilder { - for (const uriPackage of uriPackages) { - this.addPackage(uriPackage); - } + addPackages(uriPackages: Record): IClientConfigBuilder { + this._config.packages = { ...this._config.packages, ...uriPackages }; return this; } - removePackage(uri: Uri | string): ClientConfigBuilder { - const packageUri = Uri.from(uri); - - const idx = this.config.packages.findIndex((x) => - Uri.equals(x.uri, packageUri) - ); - - if (idx > -1) { - this.config.packages.splice(idx, 1); - } + removePackage(uri: string): IClientConfigBuilder { + delete this._config.packages[uri]; return this; } - addEnv(uri: Uri | string, env: Record): ClientConfigBuilder { - const envUri = Uri.from(uri); - - const idx = this.config.envs.findIndex((x) => Uri.equals(x.uri, envUri)); - - if (idx > -1) { - this.config.envs[idx].env = { - ...this.config.envs[idx].env, - ...env, - }; - } else { - this.config.envs.push({ - uri: envUri, - env: env, - }); - } + addEnv(uri: TUri, env: TEnv): IClientConfigBuilder { + this._config.envs[uri] = env; return this; } - addEnvs(envs: Env[]): ClientConfigBuilder { - for (const env of envs) { - this.addEnv(env.uri, env.env); - } + addEnvs(envs: Record): IClientConfigBuilder { + this._config.envs = { ...this._config.envs, ...envs }; return this; } - removeEnv(uri: Uri | string): ClientConfigBuilder { - const envUri = Uri.from(uri); - - const idx = this.config.envs.findIndex((x) => Uri.equals(x.uri, envUri)); - - if (idx > -1) { - this.config.envs.splice(idx, 1); - } + removeEnv(uri: TUri): IClientConfigBuilder { + delete this._config.envs[uri]; return this; } - setEnv(uri: Uri | string, env: Record): ClientConfigBuilder { - const envUri = Uri.from(uri); - - const idx = this.config.envs.findIndex((x) => Uri.equals(x.uri, envUri)); - - if (idx > -1) { - this.config.envs[idx].env = env; - } else { - this.config.envs.push({ - uri: envUri, - env: env, - }); - } + setEnv(uri: TUri, env: TEnv): IClientConfigBuilder { + this._config.envs[uri] = env; return this; } addInterfaceImplementation( - interfaceUri: Uri | string, - implementationUri: Uri | string - ): ClientConfigBuilder { - const interfaceUriSanitized = Uri.from(interfaceUri); - const implementationUriSanitized = Uri.from(implementationUri); - - const existingInterface = this.config.interfaces.find((x) => - Uri.equals(x.interface, interfaceUriSanitized) - ); + interfaceUri: string, + implementationUri: string + ): IClientConfigBuilder { + const existingInterface = this._config.interfaces[interfaceUri]; if (existingInterface) { - if ( - !existingInterface.implementations.some((x) => - Uri.equals(x, implementationUriSanitized) - ) - ) { - existingInterface.implementations.push(implementationUriSanitized); - } + existingInterface.add(implementationUri); } else { - this.config.interfaces.push({ - interface: interfaceUriSanitized, - implementations: [implementationUriSanitized], - }); + this._config.interfaces[interfaceUri] = new Set([implementationUri]); } return this; } addInterfaceImplementations( - interfaceUri: Uri | string, - implementationUris: Array - ): ClientConfigBuilder { - const interfaceUriSanitized = Uri.from(interfaceUri); - const implementationUrisSanitized = implementationUris.map(Uri.from); - - const existingInterface = this.config.interfaces.find((x) => - Uri.equals(x.interface, interfaceUriSanitized) - ); + interfaceUri: TUri, + implementationUris: Array | Set + ): IClientConfigBuilder { + const existingInterface = this._config.interfaces[interfaceUri]; if (existingInterface) { - for (const implUri of implementationUrisSanitized) { - if ( - !existingInterface.implementations.some((x) => Uri.equals(x, implUri)) - ) { - existingInterface.implementations.push(implUri); - } + for (const implementationUri of implementationUris) { + existingInterface.add(implementationUri); } } else { - this.config.interfaces.push({ - interface: interfaceUriSanitized, - implementations: implementationUrisSanitized, - }); + this._config.interfaces[interfaceUri] = new Set(implementationUris); } return this; } removeInterfaceImplementation( - interfaceUri: Uri | string, - implementationUri: Uri | string - ): ClientConfigBuilder { - const interfaceUriSanitized = Uri.from(interfaceUri); - const implementationUriSanitized = Uri.from(implementationUri); - - const existingInterface = this.config.interfaces.find((x) => - Uri.equals(x.interface, interfaceUriSanitized) - ); + interfaceUri: TUri, + implementationUri: TUri + ): IClientConfigBuilder { + const existingInterface = this._config.interfaces[interfaceUri]; - if (existingInterface) { - const idx = existingInterface.implementations.findIndex((x) => - Uri.equals(x, implementationUriSanitized) - ); - - if (idx > -1) { - existingInterface.implementations.splice(idx, 1); - } + if (!existingInterface) return this; - if (existingInterface.implementations.length === 0) { - this.config.interfaces.splice( - this.config.interfaces.indexOf(existingInterface), - 1 - ); - } - } + existingInterface.delete(implementationUri); return this; } - addRedirect(from: Uri | string, to: Uri | string): ClientConfigBuilder { - const fromSanitized = Uri.from(from); - const toSanitized = Uri.from(to); - - const existingRedirect = this.config.redirects.find((x) => - Uri.equals(x.from, fromSanitized) - ); - - if (existingRedirect) { - existingRedirect.to = toSanitized; - } else { - this.config.redirects.push({ - from: fromSanitized, - to: toSanitized, - }); - } + addRedirect(from: TUri, to: TUri): IClientConfigBuilder { + this._config.redirects[from] = to; return this; } - addRedirects(redirects: IUriRedirect[]): ClientConfigBuilder { - for (const redirect of redirects) { - this.addRedirect(redirect.from, redirect.to); - } + addRedirects(redirects: Record): IClientConfigBuilder { + this._config.redirects = { ...this._config.redirects, ...redirects }; return this; } - removeRedirect(from: Uri | string): ClientConfigBuilder { - const fromSanitized = Uri.from(from); - - const idx = this.config.redirects.findIndex((x) => - Uri.equals(x.from, fromSanitized) - ); - - if (idx > -1) { - this.config.redirects.splice(idx, 1); - } + removeRedirect(from: TUri): IClientConfigBuilder { + delete this._config.redirects[from]; return this; } - addResolver(resolver: UriResolverLike): ClientConfigBuilder { - this.config.resolvers.push(resolver); + addResolver(resolver: UriResolverLike): IClientConfigBuilder { + this._config.resolvers.push(resolver); return this; } - addResolvers(resolvers: UriResolverLike[]): ClientConfigBuilder { + addResolvers(resolvers: UriResolverLike[]): IClientConfigBuilder { for (const resolver of resolvers) { this.addResolver(resolver); } @@ -342,7 +204,46 @@ export abstract class BaseClientConfigBuilder implements IClientConfigBuilder { return this; } - build(): ClientConfig { - return this.config; + build(): ClientConfig { + const envs: Env[] = []; + for (const [uri, env] of Object.entries(this._config.envs)) { + envs.push({ uri: Uri.from(uri), env }); + } + + const interfaces: InterfaceImplementations[] = []; + for (const [interfaceUri, implementations] of Object.entries( + this._config.interfaces + )) { + interfaces.push({ + interface: Uri.from(interfaceUri), + implementations: Array.from(implementations).map((uri) => + Uri.from(uri) + ), + }); + } + + const redirects: IUriRedirect[] = []; + for (const [uri, redirect] of Object.entries(this._config.redirects)) { + redirects.push({ from: Uri.from(uri), to: Uri.from(redirect) }); + } + + const wrappers: IUriWrapper[] = []; + for (const [uri, wrapper] of Object.entries(this._config.wrappers)) { + wrappers.push({ uri: Uri.from(uri), wrapper }); + } + + const packages: IUriPackage[] = []; + for (const [uri, wrapPackage] of Object.entries(this._config.packages)) { + packages.push({ uri: Uri.from(uri), package: wrapPackage }); + } + + return { + envs, + interfaces, + redirects, + wrappers, + packages, + resolvers: this._config.resolvers, + }; } } diff --git a/packages/js/client-config-builder/src/BuilderConfig.ts b/packages/js/client-config-builder/src/BuilderConfig.ts new file mode 100644 index 0000000000..52a7b8ad90 --- /dev/null +++ b/packages/js/client-config-builder/src/BuilderConfig.ts @@ -0,0 +1,13 @@ +import { TEnv, TUri } from "./IClientConfigBuilder"; + +import { Wrapper, IWrapPackage } from "@polywrap/core-js"; +import { UriResolverLike } from "@polywrap/uri-resolvers-js"; + +export interface BuilderConfig { + envs: Record; + interfaces: Record>; + redirects: Record; + wrappers: Record; + packages: Record; + resolvers: UriResolverLike[]; +} diff --git a/packages/js/client-config-builder/src/ClientConfig.ts b/packages/js/client-config-builder/src/ClientConfig.ts index bb6593efd5..0d21f2e0c3 100644 --- a/packages/js/client-config-builder/src/ClientConfig.ts +++ b/packages/js/client-config-builder/src/ClientConfig.ts @@ -1,5 +1,4 @@ import { - Uri, Env, InterfaceImplementations, IUriRedirect, @@ -8,11 +7,11 @@ import { } from "@polywrap/core-js"; import { UriResolverLike } from "@polywrap/uri-resolvers-js"; -export interface ClientConfig { - readonly envs: Env[]; - readonly interfaces: InterfaceImplementations[]; - readonly redirects: IUriRedirect[]; - readonly wrappers: IUriWrapper[]; - readonly packages: IUriPackage[]; +export interface ClientConfig { + readonly envs: Env[]; + readonly interfaces: InterfaceImplementations[]; + readonly redirects: IUriRedirect[]; + readonly wrappers: IUriWrapper[]; + readonly packages: IUriPackage[]; readonly resolvers: UriResolverLike[]; } diff --git a/packages/js/client-config-builder/src/ClientConfigBuilder.ts b/packages/js/client-config-builder/src/ClientConfigBuilder.ts index 4cc1e04edb..7082eab916 100644 --- a/packages/js/client-config-builder/src/ClientConfigBuilder.ts +++ b/packages/js/client-config-builder/src/ClientConfigBuilder.ts @@ -1,7 +1,8 @@ import { getDefaultConfig } from "./bundles"; import { BaseClientConfigBuilder } from "./BaseClientConfigBuilder"; +import { IClientConfigBuilder } from "./IClientConfigBuilder"; -import { CoreClientConfig, Uri, IUriResolver } from "@polywrap/core-js"; +import { CoreClientConfig, IUriResolver } from "@polywrap/core-js"; import { IWrapperCache, PackageToWrapperCacheResolver, @@ -19,25 +20,27 @@ export class ClientConfigBuilder extends BaseClientConfigBuilder { super(); } - addDefaults(): ClientConfigBuilder { + addDefaults(): IClientConfigBuilder { return this.add(getDefaultConfig()); } - buildCoreConfig(): CoreClientConfig { + buildCoreConfig(): CoreClientConfig { + const clientConfig = this.build(); + return { - envs: this.config.envs, - interfaces: this.config.interfaces, + envs: clientConfig.envs, + interfaces: clientConfig.interfaces, resolver: this.resolver ?? RecursiveResolver.from( PackageToWrapperCacheResolver.from( [ StaticResolver.from([ - ...this.config.redirects, - ...this.config.wrappers, - ...this.config.packages, + ...clientConfig.redirects, + ...clientConfig.wrappers, + ...clientConfig.packages, ]), - ...this.config.resolvers, + ...this._config.resolvers, new ExtendableUriResolver(), ], this.wrapperCache ?? new WrapperCache() diff --git a/packages/js/client-config-builder/src/IClientConfigBuilder.ts b/packages/js/client-config-builder/src/IClientConfigBuilder.ts index a9da5352ba..51ec10c7ee 100644 --- a/packages/js/client-config-builder/src/IClientConfigBuilder.ts +++ b/packages/js/client-config-builder/src/IClientConfigBuilder.ts @@ -1,45 +1,43 @@ +import { BuilderConfig } from "./BuilderConfig"; import { ClientConfig } from "./ClientConfig"; -import { - CoreClientConfig, - Uri, - IUriPackage, - IUriWrapper, - Env, - IUriRedirect, -} from "@polywrap/core-js"; +import { CoreClientConfig, Wrapper, IWrapPackage } from "@polywrap/core-js"; import { UriResolverLike } from "@polywrap/uri-resolvers-js"; +export type TUri = string; +export type TEnv = Record; + export interface IClientConfigBuilder { - build(): ClientConfig; - buildCoreConfig(): CoreClientConfig; - add(config: Partial): IClientConfigBuilder; + config: BuilderConfig; + build(): ClientConfig; + buildCoreConfig(): CoreClientConfig; + add(config: Partial): IClientConfigBuilder; addDefaults(): IClientConfigBuilder; - addWrapper(uriWrapper: IUriWrapper): IClientConfigBuilder; - addWrappers(uriWrappers: IUriWrapper[]): IClientConfigBuilder; - removeWrapper(uri: Uri | string): IClientConfigBuilder; - addPackage(uriPackage: IUriPackage): IClientConfigBuilder; - addPackages(uriPackages: IUriPackage[]): IClientConfigBuilder; - removePackage(uri: Uri | string): IClientConfigBuilder; - addEnv(uri: Uri | string, env: Record): IClientConfigBuilder; - addEnvs(envs: Env[]): IClientConfigBuilder; - removeEnv(uri: Uri | string): IClientConfigBuilder; - setEnv(uri: Uri | string, env: Record): IClientConfigBuilder; + addWrapper(uri: TUri, wrapper: Wrapper): IClientConfigBuilder; + addWrappers(uriWrappers: Record): IClientConfigBuilder; + removeWrapper(uri: TUri): IClientConfigBuilder; + addPackage(uri: TUri, wrapPackage: IWrapPackage): IClientConfigBuilder; + addPackages(uriPackages: Record): IClientConfigBuilder; + removePackage(uri: TUri): IClientConfigBuilder; + addEnv(uri: TUri, env: TEnv): IClientConfigBuilder; + addEnvs(uriEnvs: Record): IClientConfigBuilder; + removeEnv(uri: TUri): IClientConfigBuilder; + setEnv(uri: TUri, env: TEnv): IClientConfigBuilder; addInterfaceImplementation( - interfaceUri: Uri | string, - implementationUri: Uri | string + interfaceUri: TUri, + implementationUri: TUri ): IClientConfigBuilder; addInterfaceImplementations( - interfaceUri: Uri | string, - implementationUris: Array + interfaceUri: TUri, + implementationUris: Array ): IClientConfigBuilder; removeInterfaceImplementation( - interfaceUri: Uri | string, - implementationUri: Uri | string + interfaceUri: TUri, + implementationUri: TUri ): IClientConfigBuilder; - addRedirect(from: Uri | string, to: Uri | string): IClientConfigBuilder; - addRedirects(redirects: IUriRedirect[]): IClientConfigBuilder; - removeRedirect(from: Uri | string): IClientConfigBuilder; + addRedirect(from: TUri, to: TUri): IClientConfigBuilder; + addRedirects(redirects: Record): IClientConfigBuilder; + removeRedirect(from: TUri): IClientConfigBuilder; addResolver(resolver: UriResolverLike): IClientConfigBuilder; addResolvers(resolvers: UriResolverLike[]): IClientConfigBuilder; } diff --git a/packages/js/client-config-builder/src/bundles/getDefaultConfig.ts b/packages/js/client-config-builder/src/bundles/getDefaultConfig.ts index 2c863a3f6e..0489269cfe 100644 --- a/packages/js/client-config-builder/src/bundles/getDefaultConfig.ts +++ b/packages/js/client-config-builder/src/bundles/getDefaultConfig.ts @@ -1,6 +1,7 @@ -import { ClientConfig } from "../ClientConfig"; +import { BuilderConfig } from "../BuilderConfig"; +import { TUri } from "../IClientConfigBuilder"; -import { IUriPackage, Uri, IWrapPackage } from "@polywrap/core-js"; +import { IWrapPackage } from "@polywrap/core-js"; import { ipfsPlugin } from "@polywrap/ipfs-plugin-js"; import { ipfsResolverPlugin } from "@polywrap/ipfs-resolver-plugin-js"; import { @@ -16,68 +17,6 @@ import { loggerPlugin } from "@polywrap/logger-plugin-js"; import { fileSystemResolverPlugin } from "@polywrap/fs-resolver-plugin-js"; import { concurrentPromisePlugin } from "concurrent-plugin-js"; -export const getDefaultConfig = (): ClientConfig => { - return { - envs: [ - { - uri: new Uri(defaultWrappers.graphNode), - env: { - provider: "https://api.thegraph.com", - }, - }, - { - uri: new Uri("wrap://ens/ipfs.polywrap.eth"), - env: { - provider: defaultIpfsProviders[0], - fallbackProviders: defaultIpfsProviders.slice(1), - }, - }, - ], - redirects: [ - { - from: new Uri("wrap://ens/sha3.polywrap.eth"), - to: new Uri(defaultWrappers.sha3), - }, - { - from: new Uri("wrap://ens/uts46.polywrap.eth"), - to: new Uri(defaultWrappers.uts46), - }, - { - from: new Uri("wrap://ens/graph-node.polywrap.eth"), - to: new Uri(defaultWrappers.graphNode), - }, - { - from: new Uri("wrap://ens/wrappers.polywrap.eth:logger@1.0.0"), - to: new Uri("wrap://plugin/logger"), - }, - ], - interfaces: [ - { - interface: new Uri("wrap://ens/uri-resolver.core.polywrap.eth"), - implementations: [ - new Uri("wrap://ens/ipfs-resolver.polywrap.eth"), - new Uri("wrap://ens/ens-resolver.polywrap.eth"), - new Uri("wrap://ens/fs-resolver.polywrap.eth"), - new Uri("wrap://ens/http-resolver.polywrap.eth"), - // ens-text-record-resolver - new Uri("wrap://ipfs/QmfRCVA1MSAjUbrXXjya4xA9QHkbWeiKRsT7Um1cvrR7FY"), - ], - }, - { - interface: new Uri("wrap://ens/wrappers.polywrap.eth:logger@1.0.0"), - implementations: [new Uri("wrap://plugin/logger")], - }, - { - interface: new Uri(defaultWrappers.concurrentInterface), - implementations: [new Uri("wrap://plugin/concurrent")], - }, - ], - packages: getDefaultPlugins(), - wrappers: [], - resolvers: [], - }; -}; - export const defaultIpfsProviders = [ "https://ipfs.wrappers.io", "https://ipfs.io", @@ -90,63 +29,55 @@ export const defaultWrappers = { concurrentInterface: "wrap://ens/goerli/interface.concurrent.wrappers.eth", }; -export const getDefaultPlugins = (): IUriPackage[] => { - return [ +export const getDefaultPlugins = (): Record => { + return { // IPFS is required for downloading Polywrap packages - { - uri: new Uri("wrap://ens/ipfs.polywrap.eth"), - package: ipfsPlugin({}), - }, + "wrap://ens/ipfs.polywrap.eth": ipfsPlugin({}), // ENS is required for resolving domain to IPFS hashes - { - uri: new Uri("wrap://ens/ens-resolver.polywrap.eth"), - package: ensResolverPlugin({}), - }, - { - uri: new Uri("wrap://ens/ethereum.polywrap.eth"), - package: ethereumPlugin({ - connections: new Connections({ - networks: { - mainnet: new Connection({ - provider: - "https://mainnet.infura.io/v3/b00b2c2cc09c487685e9fb061256d6a6", - }), - goerli: new Connection({ - provider: - "https://goerli.infura.io/v3/b00b2c2cc09c487685e9fb061256d6a6", - }), - }, - }), + "wrap://ens/ens-resolver.polywrap.eth": ensResolverPlugin({}), + // Ethereum is required for resolving domain to Ethereum addresses + "wrap://ens/ethereum.polywrap.eth": ethereumPlugin({ + connections: new Connections({ + networks: { + mainnet: new Connection({ + provider: + "https://mainnet.infura.io/v3/b00b2c2cc09c487685e9fb061256d6a6", + }), + goerli: new Connection({ + provider: + "https://goerli.infura.io/v3/b00b2c2cc09c487685e9fb061256d6a6", + }), + }, }), + }), + "wrap://ens/http.polywrap.eth": httpPlugin({}), + "wrap://ens/http-resolver.polywrap.eth": httpResolverPlugin({}), + "wrap://plugin/logger": loggerPlugin({}) as IWrapPackage, + "wrap://ens/fs.polywrap.eth": fileSystemPlugin({}), + "wrap://ens/fs-resolver.polywrap.eth": fileSystemResolverPlugin({}), + "wrap://ens/ipfs-resolver.polywrap.eth": ipfsResolverPlugin({}), + "wrap://plugin/concurrent": concurrentPromisePlugin({}), + }; +}; + +export const getDefaultConfig = (): BuilderConfig => ({ + redirects: { + "wrap://ens/sha3.polywrap.eth": defaultWrappers.sha3, + "wrap://ens/uts46.polywrap.eth": defaultWrappers.uts46, + "wrap://ens/graph-node.polywrap.eth": defaultWrappers.graphNode, + "wrap://ens/wrappers.polywrap.eth:logger@1.0.0": "wrap://plugin/logger", + }, + envs: { + [defaultWrappers.graphNode]: { + provider: "https://api.thegraph.com", }, - { - uri: new Uri("wrap://ens/http.polywrap.eth"), - package: httpPlugin({}), - }, - { - uri: new Uri("wrap://ens/http-resolver.polywrap.eth"), - package: httpResolverPlugin({}), - }, - { - uri: new Uri("wrap://plugin/logger"), - // TODO: remove this once types are updated - package: loggerPlugin({}) as IWrapPackage, - }, - { - uri: new Uri("wrap://ens/fs.polywrap.eth"), - package: fileSystemPlugin({}), - }, - { - uri: new Uri("wrap://ens/fs-resolver.polywrap.eth"), - package: fileSystemResolverPlugin({}), - }, - { - uri: new Uri("wrap://ens/ipfs-resolver.polywrap.eth"), - package: ipfsResolverPlugin({}), - }, - { - uri: new Uri("wrap://plugin/concurrent"), - package: concurrentPromisePlugin({}), + "wrap://ens/ipfs.polywrap.eth": { + provider: defaultIpfsProviders[0], + fallbackProviders: defaultIpfsProviders.slice(1), }, - ]; -}; + }, + packages: getDefaultPlugins(), + wrappers: {}, + interfaces: {}, + resolvers: [], +}); diff --git a/packages/js/client-config-builder/src/index.ts b/packages/js/client-config-builder/src/index.ts index 0280e13ee1..bddae108e2 100644 --- a/packages/js/client-config-builder/src/index.ts +++ b/packages/js/client-config-builder/src/index.ts @@ -1,4 +1,5 @@ export * from "./BaseClientConfigBuilder"; +export * from "./BuilderConfig"; export * from "./ClientConfig"; export * from "./ClientConfigBuilder"; export * from "./IClientConfigBuilder"; diff --git a/packages/js/client/src/buildPolywrapCoreClientConfig.ts b/packages/js/client/src/buildPolywrapCoreClientConfig.ts index a57b9bff50..a6a1d24d36 100644 --- a/packages/js/client/src/buildPolywrapCoreClientConfig.ts +++ b/packages/js/client/src/buildPolywrapCoreClientConfig.ts @@ -17,14 +17,5 @@ export const buildPolywrapCoreClientConfig = ( const sanitizedConfig = builder.buildCoreConfig(); - return { - ...sanitizedConfig, - tracerConfig: { - consoleEnabled: !!config?.tracerConfig?.consoleEnabled, - consoleDetailed: config?.tracerConfig?.consoleDetailed, - httpEnabled: !!config?.tracerConfig?.httpEnabled, - httpUrl: config?.tracerConfig?.httpUrl, - tracingLevel: config?.tracerConfig?.tracingLevel, - }, - }; + return sanitizedConfig; }; From edef74840b0198f35104586125ccfd5619fbb939 Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Mon, 26 Dec 2022 21:43:04 +0400 Subject: [PATCH 04/22] refactor: polywrap-client --- packages/js/client/src/PolywrapClient.ts | 234 +++++++++++++++++- .../js/client/src/PolywrapClientConfig.ts | 21 +- .../js/client/src/PolywrapCoreClientConfig.ts | 15 ++ .../src/buildPolywrapCoreClientConfig.ts | 21 -- .../helpers/buildPolywrapCoreClientConfig.ts | 109 ++++++++ packages/js/client/src/helpers/index.ts | 2 + packages/js/client/src/helpers/sanitizeUri.ts | 7 + packages/js/client/src/types/Env.ts | 9 + packages/js/client/src/types/IUriPackage.ts | 6 + packages/js/client/src/types/IUriRedirect.ts | 6 + packages/js/client/src/types/IUriWrapper.ts | 6 + .../src/types/InterfaceImplementations.ts | 6 + .../js/client/src/types/InvokerOptions.ts | 23 ++ .../client/src/types/TryResolveUriOptions.ts | 7 + .../js/client/src/types/UriResolverLike.ts | 12 + packages/js/client/src/types/index.ts | 8 + packages/js/core/src/types/Env.ts | 16 -- .../src/types/InterfaceImplementations.ts | 19 -- 18 files changed, 456 insertions(+), 71 deletions(-) create mode 100644 packages/js/client/src/PolywrapCoreClientConfig.ts delete mode 100644 packages/js/client/src/buildPolywrapCoreClientConfig.ts create mode 100644 packages/js/client/src/helpers/buildPolywrapCoreClientConfig.ts create mode 100644 packages/js/client/src/helpers/index.ts create mode 100644 packages/js/client/src/helpers/sanitizeUri.ts create mode 100644 packages/js/client/src/types/Env.ts create mode 100644 packages/js/client/src/types/IUriPackage.ts create mode 100644 packages/js/client/src/types/IUriRedirect.ts create mode 100644 packages/js/client/src/types/IUriWrapper.ts create mode 100644 packages/js/client/src/types/InterfaceImplementations.ts create mode 100644 packages/js/client/src/types/InvokerOptions.ts create mode 100644 packages/js/client/src/types/TryResolveUriOptions.ts create mode 100644 packages/js/client/src/types/UriResolverLike.ts create mode 100644 packages/js/client/src/types/index.ts diff --git a/packages/js/client/src/PolywrapClient.ts b/packages/js/client/src/PolywrapClient.ts index 53357ac841..56d58e2fff 100644 --- a/packages/js/client/src/PolywrapClient.ts +++ b/packages/js/client/src/PolywrapClient.ts @@ -1,10 +1,29 @@ import { PolywrapClientConfig } from "./PolywrapClientConfig"; -import { buildPolywrapCoreClientConfig } from "./buildPolywrapCoreClientConfig"; +import { buildPolywrapCoreClientConfig, sanitizeUri } from "./helpers"; +import { InvokerOptions, TryResolveUriOptions } from "./types"; +import { PolywrapCoreClientConfig } from "./PolywrapCoreClientConfig"; +import { PolywrapCoreClient } from "@polywrap/core-client-js"; import { - PolywrapCoreClient, - PolywrapCoreClientConfig, -} from "@polywrap/core-client-js"; + CoreClientConfig, + Env, + GetFileOptions, + GetImplementationsOptions, + InterfaceImplementations, + InvokeResult, + IUriResolver, + Uri, + UriPackageOrWrapper, + ValidateOptions, + Wrapper, +} from "@polywrap/core-js"; +import { Result, ResultErr, ResultOk } from "@polywrap/result"; +import { + compareSignature, + ImportedModuleDefinition, + WrapManifest, +} from "@polywrap/wrap-manifest-types-js"; +import { Tracer, TracerConfig } from "@polywrap/tracing-js"; export class PolywrapClient extends PolywrapCoreClient { /** @@ -25,12 +44,205 @@ export class PolywrapClient extends PolywrapCoreClient { | PolywrapCoreClientConfig, options?: { noDefaults?: boolean } ) { - super( - !options?.noDefaults - ? buildPolywrapCoreClientConfig( - config as PolywrapClientConfig | undefined - ) - : (config as PolywrapCoreClientConfig) - ); + super(buildPolywrapCoreClientConfig(config, options?.noDefaults ?? false)); + try { + this.setTracingEnabled(config?.tracerConfig); + + Tracer.startSpan("PolywrapClient: constructor"); + } catch (error) { + Tracer.recordException(error); + throw error; + } finally { + Tracer.endSpan(); + } + } + + /** + * Enable tracing for intricate debugging + * + * @remarks + * Tracing uses the @polywrap/tracing-js package + * + * @param tracerConfig - configure options such as the tracing level + * @returns void + */ + public setTracingEnabled(tracerConfig?: Partial): void { + if (tracerConfig?.consoleEnabled || tracerConfig?.httpEnabled) { + Tracer.enableTracing("PolywrapClient", tracerConfig); + } else { + Tracer.disableTracing(); + } + } + + @Tracer.traceMethod("PolywrapClient: getConfig") + public getConfig(): CoreClientConfig { + return super.getConfig(); + } + + @Tracer.traceMethod("PolywrapClient: getInterfaces") + public getInterfaces(): readonly InterfaceImplementations[] | undefined { + return super.getInterfaces(); + } + + @Tracer.traceMethod("PolywrapClient: getEnvs") + public getEnvs(): readonly Env[] | undefined { + return super.getEnvs(); + } + + @Tracer.traceMethod("PolywrapClient: getResolver") + public getResolver(): IUriResolver { + return super.getResolver(); + } + + @Tracer.traceMethod("PolywrapClient: getEnvByUri") + public getEnvByUri( + uri: TUri + ): Env | undefined { + return super.getEnvByUri(sanitizeUri(uri)); + } + + @Tracer.traceMethod("PolywrapClient: getManifest") + public async getManifest( + uri: TUri + ): Promise> { + return super.getManifest(sanitizeUri(uri)); + } + + @Tracer.traceMethod("PolywrapClient: getFile") + public async getFile( + uri: TUri, + options: GetFileOptions + ): Promise> { + return super.getFile(sanitizeUri(uri), options); + } + + @Tracer.traceMethod("PolywrapClient: getImplementations") + public async getImplementations( + uri: TUri, + options?: GetImplementationsOptions + ): Promise> { + return super.getImplementations(sanitizeUri(uri), options); + } + + @Tracer.traceMethod("PolywrapClient: invokeWrapper") + public async invokeWrapper< + TData = unknown, + TUri extends Uri | string = string + >( + options: InvokerOptions & { wrapper: Wrapper } + ): Promise> { + return super.invokeWrapper({ + ...options, + uri: sanitizeUri(options.uri), + }); + } + + @Tracer.traceMethod("PolywrapClient: invoke") + public async invoke( + options: InvokerOptions + ): Promise> { + return super.invoke({ + ...options, + uri: sanitizeUri(options.uri), + }); + } + + @Tracer.traceMethod("PolywrapClient: tryResolveUri") + public async tryResolveUri( + options: TryResolveUriOptions + ): Promise> { + return super.tryResolveUri({ + ...options, + uri: sanitizeUri(options.uri), + }); + } + + @Tracer.traceMethod("PolywrapClient: loadWrapper") + public async loadWrapper( + uri: TUri + ): Promise> { + return super.loadWrapper(sanitizeUri(uri)); + } + + @Tracer.traceMethod("PolywrapClient: validateConfig") + public async validate( + uri: TUri, + options: ValidateOptions + ): Promise> { + const wrapper = await this.loadWrapper(Uri.from(uri)); + if (!wrapper.ok) { + return ResultErr(new Error(wrapper.error?.message)); + } + + const { abi } = await wrapper.value.getManifest(); + const importedModules: ImportedModuleDefinition[] = + abi.importedModuleTypes || []; + + const importUri = (importedModuleType: ImportedModuleDefinition) => { + return this.tryResolveUri({ uri: importedModuleType.uri }); + }; + const resolvedModules = await Promise.all(importedModules.map(importUri)); + const modulesNotFound = resolvedModules.filter(({ ok }) => !ok) as { + error: Error; + }[]; + + if (modulesNotFound.length) { + const missingModules = modulesNotFound.map(({ error }) => { + const uriIndex = error?.message.indexOf("\n"); + return error?.message.substring(0, uriIndex); + }); + const error = new Error(JSON.stringify(missingModules)); + return ResultErr(error); + } + + if (options.abi) { + for (const importedModule of importedModules) { + const importedModuleManifest = await this.getManifest( + importedModule.uri + ); + if (!importedModuleManifest.ok) { + return ResultErr(importedModuleManifest.error); + } + const importedMethods = + importedModuleManifest.value.abi.moduleType?.methods || []; + + const expectedMethods = importedModules.find( + ({ uri }) => importedModule.uri === uri + ); + + const errorMessage = `ABI from Uri: ${importedModule.uri} is not compatible with Uri: ${uri}`; + for (const [i, _] of Object.keys(importedMethods).entries()) { + const importedMethod = importedMethods[i]; + + if (expectedMethods?.methods && expectedMethods?.methods.length < i) { + const expectedMethod = expectedMethods?.methods[i]; + const areEqual = compareSignature(importedMethod, expectedMethod); + + if (!areEqual) return ResultErr(new Error(errorMessage)); + } else { + return ResultErr(new Error(errorMessage)); + } + } + } + } + + if (options.recursive) { + const validateImportedModules = importedModules.map(({ uri }) => + this.validate(uri, options) + ); + const resolverUris = await Promise.all(validateImportedModules); + const invalidUris = resolverUris.filter(({ ok }) => !ok) as { + error: Error; + }[]; + if (invalidUris.length) { + const missingUris = invalidUris.map(({ error }) => { + const uriIndex = error?.message.indexOf("\n"); + return error?.message.substring(0, uriIndex); + }); + const error = new Error(JSON.stringify(missingUris)); + return ResultErr(error); + } + } + return ResultOk(true); } } diff --git a/packages/js/client/src/PolywrapClientConfig.ts b/packages/js/client/src/PolywrapClientConfig.ts index d20f424276..f4fa4f16b6 100644 --- a/packages/js/client/src/PolywrapClientConfig.ts +++ b/packages/js/client/src/PolywrapClientConfig.ts @@ -1,10 +1,23 @@ -import { Uri } from "@polywrap/core-js"; +import { + Env, + InterfaceImplementations, + IUriPackage, + IUriRedirect, + IUriWrapper, + UriResolverLike, +} from "./types"; + import { IWrapperCache } from "@polywrap/uri-resolvers-js"; import { TracerConfig } from "@polywrap/tracing-js"; -import { ClientConfig } from "@polywrap/client-config-builder-js"; +import { Uri } from "@polywrap/core-js"; -export interface PolywrapClientConfig - extends ClientConfig { +export interface PolywrapClientConfig { + readonly envs: Env[]; + readonly interfaces: InterfaceImplementations[]; + readonly redirects: IUriRedirect[]; + readonly wrappers: IUriWrapper[]; + readonly packages: IUriPackage[]; + readonly resolvers: UriResolverLike[]; readonly wrapperCache?: IWrapperCache; readonly tracerConfig?: Readonly>; } diff --git a/packages/js/client/src/PolywrapCoreClientConfig.ts b/packages/js/client/src/PolywrapCoreClientConfig.ts new file mode 100644 index 0000000000..f22a6a72d8 --- /dev/null +++ b/packages/js/client/src/PolywrapCoreClientConfig.ts @@ -0,0 +1,15 @@ +import { Env, InterfaceImplementations } from "./types"; + +import { IUriResolver, Uri } from "@polywrap/core-js"; +import { TracerConfig } from "@polywrap/tracing-js"; +import { IWrapperCache } from "@polywrap/uri-resolvers-js"; + +export interface PolywrapCoreClientConfig< + TUri extends Uri | string = Uri | string +> { + readonly interfaces?: Readonly[]>; + readonly envs?: Readonly[]>; + readonly resolver: Readonly>; + readonly wrapperCache?: IWrapperCache; + readonly tracerConfig?: Readonly>; +} diff --git a/packages/js/client/src/buildPolywrapCoreClientConfig.ts b/packages/js/client/src/buildPolywrapCoreClientConfig.ts deleted file mode 100644 index a6a1d24d36..0000000000 --- a/packages/js/client/src/buildPolywrapCoreClientConfig.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { PolywrapClientConfig } from "./PolywrapClientConfig"; - -import { Uri } from "@polywrap/core-js"; -import { ClientConfigBuilder } from "@polywrap/client-config-builder-js"; -import { PolywrapCoreClientConfig } from "@polywrap/core-client-js"; - -export const buildPolywrapCoreClientConfig = ( - config?: PolywrapClientConfig -): PolywrapCoreClientConfig => { - const builder = new ClientConfigBuilder(config?.wrapperCache); - - builder.addDefaults(); - - if (config) { - builder.add(config); - } - - const sanitizedConfig = builder.buildCoreConfig(); - - return sanitizedConfig; -}; diff --git a/packages/js/client/src/helpers/buildPolywrapCoreClientConfig.ts b/packages/js/client/src/helpers/buildPolywrapCoreClientConfig.ts new file mode 100644 index 0000000000..3886f13810 --- /dev/null +++ b/packages/js/client/src/helpers/buildPolywrapCoreClientConfig.ts @@ -0,0 +1,109 @@ +import { PolywrapClientConfig } from "../PolywrapClientConfig"; +import { PolywrapCoreClientConfig } from "../PolywrapCoreClientConfig"; +import { sanitizeUri } from "./sanitizeUri"; +import { UriResolverLike } from "../types"; + +import { CoreClientConfig, Uri } from "@polywrap/core-js"; +import { + BuilderConfig, + ClientConfigBuilder, +} from "@polywrap/client-config-builder-js"; +import { UriResolverLike as SanitizedUriResolverLike } from "@polywrap/uri-resolvers-js"; + +export const sanitizeConfig = ( + config: Partial | PolywrapCoreClientConfig +): BuilderConfig => { + const builderConfig: BuilderConfig = { + envs: {}, + interfaces: {}, + redirects: {}, + wrappers: {}, + packages: {}, + resolvers: [], + }; + + if (config.envs) { + for (const env of config.envs) { + builderConfig.envs[sanitizeUri(env.uri).uri] = env.env; + } + } + if (config.interfaces) { + for (const interfaceImplementation of config.interfaces) { + builderConfig.interfaces[ + sanitizeUri(interfaceImplementation.interface).uri + ] = new Set( + interfaceImplementation.implementations.map( + (uri) => sanitizeUri(uri).uri + ) + ); + } + } + if ("redirects" in config && config.redirects) { + for (const redirect of config.redirects) { + builderConfig.redirects[sanitizeUri(redirect.from).uri] = sanitizeUri( + redirect.to + ).uri; + } + } + if ("wrappers" in config && config.wrappers) { + for (const wrapper of config.wrappers) { + builderConfig.wrappers[sanitizeUri(wrapper.uri).uri] = wrapper.wrapper; + } + } + if ("packages" in config && config.packages) { + for (const pkg of config.packages) { + builderConfig.packages[sanitizeUri(pkg.uri).uri] = pkg.package; + } + } + if ("resolver" in config && config.resolver) { + builderConfig.resolvers.push(config.resolver); + } + if ("resolvers" in config && config.resolvers) { + builderConfig.resolvers.push(sanitizeResolverLike(config.resolvers)); + } + + return builderConfig; +}; + +export function sanitizeResolverLike( + resolverLike: UriResolverLike +): SanitizedUriResolverLike { + if (Array.isArray(resolverLike)) { + return resolverLike.map((resolver) => sanitizeResolverLike(resolver)); + } else if ("tryResolveUri" in resolverLike) { + return resolverLike; + } else if ("uri" in resolverLike) { + return { + ...resolverLike, + uri: sanitizeUri(resolverLike.uri), + }; + } else if ("from" in resolverLike) { + return { + from: sanitizeUri(resolverLike.from), + to: sanitizeUri(resolverLike.to), + }; + } else { + throw new Error( + `Invalid resolverLike: ${JSON.stringify(resolverLike, null, 2)}` + ); + } +} + +export const buildPolywrapCoreClientConfig = ( + config?: Partial | PolywrapCoreClientConfig | undefined, + noDefaults = false +): CoreClientConfig => { + const builder = new ClientConfigBuilder(config?.wrapperCache); + + if (!noDefaults) { + builder.addDefaults(); + } + + if (config) { + builder.add(sanitizeConfig(config)); + } + + const sanitizedConfig = builder.buildCoreConfig(); + + return sanitizedConfig; +}; diff --git a/packages/js/client/src/helpers/index.ts b/packages/js/client/src/helpers/index.ts new file mode 100644 index 0000000000..1b5dc6b60c --- /dev/null +++ b/packages/js/client/src/helpers/index.ts @@ -0,0 +1,2 @@ +export * from "./buildPolywrapCoreClientConfig"; +export * from "./sanitizeUri"; diff --git a/packages/js/client/src/helpers/sanitizeUri.ts b/packages/js/client/src/helpers/sanitizeUri.ts new file mode 100644 index 0000000000..d630a5135a --- /dev/null +++ b/packages/js/client/src/helpers/sanitizeUri.ts @@ -0,0 +1,7 @@ +import { Uri } from "@polywrap/core-js"; + +export function sanitizeUri( + uri: TUri +): Uri { + return typeof uri === "string" ? new Uri(uri) : uri; +} diff --git a/packages/js/client/src/types/Env.ts b/packages/js/client/src/types/Env.ts new file mode 100644 index 0000000000..838b8f1fff --- /dev/null +++ b/packages/js/client/src/types/Env.ts @@ -0,0 +1,9 @@ +import { Uri } from "@polywrap/core-js"; + +export interface Env { + /** Uri of wrapper */ + uri: TUri; + + /** Env variables used by the module */ + env: Record; +} diff --git a/packages/js/client/src/types/IUriPackage.ts b/packages/js/client/src/types/IUriPackage.ts new file mode 100644 index 0000000000..3a5449d507 --- /dev/null +++ b/packages/js/client/src/types/IUriPackage.ts @@ -0,0 +1,6 @@ +import { Uri, IWrapPackage } from "@polywrap/core-js"; + +export interface IUriPackage { + uri: TUri; + package: IWrapPackage; +} diff --git a/packages/js/client/src/types/IUriRedirect.ts b/packages/js/client/src/types/IUriRedirect.ts new file mode 100644 index 0000000000..58f9751182 --- /dev/null +++ b/packages/js/client/src/types/IUriRedirect.ts @@ -0,0 +1,6 @@ +import { Uri } from "@polywrap/core-js"; + +export interface IUriRedirect { + from: TUri; + to: TUri; +} diff --git a/packages/js/client/src/types/IUriWrapper.ts b/packages/js/client/src/types/IUriWrapper.ts new file mode 100644 index 0000000000..cba35969a0 --- /dev/null +++ b/packages/js/client/src/types/IUriWrapper.ts @@ -0,0 +1,6 @@ +import { Uri, Wrapper } from "@polywrap/core-js"; + +export interface IUriWrapper { + uri: TUri; + wrapper: Wrapper; +} diff --git a/packages/js/client/src/types/InterfaceImplementations.ts b/packages/js/client/src/types/InterfaceImplementations.ts new file mode 100644 index 0000000000..701c94c599 --- /dev/null +++ b/packages/js/client/src/types/InterfaceImplementations.ts @@ -0,0 +1,6 @@ +import { Uri } from "@polywrap/core-js"; + +export interface InterfaceImplementations { + interface: TUri; + implementations: TUri[]; +} diff --git a/packages/js/client/src/types/InvokerOptions.ts b/packages/js/client/src/types/InvokerOptions.ts new file mode 100644 index 0000000000..ca34900bca --- /dev/null +++ b/packages/js/client/src/types/InvokerOptions.ts @@ -0,0 +1,23 @@ +import { IUriResolutionContext, Uri } from "@polywrap/core-js"; + +export interface InvokerOptions { + /** The Wrapper's URI */ + uri: TUri; + + /** Method to be executed. */ + method: string; + + /** + * Arguments for the method, structured as a map, + * removing the chance of incorrectly ordering arguments. + */ + args?: Record | Uint8Array; + + /** + * Env variables for the wrapper invocation. + */ + env?: Record; + + resolutionContext?: IUriResolutionContext; + encodeResult?: boolean; +} diff --git a/packages/js/client/src/types/TryResolveUriOptions.ts b/packages/js/client/src/types/TryResolveUriOptions.ts new file mode 100644 index 0000000000..9f3aeac0f5 --- /dev/null +++ b/packages/js/client/src/types/TryResolveUriOptions.ts @@ -0,0 +1,7 @@ +import { IUriResolutionContext, Uri } from "@polywrap/core-js"; + +export interface TryResolveUriOptions { + /** The Wrapper's URI */ + uri: TUri; + resolutionContext?: IUriResolutionContext; +} diff --git a/packages/js/client/src/types/UriResolverLike.ts b/packages/js/client/src/types/UriResolverLike.ts new file mode 100644 index 0000000000..0c5888ef0c --- /dev/null +++ b/packages/js/client/src/types/UriResolverLike.ts @@ -0,0 +1,12 @@ +import { IUriPackage } from "./IUriPackage"; +import { IUriRedirect } from "./IUriRedirect"; +import { IUriWrapper } from "./IUriWrapper"; + +import { IUriResolver, Uri } from "@polywrap/core-js"; + +export type UriResolverLike = + | IUriResolver + | IUriRedirect + | IUriPackage + | IUriWrapper + | UriResolverLike[]; diff --git a/packages/js/client/src/types/index.ts b/packages/js/client/src/types/index.ts new file mode 100644 index 0000000000..447c57dbfb --- /dev/null +++ b/packages/js/client/src/types/index.ts @@ -0,0 +1,8 @@ +export * from "./InvokerOptions"; +export * from "./TryResolveUriOptions"; +export * from "./InterfaceImplementations"; +export * from "./Env"; +export * from "./IUriWrapper"; +export * from "./IUriRedirect"; +export * from "./IUriPackage"; +export * from "./UriResolverLike"; diff --git a/packages/js/core/src/types/Env.ts b/packages/js/core/src/types/Env.ts index 6078c92688..0000866955 100644 --- a/packages/js/core/src/types/Env.ts +++ b/packages/js/core/src/types/Env.ts @@ -7,19 +7,3 @@ export interface Env { /** Env variables used by the module */ env: Record; } - -// export const sanitizeEnvs = Tracer.traceFunc( -// "core: sanitizeEnvs", -// (environments: Env[]): Env[] => { -// const output: Env[] = []; - -// for (const env of environments) { -// output.push({ -// ...env, -// uri: Uri.from(env.uri), -// }); -// } - -// return output; -// } -// ); diff --git a/packages/js/core/src/types/InterfaceImplementations.ts b/packages/js/core/src/types/InterfaceImplementations.ts index 2092f71a47..58b9dfcddf 100644 --- a/packages/js/core/src/types/InterfaceImplementations.ts +++ b/packages/js/core/src/types/InterfaceImplementations.ts @@ -4,22 +4,3 @@ export interface InterfaceImplementations { interface: Uri; implementations: Uri[]; } - -// export const sanitizeInterfaceImplementations = Tracer.traceFunc( -// "core: sanitizeInterfaceImplementations", -// (input: InterfaceImplementations[]): InterfaceImplementations[] => { -// const output: InterfaceImplementations[] = []; -// for (const definition of input) { -// const interfaceUri = Uri.from(definition.interface); - -// const implementations = definition.implementations.map(Uri.from); - -// output.push({ -// interface: interfaceUri, -// implementations: implementations, -// }); -// } - -// return output; -// } -// ); From 5837b7fce6c6faf7471f7c1b61654cf868a8c6b5 Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Sat, 31 Dec 2022 01:45:10 +0400 Subject: [PATCH 05/22] fix: build process --- packages/cli/src/commands/build.ts | 4 +- packages/cli/src/commands/codegen.ts | 4 +- packages/cli/src/commands/docgen.ts | 4 +- packages/cli/src/commands/test.ts | 3 +- packages/cli/src/lib/helpers/index.ts | 1 - .../src/lib/helpers/validate-client-config.ts | 131 ------------------ .../src/lib/option-parsers/wrapper-envs.ts | 5 +- .../cli/src/lib/test-env/client-config.ts | 76 +++++----- packages/cli/src/lib/workflow/JobRunner.ts | 24 ++-- packages/cli/src/lib/workflow/types.ts | 9 +- .../js/client/src/PolywrapClientConfig.ts | 2 +- .../helpers/buildPolywrapCoreClientConfig.ts | 36 ++--- packages/js/client/src/helpers/sanitizeUri.ts | 2 +- packages/js/client/src/index.ts | 2 + packages/js/plugins/ws/src/index.ts | 3 +- .../app/templates/types-ts.mustache | 5 +- .../plugin/templates/types-ts.mustache | 23 ++- .../cases/bind/sanity/output/app-ts/types.ts | 9 +- .../bind/sanity/output/plugin-ts/types.ts | 21 ++- 19 files changed, 125 insertions(+), 239 deletions(-) delete mode 100644 packages/cli/src/lib/helpers/validate-client-config.ts diff --git a/packages/cli/src/commands/build.ts b/packages/cli/src/commands/build.ts index 4fb7c1c9d3..0372ee79be 100644 --- a/packages/cli/src/commands/build.ts +++ b/packages/cli/src/commands/build.ts @@ -26,7 +26,7 @@ import { import path from "path"; import readline from "readline"; -import { Env, PolywrapClient } from "@polywrap/client-js"; +import { PolywrapClient } from "@polywrap/client-js"; import { PolywrapManifest } from "@polywrap/polywrap-manifest-types-js"; import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; @@ -40,7 +40,7 @@ type BuildCommandOptions = { manifestFile: string; outputDir: string; configBuilder: IClientConfigBuilder; - wrapperEnvs: Env[]; + wrapperEnvs: Record>; codegen: boolean; // defaults to true watch?: boolean; strategy: SupportedStrategies; diff --git a/packages/cli/src/commands/codegen.ts b/packages/cli/src/commands/codegen.ts index 22f1b24580..4829ef4bb1 100644 --- a/packages/cli/src/commands/codegen.ts +++ b/packages/cli/src/commands/codegen.ts @@ -19,7 +19,7 @@ import { } from "../lib"; import { ScriptCodegenerator } from "../lib/codegen/ScriptCodeGenerator"; -import { Env, PolywrapClient } from "@polywrap/client-js"; +import { PolywrapClient } from "@polywrap/client-js"; import path from "path"; import fs from "fs"; import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; @@ -36,7 +36,7 @@ type CodegenCommandOptions = { publishDir: string; script?: string; configBuilder: IClientConfigBuilder; - wrapperEnvs: Env[]; + wrapperEnvs: Record>; verbose?: boolean; quiet?: boolean; logFile?: string; diff --git a/packages/cli/src/commands/docgen.ts b/packages/cli/src/commands/docgen.ts index c18f90230d..eb09fbdb10 100644 --- a/packages/cli/src/commands/docgen.ts +++ b/packages/cli/src/commands/docgen.ts @@ -18,7 +18,7 @@ import { scriptPath as jsdocScriptPath } from "../lib/docgen/jsdoc"; import { scriptPath as schemaScriptPath } from "../lib/docgen/schema"; import { ScriptCodegenerator } from "../lib/codegen/ScriptCodeGenerator"; -import { Env, PolywrapClient } from "@polywrap/client-js"; +import { PolywrapClient } from "@polywrap/client-js"; import chalk from "chalk"; import { Argument } from "commander"; import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; @@ -38,7 +38,7 @@ type DocgenCommandOptions = { manifestFile: string; docgenDir: string; configBuilder: IClientConfigBuilder; - wrapperEnvs: Env[]; + wrapperEnvs: Record>; imports: boolean; verbose?: boolean; quiet?: boolean; diff --git a/packages/cli/src/commands/test.ts b/packages/cli/src/commands/test.ts index b66a402d00..47e1e74610 100644 --- a/packages/cli/src/commands/test.ts +++ b/packages/cli/src/commands/test.ts @@ -24,11 +24,10 @@ import path from "path"; import yaml from "yaml"; import fs from "fs"; import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; -import { Env } from "@polywrap/core-js"; type WorkflowCommandOptions = { configBuilder: IClientConfigBuilder; - wrapperEnvs: Env[]; + wrapperEnvs: Record>; manifest: string; jobs?: string[]; validationScript?: string; diff --git a/packages/cli/src/lib/helpers/index.ts b/packages/cli/src/lib/helpers/index.ts index 71630a2d81..8459e01f85 100644 --- a/packages/cli/src/lib/helpers/index.ts +++ b/packages/cli/src/lib/helpers/index.ts @@ -1,4 +1,3 @@ export * from "./uuid"; -export * from "./validate-client-config"; export * from "./workflow-validator"; export * from "./wrap"; diff --git a/packages/cli/src/lib/helpers/validate-client-config.ts b/packages/cli/src/lib/helpers/validate-client-config.ts deleted file mode 100644 index c4f82f244b..0000000000 --- a/packages/cli/src/lib/helpers/validate-client-config.ts +++ /dev/null @@ -1,131 +0,0 @@ -import { intlMsg } from "../intl"; - -import { - Env, - InterfaceImplementations, - IUriRedirect, - Uri, -} from "@polywrap/client-js"; -import { ClientConfig } from "@polywrap/client-config-builder-js"; - -export function validateRedirects( - redirects: readonly IUriRedirect[] -): void { - if (!Array.isArray(redirects)) { - throw new Error(intlMsg.commands_test_error_redirectsExportNotArray()); - } - - // Ensure each redirect in the array is valid - for (let i = 0; i < redirects.length; ++i) { - const redirect = redirects[i]; - - if (typeof redirect !== "object" || !redirect.from || !redirect.to) { - throw new Error( - intlMsg.commands_test_error_redirectsItemNotValid({ - index: i.toString(), - }) - ); - } else if (typeof redirect.from !== "string") { - throw new Error( - intlMsg.commands_test_error_redirectsItemFromNotString({ - index: i.toString(), - }) - ); - } else if (typeof redirect.to !== "string") { - throw new Error( - intlMsg.commands_test_error_redirectsItemToNotStringOrObject({ - index: i.toString(), - }) - ); - } - } -} - -export function validateInterfaces( - interfaces: readonly InterfaceImplementations[] -): void { - if (!Array.isArray(interfaces)) { - throw new Error(intlMsg.commands_test_error_interfacesExportNotArray()); - } - // Ensure each interface in the array is valid - for (let i = 0; i < interfaces.length; ++i) { - const interfaceImplementations = interfaces[i]; - if (typeof interfaceImplementations !== "object") { - throw new Error( - intlMsg.commands_test_error_interfacesItemNotObject({ - index: i.toString(), - }) - ); - } else if (typeof interfaceImplementations.interface !== "string") { - throw new Error( - intlMsg.commands_test_error_interfacesItemInterfaceNotString({ - index: i.toString(), - }) - ); - } else if (!Array.isArray(interfaceImplementations.implementations)) { - throw new Error( - intlMsg.commands_test_error_interfacesItemImplementationsNotArray({ - index: i.toString(), - }) - ); - } else if (interfaceImplementations.implementations.length === 0) { - throw new Error( - intlMsg.commands_test_error_interfacesItemImplementationsEmpty({ - index: i.toString(), - }) - ); - } - for (let j = 0; j < interfaceImplementations.implementations.length; ++j) { - const implementation = interfaceImplementations.implementations[j]; - if (typeof implementation !== "string") { - throw new Error( - intlMsg.commands_test_error_interfacesItemImplementationsItemNotString( - { - index: i.toString(), - implementationIndex: j.toString(), - } - ) - ); - } - } - } -} - -export function validateEnvs( - envs: readonly Env[] -): void { - if (!Array.isArray(envs)) { - throw new Error(intlMsg.commands_test_error_envsExportNotArray()); - } - for (let i = 0; i < envs.length; ++i) { - const env = envs[i]; - if (typeof env !== "object") { - throw new Error( - intlMsg.commands_test_error_envsItemNotObject({ - index: i.toString(), - }) - ); - } else if (typeof env.uri !== "string") { - throw new Error( - intlMsg.commands_test_error_envsItemUriNotString({ - index: i.toString(), - }) - ); - } else if (!env.env && typeof env.env !== "object") { - throw new Error( - intlMsg.commands_test_error_envsItemModuleNotObject({ - index: i.toString(), - }) - ); - } - } -} - -export function validateClientConfig(config: Partial): void { - if (!config || typeof config !== "object") { - throw new Error(intlMsg.commands_test_error_clientConfigNotObject()); - } - if (config.envs) validateEnvs(config.envs); - if (config.interfaces) validateInterfaces(config.interfaces); - if (config.redirects) validateRedirects(config.redirects); -} diff --git a/packages/cli/src/lib/option-parsers/wrapper-envs.ts b/packages/cli/src/lib/option-parsers/wrapper-envs.ts index 283ac10dde..60e118101b 100644 --- a/packages/cli/src/lib/option-parsers/wrapper-envs.ts +++ b/packages/cli/src/lib/option-parsers/wrapper-envs.ts @@ -1,7 +1,6 @@ import { loadEnvironmentVariables } from "../system"; import { ClientConfigBuilder } from "@polywrap/client-config-builder-js"; -import { Env, Uri } from "@polywrap/core-js"; import fs from "fs"; import YAML from "yaml"; @@ -9,7 +8,7 @@ type WrapperEnvs = Record>; export async function parseWrapperEnvsOption( wrapperEnvsPath: string | undefined -): Promise[]> | undefined> { +): Promise>> | undefined> { if (!wrapperEnvsPath) { return undefined; } @@ -41,5 +40,5 @@ export async function parseWrapperEnvsOption( builder.addEnv(env, wrapperEnvs[env]); } - return builder.buildCoreConfig().envs; + return builder.config.envs; } diff --git a/packages/cli/src/lib/test-env/client-config.ts b/packages/cli/src/lib/test-env/client-config.ts index 1a830bec13..6612a57c1a 100644 --- a/packages/cli/src/lib/test-env/client-config.ts +++ b/packages/cli/src/lib/test-env/client-config.ts @@ -1,7 +1,9 @@ import { getTestEnvProviders } from "./providers"; -import { PolywrapClientConfig } from "@polywrap/client-js"; -import { defaultIpfsProviders } from "@polywrap/client-config-builder-js"; +import { + BuilderConfig, + defaultIpfsProviders, +} from "@polywrap/client-config-builder-js"; import { ensResolverPlugin } from "@polywrap/ens-resolver-plugin-js"; import { ethereumPlugin, @@ -11,7 +13,7 @@ import { import { ipfsPlugin } from "@polywrap/ipfs-plugin-js"; import { ensAddresses } from "@polywrap/test-env-js"; -export function getTestEnvClientConfig(): Partial { +export function getTestEnvClientConfig(): Partial { // TODO: move this into its own package, since it's being used everywhere? // maybe have it exported from test-env. const providers = getTestEnvProviders(); @@ -25,48 +27,36 @@ export function getTestEnvClientConfig(): Partial { const ensAddress = ensAddresses.ensAddress; return { - envs: [ - { - uri: "wrap://ens/ipfs.polywrap.eth", - env: { - provider: ipfsProvider, - fallbackProviders: defaultIpfsProviders, - }, - }, - ], - packages: [ - { - uri: "wrap://ens/ethereum.polywrap.eth", - package: ethereumPlugin({ - connections: new Connections({ - networks: { - testnet: new Connection({ - provider: ethProvider, - }), - mainnet: new Connection({ - provider: - "https://mainnet.infura.io/v3/b00b2c2cc09c487685e9fb061256d6a6", - }), - goerli: new Connection({ - provider: - "https://goerli.infura.io/v3/b00b2c2cc09c487685e9fb061256d6a6", - }), - }, - }), - }), + envs: { + "wrap://ens/ipfs.polywrap.eth": { + provider: ipfsProvider, + fallbackProviders: defaultIpfsProviders, }, - { - uri: "wrap://ens/ipfs.polywrap.eth", - package: ipfsPlugin({}), - }, - { - uri: "wrap://ens/ens-resolver.polywrap.eth", - package: ensResolverPlugin({ - addresses: { - testnet: ensAddress, + }, + packages: { + "wrap://ens/ethereum.polywrap.eth": ethereumPlugin({ + connections: new Connections({ + networks: { + testnet: new Connection({ + provider: ethProvider, + }), + mainnet: new Connection({ + provider: + "https://mainnet.infura.io/v3/b00b2c2cc09c487685e9fb061256d6a6", + }), + goerli: new Connection({ + provider: + "https://goerli.infura.io/v3/b00b2c2cc09c487685e9fb061256d6a6", + }), }, }), - }, - ], + }), + "wrap://ens/ipfs.polywrap.eth": ipfsPlugin({}), + "wrap://ens/ens-resolver.polywrap.eth": ensResolverPlugin({ + addresses: { + testnet: ensAddress, + }, + }), + }, }; } diff --git a/packages/cli/src/lib/workflow/JobRunner.ts b/packages/cli/src/lib/workflow/JobRunner.ts index 9be9cb552e..079973833c 100644 --- a/packages/cli/src/lib/workflow/JobRunner.ts +++ b/packages/cli/src/lib/workflow/JobRunner.ts @@ -1,12 +1,16 @@ import { JobResult, Status, Step } from "./types"; -import { PolywrapClient } from "@polywrap/client-js"; -import { CoreClient, CoreClientConfig, MaybeAsync } from "@polywrap/core-js"; -import { WorkflowJobs } from "@polywrap/polywrap-manifest-types-js"; import { - ClientConfig, - IClientConfigBuilder, -} from "@polywrap/client-config-builder-js"; + PolywrapClient, + buildPolywrapCoreClientConfig, +} from "@polywrap/client-js"; +import { + CoreClient, + MaybeAsync, + Uri, +} from "@polywrap/core-js"; +import { WorkflowJobs } from "@polywrap/polywrap-manifest-types-js"; +import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; export class JobRunner { private jobOutput: Map; @@ -184,17 +188,13 @@ export class JobRunner { let finalClient = this.client; if (step.config) { - const finalConfig = (step.config as Partial).resolver - ? (step.config as CoreClientConfig) - : this.configBuilder - .add(step.config as Partial) - .buildCoreConfig(); + const finalConfig = buildPolywrapCoreClientConfig(step.config); finalClient = new PolywrapClient(finalConfig, { noDefaults: true }); } const invokeResult = await finalClient.invoke({ - uri: step.uri, + uri: Uri.from(step.uri), method: step.method, args: args, }); diff --git a/packages/cli/src/lib/workflow/types.ts b/packages/cli/src/lib/workflow/types.ts index f5e8629801..066e8a84c0 100644 --- a/packages/cli/src/lib/workflow/types.ts +++ b/packages/cli/src/lib/workflow/types.ts @@ -1,5 +1,8 @@ -import { ClientConfig } from "@polywrap/client-config-builder-js"; -import { CoreClientConfig, Uri } from "@polywrap/core-js"; +import { + PolywrapClientConfig, + PolywrapCoreClientConfig, +} from "@polywrap/client-js"; +import { Uri } from "@polywrap/core-js"; export interface Step { uri: string | Uri; @@ -7,7 +10,7 @@ export interface Step { args?: { [k: string]: unknown; }; - config?: ClientConfig | CoreClientConfig; + config?: Partial | PolywrapCoreClientConfig; } export enum Status { diff --git a/packages/js/client/src/PolywrapClientConfig.ts b/packages/js/client/src/PolywrapClientConfig.ts index f4fa4f16b6..24abff625a 100644 --- a/packages/js/client/src/PolywrapClientConfig.ts +++ b/packages/js/client/src/PolywrapClientConfig.ts @@ -17,7 +17,7 @@ export interface PolywrapClientConfig { readonly redirects: IUriRedirect[]; readonly wrappers: IUriWrapper[]; readonly packages: IUriPackage[]; - readonly resolvers: UriResolverLike[]; + readonly resolvers: UriResolverLike; readonly wrapperCache?: IWrapperCache; readonly tracerConfig?: Readonly>; } diff --git a/packages/js/client/src/helpers/buildPolywrapCoreClientConfig.ts b/packages/js/client/src/helpers/buildPolywrapCoreClientConfig.ts index 3886f13810..b532e63a2e 100644 --- a/packages/js/client/src/helpers/buildPolywrapCoreClientConfig.ts +++ b/packages/js/client/src/helpers/buildPolywrapCoreClientConfig.ts @@ -1,3 +1,6 @@ +// TODO: can move this to client-config-builder-js +// TODO: buildPolywrapCoreClientConfig can take clientConfigBuilder as an argument + import { PolywrapClientConfig } from "../PolywrapClientConfig"; import { PolywrapCoreClientConfig } from "../PolywrapCoreClientConfig"; import { sanitizeUri } from "./sanitizeUri"; @@ -10,9 +13,9 @@ import { } from "@polywrap/client-config-builder-js"; import { UriResolverLike as SanitizedUriResolverLike } from "@polywrap/uri-resolvers-js"; -export const sanitizeConfig = ( - config: Partial | PolywrapCoreClientConfig -): BuilderConfig => { +export function sanitizeConfig( + config: Partial> | PolywrapCoreClientConfig +): BuilderConfig { const builderConfig: BuilderConfig = { envs: {}, interfaces: {}, @@ -24,46 +27,47 @@ export const sanitizeConfig = ( if (config.envs) { for (const env of config.envs) { - builderConfig.envs[sanitizeUri(env.uri).uri] = env.env; + builderConfig.envs[sanitizeUri(env.uri).uri] = env.env; } } if (config.interfaces) { for (const interfaceImplementation of config.interfaces) { builderConfig.interfaces[ - sanitizeUri(interfaceImplementation.interface).uri + sanitizeUri(interfaceImplementation.interface).uri ] = new Set( interfaceImplementation.implementations.map( - (uri) => sanitizeUri(uri).uri + (uri: TUri) => sanitizeUri(uri).uri ) ); } } if ("redirects" in config && config.redirects) { for (const redirect of config.redirects) { - builderConfig.redirects[sanitizeUri(redirect.from).uri] = sanitizeUri( - redirect.to - ).uri; + builderConfig.redirects[ + sanitizeUri(redirect.from).uri + ] = sanitizeUri(redirect.to).uri; } } if ("wrappers" in config && config.wrappers) { for (const wrapper of config.wrappers) { - builderConfig.wrappers[sanitizeUri(wrapper.uri).uri] = wrapper.wrapper; + builderConfig.wrappers[sanitizeUri(wrapper.uri).uri] = + wrapper.wrapper; } } if ("packages" in config && config.packages) { for (const pkg of config.packages) { - builderConfig.packages[sanitizeUri(pkg.uri).uri] = pkg.package; + builderConfig.packages[sanitizeUri(pkg.uri).uri] = pkg.package; } } if ("resolver" in config && config.resolver) { builderConfig.resolvers.push(config.resolver); } if ("resolvers" in config && config.resolvers) { - builderConfig.resolvers.push(sanitizeResolverLike(config.resolvers)); + builderConfig.resolvers.push(sanitizeResolverLike(config.resolvers)); } return builderConfig; -}; +} export function sanitizeResolverLike( resolverLike: UriResolverLike @@ -75,12 +79,12 @@ export function sanitizeResolverLike( } else if ("uri" in resolverLike) { return { ...resolverLike, - uri: sanitizeUri(resolverLike.uri), + uri: sanitizeUri(resolverLike.uri), }; } else if ("from" in resolverLike) { return { - from: sanitizeUri(resolverLike.from), - to: sanitizeUri(resolverLike.to), + from: sanitizeUri(resolverLike.from), + to: sanitizeUri(resolverLike.to), }; } else { throw new Error( diff --git a/packages/js/client/src/helpers/sanitizeUri.ts b/packages/js/client/src/helpers/sanitizeUri.ts index d630a5135a..b6551102c7 100644 --- a/packages/js/client/src/helpers/sanitizeUri.ts +++ b/packages/js/client/src/helpers/sanitizeUri.ts @@ -3,5 +3,5 @@ import { Uri } from "@polywrap/core-js"; export function sanitizeUri( uri: TUri ): Uri { - return typeof uri === "string" ? new Uri(uri) : uri; + return typeof uri === "string" ? new Uri(uri) : (uri as Uri); } diff --git a/packages/js/client/src/index.ts b/packages/js/client/src/index.ts index 9329df9fcc..85c6d00e03 100644 --- a/packages/js/client/src/index.ts +++ b/packages/js/client/src/index.ts @@ -1,5 +1,7 @@ export * from "./PolywrapClient"; export * from "./PolywrapClientConfig"; +export * from "./PolywrapCoreClientConfig"; +export * from "./helpers"; export * from "@polywrap/core-js"; export * from "@polywrap/core-client-js"; export * from "@polywrap/uri-resolvers-js"; diff --git a/packages/js/plugins/ws/src/index.ts b/packages/js/plugins/ws/src/index.ts index 9eac814330..577e56a6a5 100644 --- a/packages/js/plugins/ws/src/index.ts +++ b/packages/js/plugins/ws/src/index.ts @@ -14,6 +14,7 @@ import { manifest, } from "./wrap"; +import { Uri } from "@polywrap/core-js"; import { PluginFactory, PluginPackage } from "@polywrap/plugin-js"; type NoConfig = Record; @@ -58,7 +59,7 @@ export class WsPlugin extends Module { const callbackId = this._callbackId(args.callback); this._callbacks[callbackId] = async (msg) => { await _client.invoke<{ callback: boolean }>({ - uri: args.callback.uri, + uri: Uri.from(args.callback.uri), method: args.callback.method, args: { data: msg.data }, }); diff --git a/packages/schema/bind/src/bindings/typescript/app/templates/types-ts.mustache b/packages/schema/bind/src/bindings/typescript/app/templates/types-ts.mustache index 853464ef83..bd3f9732ca 100644 --- a/packages/schema/bind/src/bindings/typescript/app/templates/types-ts.mustache +++ b/packages/schema/bind/src/bindings/typescript/app/templates/types-ts.mustache @@ -4,7 +4,8 @@ import * as Types from "./"; // @ts-ignore import { CoreClient, - InvokeResult + InvokeResult, + Uri, } from "@polywrap/core-js"; export type UInt = number; @@ -104,7 +105,7 @@ export const {{type}} = { uri: string = "{{parent.uri}}" ): Promise> => { return client.invoke<{{#return}}{{#toTypescript}}{{toGraphQLType}}{{/toTypescript}}{{/return}}>({ - uri, + uri: Uri.from(uri), method: "{{name}}", args: (args as unknown) as Record, }); diff --git a/packages/schema/bind/src/bindings/typescript/plugin/templates/types-ts.mustache b/packages/schema/bind/src/bindings/typescript/plugin/templates/types-ts.mustache index 766c7850fd..35673f6a5d 100644 --- a/packages/schema/bind/src/bindings/typescript/plugin/templates/types-ts.mustache +++ b/packages/schema/bind/src/bindings/typescript/plugin/templates/types-ts.mustache @@ -8,7 +8,8 @@ import * as Types from "./"; import { CoreClient,{{#interfaceTypes.length}} Result,{{/interfaceTypes.length}} - InvokeResult + InvokeResult, + Uri, } from "@polywrap/core-js"; export type UInt = number; @@ -115,7 +116,7 @@ export const {{type}} = { client: CoreClient ): Promise> => { return client.invoke<{{#return}}{{#toTypescript}}{{toGraphQLType}}{{/toTypescript}}{{/return}}>({ - uri: "{{parent.uri}}", + uri: Uri.from("{{parent.uri}}"), method: "{{name}}", args: (args as unknown) as Record, }); @@ -130,8 +131,11 @@ export const {{type}} = { {{#isInterface}} export class {{#detectKeyword}}{{type}}{{/detectKeyword}} { public static interfaceUri: string = "{{uri}}"; + public uri: Uri; - constructor(public uri: string) {} + constructor(uri: string) { + this.uri = Uri.from(uri); + } {{#methods}} public async {{name}}( @@ -157,15 +161,20 @@ export class {{#detectKeyword}}{{type}}{{/detectKeyword}} { {{#interfaceTypes}} export class {{#detectKeyword}}{{namespace}}{{/detectKeyword}} { - static uri: string = "{{uri}}"; + static uri: Uri = Uri.from("{{uri}}"); {{#capabilities}} {{#getImplementations}} {{#enabled}} - public static getImplementations( + public static async getImplementations( client: CoreClient - ): Result { - return client.getImplementations(this.uri, {}); + ): Promise> { + const impls = await client.getImplementations(this.uri, {}); + if (!impls.ok) { + return { ok: false, error: impls.error}; + } + + return { ok: true, value: impls.value.map((impl) => (impl.uri))}; } {{/enabled}} {{/getImplementations}} diff --git a/packages/test-cases/cases/bind/sanity/output/app-ts/types.ts b/packages/test-cases/cases/bind/sanity/output/app-ts/types.ts index 324afbbf2c..79b06c4d96 100644 --- a/packages/test-cases/cases/bind/sanity/output/app-ts/types.ts +++ b/packages/test-cases/cases/bind/sanity/output/app-ts/types.ts @@ -4,7 +4,8 @@ import * as Types from "./"; // @ts-ignore import { CoreClient, - InvokeResult + InvokeResult, + Uri, } from "@polywrap/core-js"; export type UInt = number; @@ -189,7 +190,7 @@ export const TestImport_Module = { uri: string = "testimport.uri.eth" ): Promise> => { return client.invoke({ - uri, + uri: Uri.from(uri), method: "importedMethod", args: (args as unknown) as Record, }); @@ -201,7 +202,7 @@ export const TestImport_Module = { uri: string = "testimport.uri.eth" ): Promise> => { return client.invoke({ - uri, + uri: Uri.from(uri), method: "anotherMethod", args: (args as unknown) as Record, }); @@ -213,7 +214,7 @@ export const TestImport_Module = { uri: string = "testimport.uri.eth" ): Promise>> => { return client.invoke>({ - uri, + uri: Uri.from(uri), method: "returnsArrayOfEnums", args: (args as unknown) as Record, }); diff --git a/packages/test-cases/cases/bind/sanity/output/plugin-ts/types.ts b/packages/test-cases/cases/bind/sanity/output/plugin-ts/types.ts index 768504cf4b..2c19aa819b 100644 --- a/packages/test-cases/cases/bind/sanity/output/plugin-ts/types.ts +++ b/packages/test-cases/cases/bind/sanity/output/plugin-ts/types.ts @@ -8,7 +8,8 @@ import * as Types from "./"; import { CoreClient, Result, - InvokeResult + InvokeResult, + Uri, } from "@polywrap/core-js"; export type UInt = number; @@ -198,8 +199,11 @@ export interface TestImport_Module_Args_returnsArrayOfEnums { /* URI: "testimport.uri.eth" */ export class TestImport_Module { public static interfaceUri: string = "testimport.uri.eth"; + public uri: Uri; - constructor(public uri: string) {} + constructor(uri: string) { + this.uri = Uri.from(uri); + } public async importedMethod( args: TestImport_Module_Args_importedMethod, @@ -238,11 +242,16 @@ export class TestImport_Module { /// Imported Modules END /// export class TestImport { - static uri: string = "testimport.uri.eth"; + static uri: Uri = Uri.from("testimport.uri.eth"); - public static getImplementations( + public static async getImplementations( client: CoreClient - ): Result { - return client.getImplementations(this.uri, {}); + ): Promise> { + const impls = await client.getImplementations(this.uri, {}); + if (!impls.ok) { + return { ok: false, error: impls.error}; + } + + return { ok: true, value: impls.value.map((impl) => (impl.uri))}; } } From 55f82e7abb1807add2f1566f8268880621c06275 Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Mon, 2 Jan 2023 19:00:32 +0400 Subject: [PATCH 06/22] wip: fix tests --- packages/cli/src/lib/workflow/JobRunner.ts | 6 +- .../js/client-config-builder/package.json | 1 + .../src/BaseClientConfigBuilder.ts | 13 +- .../src/ClientConfigBuilder.ts | 4 +- .../src/__tests__/builtDefaultConfig.ts | 135 ++++++++++++++++ .../__tests__/client-config-builder.spec.ts | 151 ++++++++++-------- .../src/bundles/getDefaultConfig.ts | 21 ++- .../helpers/buildPolywrapCoreClientConfig.ts | 141 ++++++++++++++++ .../src/helpers/index.ts | 0 .../src/helpers/sanitizeUri.ts | 0 .../js/client-config-builder/src/index.ts | 5 +- .../src/{ => types}/IClientConfigBuilder.ts | 4 +- .../src/{ => types/configs}/BuilderConfig.ts | 2 +- .../src/{ => types/configs}/ClientConfig.ts | 2 +- .../types/configs}/PolywrapClientConfig.ts | 0 .../configs}/PolywrapCoreClientConfig.ts | 0 .../src/types/configs/index.ts | 4 + .../src/types/configs}/types/Env.ts | 0 .../src/types/configs}/types/IUriPackage.ts | 0 .../src/types/configs}/types/IUriRedirect.ts | 0 .../src/types/configs}/types/IUriWrapper.ts | 0 .../types/InterfaceImplementations.ts | 0 .../types/configs}/types/UriResolverLike.ts | 0 .../src/types/configs/types/index.ts | 6 + .../client-config-builder/src/types/index.ts | 2 + packages/js/client/src/PolywrapClient.ts | 46 ++++-- .../__tests__/core/interface-impls.spec.ts | 68 ++++---- .../src/__tests__/core/plugin-wrapper.spec.ts | 5 +- .../client/src/__tests__/core/sanity.spec.ts | 14 +- .../uri-resolution/uri-resolution.spec.ts | 25 +-- .../src/__tests__/core/wasm-wrapper.spec.ts | 18 +-- .../js/client/src/__tests__/e2e/env.spec.ts | 5 +- .../js/client/src/__tests__/e2e/test-cases.ts | 36 ++--- .../helpers/getClientWithEnsAndIpfs.ts | 18 +-- .../helpers/buildPolywrapCoreClientConfig.ts | 113 ------------- packages/js/client/src/index.ts | 3 - packages/js/client/src/types/index.ts | 6 - packages/js/client/tsconfig.json | 2 +- .../InterfaceImplementations.spec.ts | 26 --- .../src/__tests__/get-implementations.spec.ts | 10 +- 40 files changed, 543 insertions(+), 349 deletions(-) create mode 100644 packages/js/client-config-builder/src/__tests__/builtDefaultConfig.ts create mode 100644 packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts rename packages/js/{client => client-config-builder}/src/helpers/index.ts (100%) rename packages/js/{client => client-config-builder}/src/helpers/sanitizeUri.ts (100%) rename packages/js/client-config-builder/src/{ => types}/IClientConfigBuilder.ts (93%) rename packages/js/client-config-builder/src/{ => types/configs}/BuilderConfig.ts (87%) rename packages/js/client-config-builder/src/{ => types/configs}/ClientConfig.ts (90%) rename packages/js/{client/src => client-config-builder/src/types/configs}/PolywrapClientConfig.ts (100%) rename packages/js/{client/src => client-config-builder/src/types/configs}/PolywrapCoreClientConfig.ts (100%) create mode 100644 packages/js/client-config-builder/src/types/configs/index.ts rename packages/js/{client/src => client-config-builder/src/types/configs}/types/Env.ts (100%) rename packages/js/{client/src => client-config-builder/src/types/configs}/types/IUriPackage.ts (100%) rename packages/js/{client/src => client-config-builder/src/types/configs}/types/IUriRedirect.ts (100%) rename packages/js/{client/src => client-config-builder/src/types/configs}/types/IUriWrapper.ts (100%) rename packages/js/{client/src => client-config-builder/src/types/configs}/types/InterfaceImplementations.ts (100%) rename packages/js/{client/src => client-config-builder/src/types/configs}/types/UriResolverLike.ts (100%) create mode 100644 packages/js/client-config-builder/src/types/configs/types/index.ts create mode 100644 packages/js/client-config-builder/src/types/index.ts delete mode 100644 packages/js/client/src/helpers/buildPolywrapCoreClientConfig.ts delete mode 100644 packages/js/core/src/__tests__/InterfaceImplementations.spec.ts diff --git a/packages/cli/src/lib/workflow/JobRunner.ts b/packages/cli/src/lib/workflow/JobRunner.ts index 079973833c..9df6565780 100644 --- a/packages/cli/src/lib/workflow/JobRunner.ts +++ b/packages/cli/src/lib/workflow/JobRunner.ts @@ -4,11 +4,7 @@ import { PolywrapClient, buildPolywrapCoreClientConfig, } from "@polywrap/client-js"; -import { - CoreClient, - MaybeAsync, - Uri, -} from "@polywrap/core-js"; +import { CoreClient, MaybeAsync, Uri } from "@polywrap/core-js"; import { WorkflowJobs } from "@polywrap/polywrap-manifest-types-js"; import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; diff --git a/packages/js/client-config-builder/package.json b/packages/js/client-config-builder/package.json index 18f0b3c3b9..b668911022 100644 --- a/packages/js/client-config-builder/package.json +++ b/packages/js/client-config-builder/package.json @@ -19,6 +19,7 @@ "test:watch": "jest --watch --passWithNoTests --verbose" }, "dependencies": { + "@polywrap/tracing-js": "0.10.0-pre.6", "@polywrap/core-js": "0.10.0-pre.6", "@polywrap/ens-resolver-plugin-js": "0.10.0-pre.6", "@polywrap/ethereum-plugin-js": "0.10.0-pre.6", diff --git a/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts b/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts index 4bc8d6fbca..a28c66c6ab 100644 --- a/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts +++ b/packages/js/client-config-builder/src/BaseClientConfigBuilder.ts @@ -1,6 +1,6 @@ -import { BuilderConfig } from "./BuilderConfig"; -import { ClientConfig } from "./ClientConfig"; -import { IClientConfigBuilder, TEnv, TUri } from "./IClientConfigBuilder"; +import { BuilderConfig } from "./types/configs/BuilderConfig"; +import { ClientConfig } from "./types/configs/ClientConfig"; +import { IClientConfigBuilder, TEnv, TUri } from "./types/IClientConfigBuilder"; import { CoreClientConfig, @@ -104,13 +104,15 @@ export abstract class BaseClientConfigBuilder implements IClientConfigBuilder { } addEnv(uri: TUri, env: TEnv): IClientConfigBuilder { - this._config.envs[uri] = env; + this._config.envs[uri] = { ...this._config.envs[uri], ...env }; return this; } addEnvs(envs: Record): IClientConfigBuilder { - this._config.envs = { ...this._config.envs, ...envs }; + for (const [uri, env] of Object.entries(envs)) { + this.addEnv(uri, env); + } return this; } @@ -214,6 +216,7 @@ export abstract class BaseClientConfigBuilder implements IClientConfigBuilder { for (const [interfaceUri, implementations] of Object.entries( this._config.interfaces )) { + if (implementations.size === 0) continue; interfaces.push({ interface: Uri.from(interfaceUri), implementations: Array.from(implementations).map((uri) => diff --git a/packages/js/client-config-builder/src/ClientConfigBuilder.ts b/packages/js/client-config-builder/src/ClientConfigBuilder.ts index 7082eab916..12d8af1ee0 100644 --- a/packages/js/client-config-builder/src/ClientConfigBuilder.ts +++ b/packages/js/client-config-builder/src/ClientConfigBuilder.ts @@ -1,6 +1,6 @@ import { getDefaultConfig } from "./bundles"; import { BaseClientConfigBuilder } from "./BaseClientConfigBuilder"; -import { IClientConfigBuilder } from "./IClientConfigBuilder"; +import { IClientConfigBuilder } from "./types/IClientConfigBuilder"; import { CoreClientConfig, IUriResolver } from "@polywrap/core-js"; import { @@ -27,6 +27,8 @@ export class ClientConfigBuilder extends BaseClientConfigBuilder { buildCoreConfig(): CoreClientConfig { const clientConfig = this.build(); + // console.log(clientConfig.packages); + return { envs: clientConfig.envs, interfaces: clientConfig.interfaces, diff --git a/packages/js/client-config-builder/src/__tests__/builtDefaultConfig.ts b/packages/js/client-config-builder/src/__tests__/builtDefaultConfig.ts new file mode 100644 index 0000000000..8e6b372c15 --- /dev/null +++ b/packages/js/client-config-builder/src/__tests__/builtDefaultConfig.ts @@ -0,0 +1,135 @@ +import { IUriPackage, IWrapPackage, Uri } from "@polywrap/core-js"; +import { ensResolverPlugin } from "@polywrap/ens-resolver-plugin-js"; +import { Connection, Connections, ethereumPlugin } from "@polywrap/ethereum-plugin-js"; +import { fileSystemPlugin } from "@polywrap/fs-plugin-js"; +import { fileSystemResolverPlugin } from "@polywrap/fs-resolver-plugin-js"; +import { httpPlugin } from "@polywrap/http-plugin-js"; +import { httpResolverPlugin } from "@polywrap/http-resolver-plugin-js"; +import { ipfsPlugin } from "@polywrap/ipfs-plugin-js"; +import { ipfsResolverPlugin } from "@polywrap/ipfs-resolver-plugin-js"; +import { loggerPlugin } from "@polywrap/logger-plugin-js"; +import { concurrentPromisePlugin } from "concurrent-plugin-js"; +import { defaultWrappers, defaultIpfsProviders } from "../bundles"; +import { ClientConfig } from "../types"; + +const getDefaultPlugins = (): IUriPackage[] => { + return [ + // IPFS is required for downloading Polywrap packages + { + uri: new Uri("wrap://ens/ipfs.polywrap.eth"), + package: ipfsPlugin({}), + }, + // ENS is required for resolving domain to IPFS hashes + { + uri: new Uri("wrap://ens/ens-resolver.polywrap.eth"), + package: ensResolverPlugin({}), + }, + { + uri: new Uri("wrap://ens/ethereum.polywrap.eth"), + package: ethereumPlugin({ + connections: new Connections({ + networks: { + mainnet: new Connection({ + provider: + "https://mainnet.infura.io/v3/b00b2c2cc09c487685e9fb061256d6a6", + }), + goerli: new Connection({ + provider: + "https://goerli.infura.io/v3/b00b2c2cc09c487685e9fb061256d6a6", + }), + }, + }), + }), + }, + { + uri: new Uri("wrap://ens/http.polywrap.eth"), + package: httpPlugin({}), + }, + { + uri: new Uri("wrap://ens/http-resolver.polywrap.eth"), + package: httpResolverPlugin({}), + }, + { + uri: new Uri("wrap://plugin/logger"), + // TODO: remove this once types are updated + package: loggerPlugin({}) as IWrapPackage, + }, + { + uri: new Uri("wrap://ens/fs.polywrap.eth"), + package: fileSystemPlugin({}), + }, + { + uri: new Uri("wrap://ens/fs-resolver.polywrap.eth"), + package: fileSystemResolverPlugin({}), + }, + { + uri: new Uri("wrap://ens/ipfs-resolver.polywrap.eth"), + package: ipfsResolverPlugin({}), + }, + { + uri: new Uri("wrap://plugin/concurrent"), + package: concurrentPromisePlugin({}), + }, + ]; +}; + + +export const builtDefaultConfig = (): ClientConfig => ({ + redirects: [ + { + from: Uri.from("wrap://ens/sha3.polywrap.eth"), + to: Uri.from(defaultWrappers.sha3) + }, + { + from: Uri.from("wrap://ens/uts46.polywrap.eth"), + to: Uri.from(defaultWrappers.uts46) + }, + { + from: Uri.from("wrap://ens/graph-node.polywrap.eth"), + to: Uri.from(defaultWrappers.graphNode) + }, + { + from: Uri.from("wrap://ens/wrappers.polywrap.eth:logger@1.0.0"), + to: Uri.from("wrap://plugin/logger") + } + ], + envs: [ + { + uri: Uri.from(defaultWrappers.graphNode), + env: { + provider: "https://api.thegraph.com" + } + }, + { + uri: Uri.from("wrap://ens/ipfs.polywrap.eth"), + env: { + provider: defaultIpfsProviders[0], + fallbackProviders: defaultIpfsProviders.slice(1) + } + } + ], + packages: getDefaultPlugins(), + wrappers: [], + interfaces: [ + { + interface: new Uri("wrap://ens/uri-resolver.core.polywrap.eth"), + implementations: [ + new Uri("wrap://ens/ipfs-resolver.polywrap.eth"), + new Uri("wrap://ens/ens-resolver.polywrap.eth"), + new Uri("wrap://ens/fs-resolver.polywrap.eth"), + new Uri("wrap://ens/http-resolver.polywrap.eth"), + // ens-text-record-resolver + new Uri("wrap://ipfs/QmfRCVA1MSAjUbrXXjya4xA9QHkbWeiKRsT7Um1cvrR7FY"), + ], + }, + { + interface: new Uri(defaultWrappers.concurrentInterface), + implementations: [new Uri("wrap://plugin/concurrent")], + }, + { + interface: new Uri("wrap://ens/wrappers.polywrap.eth:logger@1.0.0"), + implementations: [new Uri("wrap://plugin/logger")], + }, + ], + resolvers: [], +}); \ No newline at end of file diff --git a/packages/js/client-config-builder/src/__tests__/client-config-builder.spec.ts b/packages/js/client-config-builder/src/__tests__/client-config-builder.spec.ts index 180827a425..57751ae7ec 100644 --- a/packages/js/client-config-builder/src/__tests__/client-config-builder.spec.ts +++ b/packages/js/client-config-builder/src/__tests__/client-config-builder.spec.ts @@ -1,15 +1,12 @@ import { ClientConfigBuilder } from "../ClientConfigBuilder"; import { CoreClient, - Env, - InterfaceImplementations, Uri, - IUriRedirect, IUriResolver, UriPackageOrWrapper, } from "@polywrap/core-js"; import { Result } from "@polywrap/result"; -import { getDefaultConfig } from "../bundles"; +import { builtDefaultConfig } from "./builtDefaultConfig"; class NamedUriResolver implements IUriResolver { private _name: string; @@ -29,32 +26,48 @@ class NamedUriResolver implements IUriResolver { } describe("Client config builder", () => { - const testEnvs: Env[] = [ - { uri: "wrap://ens/test.plugin.one", env: { test: "value" } }, - { uri: "wrap://ens/test.plugin.two", env: { test: "value" } }, - ]; - - const testInterfaces: InterfaceImplementations[] = [ - { - interface: "wrap://ens/test-interface-1.polywrap.eth", - implementations: ["wrap://ens/test1.polywrap.eth"], - }, - { - interface: "wrap://ens/test-interface-2.polywrap.eth", - implementations: ["wrap://ens/test2.polywrap.eth"], - }, - ]; - - const testUriRedirects: IUriRedirect[] = [ - { - from: "wrap://ens/test-one.polywrap.eth", - to: "wrap://ens/test1.polywrap.eth", - }, - { - from: "wrap://ens/test-two.polywrap.eth", - to: "wrap://ens/test2.polywrap.eth", - }, - ]; + const testEnv1: Record> = { + "wrap://ens/test.plugin.one": { test: "value" }, + }; + + const testEnv2: Record> = { + "wrap://ens/test.plugin.two": { test: "value" }, + }; + + const testInterface1: Record> = { + "wrap://ens/test-interface-1.polywrap.eth": new Set([ + "wrap://ens/test1.polywrap.eth", + ]), + }; + + const testInterface2: Record> = { + "wrap://ens/test-interface-2.polywrap.eth": new Set([ + "wrap://ens/test2.polywrap.eth", + ]), + }; + + const testUriRedirect1 = { + "wrap://ens/test-one.polywrap.eth": "wrap://ens/test1.polywrap.eth", + }; + + const testUriRedirect2 = { + "wrap://ens/test-two.polywrap.eth": "wrap://ens/test2.polywrap.eth", + }; + + const testEnvs: Record> = { + ...testEnv1, + ...testEnv2, + }; + + const testInterfaces: Record> = { + ...testInterface1, + ...testInterface2, + }; + + const testUriRedirects = { + ...testUriRedirect1, + ...testUriRedirect2, + }; const testUriResolver: IUriResolver = new NamedUriResolver("test1"); @@ -83,21 +96,21 @@ describe("Client config builder", () => { expect(clientConfig).toBeTruthy(); expect(clientConfig.envs).toStrictEqual( - testEnvs.map((x) => ({ - uri: Uri.from(x.uri), - env: x.env, + Object.entries(testEnvs).map(([uri, env]) => ({ + uri: Uri.from(uri), + env: env, })) ); expect(clientConfig.interfaces).toStrictEqual( - testInterfaces.map((x) => ({ - interface: Uri.from(x.interface), - implementations: x.implementations.map(Uri.from), + Object.entries(testInterfaces).map(([uri, interfaces]) => ({ + interface: Uri.from(uri), + implementations: Array.from(interfaces).map(Uri.from), })) ); expect(clientConfig.redirects).toStrictEqual( - testUriRedirects.map((x) => ({ - from: Uri.from(x.from), - to: Uri.from(x.to), + Object.entries(testUriRedirects).map(([from, to]) => ({ + from: Uri.from(from), + to: Uri.from(to), })) ); expect(clientConfig.resolvers).toStrictEqual([testUriResolver]); @@ -106,35 +119,35 @@ describe("Client config builder", () => { it("should succesfully add and merge two config objects and build", () => { const clientConfig = new ClientConfigBuilder() .add({ - envs: [testEnvs[0]], - interfaces: [testInterfaces[0]], - redirects: [testUriRedirects[0]], + envs: testEnv1, + interfaces: testInterface1, + redirects: testUriRedirect1, resolvers: [testUriResolver], }) .add({ - envs: [testEnvs[1]], - interfaces: [testInterfaces[1]], - redirects: [testUriRedirects[1]], + envs: testEnv2, + interfaces: testInterface2, + redirects: testUriRedirect2, }) .build(); expect(clientConfig).toBeTruthy(); expect(clientConfig.envs).toStrictEqual( - testEnvs.map((x) => ({ - uri: Uri.from(x.uri), - env: x.env, + Object.entries(testEnvs).map(([uri, env]) => ({ + uri: Uri.from(uri), + env: env, })) ); expect(clientConfig.interfaces).toStrictEqual( - testInterfaces.map((x) => ({ - interface: Uri.from(x.interface), - implementations: x.implementations.map(Uri.from), + Object.entries(testInterfaces).map(([uri, interfaces]) => ({ + interface: Uri.from(uri), + implementations: Array.from(interfaces).map(Uri.from), })) ); expect(clientConfig.redirects).toStrictEqual( - testUriRedirects.map((x) => ({ - from: Uri.from(x.from), - to: Uri.from(x.to), + Object.entries(testUriRedirects).map(([from, to]) => ({ + from: Uri.from(from), + to: Uri.from(to), })) ); expect(clientConfig.resolvers).toStrictEqual([testUriResolver]); @@ -143,7 +156,7 @@ describe("Client config builder", () => { it("should successfully add the default config", () => { const clientConfig = new ClientConfigBuilder().addDefaults().build(); - const expectedConfig = getDefaultConfig(); + const expectedConfig = builtDefaultConfig(); expect(clientConfig).toBeTruthy(); expect(clientConfig.envs).toStrictEqual(expectedConfig.envs); @@ -199,8 +212,8 @@ describe("Client config builder", () => { it("should succesfully add two separate envs", () => { const config = new ClientConfigBuilder() - .addEnv(testEnvs[0].uri, testEnvs[0].env) - .addEnv(testEnvs[1].uri, testEnvs[1].env) + .addEnv(Object.keys(testEnvs)[0], Object.values(testEnvs)[0]) + .addEnv(Object.keys(testEnvs)[1], Object.values(testEnvs)[1]) .build(); if (!config.envs || config.envs.length !== 2) { @@ -208,20 +221,20 @@ describe("Client config builder", () => { } expect(config.envs).toContainEqual({ - uri: Uri.from(testEnvs[0].uri), - env: testEnvs[0].env, + uri: Uri.from(Object.keys(testEnvs)[0]), + env: Object.values(testEnvs)[0], }); expect(config.envs).toContainEqual({ - uri: Uri.from(testEnvs[1].uri), - env: testEnvs[1].env, + uri: Uri.from(Object.keys(testEnvs)[1]), + env: Object.values(testEnvs)[1], }); }); it("should remove an env", () => { const config = new ClientConfigBuilder() - .addEnv(testEnvs[0].uri, testEnvs[0].env) - .addEnv(testEnvs[1].uri, testEnvs[1].env) - .removeEnv(testEnvs[0].uri) + .addEnv(Object.keys(testEnvs)[0], Object.values(testEnvs)[0]) + .addEnv(Object.keys(testEnvs)[1], Object.values(testEnvs)[1]) + .removeEnv(Object.keys(testEnvs)[0]) .build(); if (!config.envs || config.envs.length !== 1) { @@ -229,8 +242,8 @@ describe("Client config builder", () => { } expect(config.envs).toContainEqual({ - uri: Uri.from(testEnvs[1].uri), - env: testEnvs[1].env, + uri: Uri.from(Object.keys(testEnvs)[1]), + env: Object.values(testEnvs)[1], }); }); @@ -603,7 +616,7 @@ describe("Client config builder", () => { const config = new ClientConfigBuilder().addResolver(uriResolver).build(); - expect(((config.resolvers[0] as unknown) as NamedUriResolver).name).toBe( + expect((config.resolvers as Array)[0].name).toBe( "ResolverName" ); }); @@ -617,10 +630,10 @@ describe("Client config builder", () => { .addResolver(uriResolver2) .build(); - expect(((config.resolvers[0] as unknown) as NamedUriResolver).name).toBe( + expect((config.resolvers as Array)[0].name).toBe( "first" ); - expect(((config.resolvers[1] as unknown) as NamedUriResolver).name).toBe( + expect((config.resolvers as Array)[1].name).toBe( "second" ); }); diff --git a/packages/js/client-config-builder/src/bundles/getDefaultConfig.ts b/packages/js/client-config-builder/src/bundles/getDefaultConfig.ts index 0489269cfe..9a033f25c5 100644 --- a/packages/js/client-config-builder/src/bundles/getDefaultConfig.ts +++ b/packages/js/client-config-builder/src/bundles/getDefaultConfig.ts @@ -1,5 +1,5 @@ -import { BuilderConfig } from "../BuilderConfig"; -import { TUri } from "../IClientConfigBuilder"; +import { BuilderConfig } from "../types/configs/BuilderConfig"; +import { TUri } from "../types/IClientConfigBuilder"; import { IWrapPackage } from "@polywrap/core-js"; import { ipfsPlugin } from "@polywrap/ipfs-plugin-js"; @@ -78,6 +78,21 @@ export const getDefaultConfig = (): BuilderConfig => ({ }, packages: getDefaultPlugins(), wrappers: {}, - interfaces: {}, + interfaces: { + "wrap://ens/uri-resolver.core.polywrap.eth": new Set([ + "wrap://ens/ipfs-resolver.polywrap.eth", + "wrap://ens/ens-resolver.polywrap.eth", + "wrap://ens/fs-resolver.polywrap.eth", + "wrap://ens/http-resolver.polywrap.eth", + // ens-text-record-resolver + "wrap://ipfs/QmfRCVA1MSAjUbrXXjya4xA9QHkbWeiKRsT7Um1cvrR7FY", + ]), + [defaultWrappers.concurrentInterface]: new Set([ + "wrap://plugin/concurrent", + ]), + "wrap://ens/wrappers.polywrap.eth:logger@1.0.0": new Set([ + "wrap://plugin/logger", + ]), + }, resolvers: [], }); diff --git a/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts b/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts new file mode 100644 index 0000000000..eda3a3854c --- /dev/null +++ b/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts @@ -0,0 +1,141 @@ +import { + PolywrapClientConfig, + PolywrapCoreClientConfig, + BuilderConfig, + ClientConfig, +} from "../types"; +import { UriResolverLike } from "../types/configs/types"; +import { ClientConfigBuilder } from "../ClientConfigBuilder"; +import { sanitizeUri } from "./sanitizeUri"; + +import { CoreClientConfig, Uri } from "@polywrap/core-js"; +import { UriResolverLike as SanitizedUriResolverLike } from "@polywrap/uri-resolvers-js"; + +export function sanitizeConfig( + config: + | Partial> + | PolywrapCoreClientConfig + | Partial + | CoreClientConfig +): BuilderConfig { + const builderConfig: BuilderConfig = { + envs: {}, + interfaces: {}, + redirects: {}, + wrappers: {}, + packages: {}, + resolvers: [], + }; + + if (config.envs) { + for (const env of config.envs) { + builderConfig.envs[sanitizeUri(env.uri).uri] = env.env; + } + } + if (config.interfaces) { + for (const interfaceImplementation of config.interfaces) { + const impls: Set = + builderConfig.interfaces[ + sanitizeUri(interfaceImplementation.interface).uri + ] || new Set(); + for (const implementation of interfaceImplementation.implementations) { + impls.add(sanitizeUri(implementation).uri); + } + builderConfig.interfaces[ + sanitizeUri(interfaceImplementation.interface).uri + ] = impls; + } + } + if ("redirects" in config && config.redirects) { + for (const redirect of config.redirects) { + builderConfig.redirects[ + sanitizeUri(redirect.from).uri + ] = sanitizeUri(redirect.to).uri; + } + } + if ("wrappers" in config && config.wrappers) { + for (const wrapper of config.wrappers) { + builderConfig.wrappers[sanitizeUri(wrapper.uri).uri] = + wrapper.wrapper; + } + } + if ("packages" in config && config.packages) { + for (const pkg of config.packages) { + builderConfig.packages[sanitizeUri(pkg.uri).uri] = + pkg.package; + } + } + if ("resolver" in config && config.resolver) { + builderConfig.resolvers.push(config.resolver); + } + if ("resolvers" in config && config.resolvers) { + builderConfig.resolvers.push( + sanitizeResolverLike(config.resolvers) + ); + } + + return builderConfig; +} + +export function sanitizeResolverLike( + resolverLike: UriResolverLike | SanitizedUriResolverLike +): SanitizedUriResolverLike { + if (Array.isArray(resolverLike)) { + const sanitizedResolvers: SanitizedUriResolverLike[] = []; + for (const resolver of resolverLike) { + sanitizedResolvers.push(sanitizeResolverLike(resolver)); + } + return sanitizedResolvers; + } else if ("tryResolveUri" in resolverLike) { + return resolverLike; + } else if ("uri" in resolverLike) { + return { + ...resolverLike, + uri: sanitizeUri(resolverLike.uri), + }; + } else if ("from" in resolverLike) { + return { + from: sanitizeUri(resolverLike.from), + to: sanitizeUri(resolverLike.to), + }; + } else { + throw new Error( + `Invalid resolverLike: ${JSON.stringify(resolverLike, null, 2)}` + ); + } +} + +export function buildPolywrapCoreClientConfig< + TUri extends Uri | string = string +>( + config?: + | Partial> + | PolywrapCoreClientConfig + | Partial + | CoreClientConfig + | undefined, + builder: ClientConfigBuilder | undefined = undefined, + noDefaults = false +): CoreClientConfig { + if (!builder) { + if (config && "wrapperCache" in config) { + builder = new ClientConfigBuilder(config.wrapperCache); + } else { + builder = new ClientConfigBuilder(); + } + } + + if (!noDefaults) { + builder.addDefaults(); + } + + if (config) { + console.log(config); + console.log(sanitizeConfig(config)); + builder.add(sanitizeConfig(config)); + } + + const sanitizedConfig = builder.buildCoreConfig(); + + return sanitizedConfig; +} diff --git a/packages/js/client/src/helpers/index.ts b/packages/js/client-config-builder/src/helpers/index.ts similarity index 100% rename from packages/js/client/src/helpers/index.ts rename to packages/js/client-config-builder/src/helpers/index.ts diff --git a/packages/js/client/src/helpers/sanitizeUri.ts b/packages/js/client-config-builder/src/helpers/sanitizeUri.ts similarity index 100% rename from packages/js/client/src/helpers/sanitizeUri.ts rename to packages/js/client-config-builder/src/helpers/sanitizeUri.ts diff --git a/packages/js/client-config-builder/src/index.ts b/packages/js/client-config-builder/src/index.ts index bddae108e2..ed000ea254 100644 --- a/packages/js/client-config-builder/src/index.ts +++ b/packages/js/client-config-builder/src/index.ts @@ -1,6 +1,5 @@ +export * from "./types"; +export * from "./helpers"; export * from "./BaseClientConfigBuilder"; -export * from "./BuilderConfig"; -export * from "./ClientConfig"; export * from "./ClientConfigBuilder"; -export * from "./IClientConfigBuilder"; export * from "./bundles"; diff --git a/packages/js/client-config-builder/src/IClientConfigBuilder.ts b/packages/js/client-config-builder/src/types/IClientConfigBuilder.ts similarity index 93% rename from packages/js/client-config-builder/src/IClientConfigBuilder.ts rename to packages/js/client-config-builder/src/types/IClientConfigBuilder.ts index 51ec10c7ee..1d3d5e0600 100644 --- a/packages/js/client-config-builder/src/IClientConfigBuilder.ts +++ b/packages/js/client-config-builder/src/types/IClientConfigBuilder.ts @@ -1,5 +1,5 @@ -import { BuilderConfig } from "./BuilderConfig"; -import { ClientConfig } from "./ClientConfig"; +import { BuilderConfig } from "./configs/BuilderConfig"; +import { ClientConfig } from "./configs/ClientConfig"; import { CoreClientConfig, Wrapper, IWrapPackage } from "@polywrap/core-js"; import { UriResolverLike } from "@polywrap/uri-resolvers-js"; diff --git a/packages/js/client-config-builder/src/BuilderConfig.ts b/packages/js/client-config-builder/src/types/configs/BuilderConfig.ts similarity index 87% rename from packages/js/client-config-builder/src/BuilderConfig.ts rename to packages/js/client-config-builder/src/types/configs/BuilderConfig.ts index 52a7b8ad90..05daafca8f 100644 --- a/packages/js/client-config-builder/src/BuilderConfig.ts +++ b/packages/js/client-config-builder/src/types/configs/BuilderConfig.ts @@ -1,4 +1,4 @@ -import { TEnv, TUri } from "./IClientConfigBuilder"; +import { TEnv, TUri } from "../IClientConfigBuilder"; import { Wrapper, IWrapPackage } from "@polywrap/core-js"; import { UriResolverLike } from "@polywrap/uri-resolvers-js"; diff --git a/packages/js/client-config-builder/src/ClientConfig.ts b/packages/js/client-config-builder/src/types/configs/ClientConfig.ts similarity index 90% rename from packages/js/client-config-builder/src/ClientConfig.ts rename to packages/js/client-config-builder/src/types/configs/ClientConfig.ts index 0d21f2e0c3..f0350f8a2d 100644 --- a/packages/js/client-config-builder/src/ClientConfig.ts +++ b/packages/js/client-config-builder/src/types/configs/ClientConfig.ts @@ -13,5 +13,5 @@ export interface ClientConfig { readonly redirects: IUriRedirect[]; readonly wrappers: IUriWrapper[]; readonly packages: IUriPackage[]; - readonly resolvers: UriResolverLike[]; + readonly resolvers: UriResolverLike; } diff --git a/packages/js/client/src/PolywrapClientConfig.ts b/packages/js/client-config-builder/src/types/configs/PolywrapClientConfig.ts similarity index 100% rename from packages/js/client/src/PolywrapClientConfig.ts rename to packages/js/client-config-builder/src/types/configs/PolywrapClientConfig.ts diff --git a/packages/js/client/src/PolywrapCoreClientConfig.ts b/packages/js/client-config-builder/src/types/configs/PolywrapCoreClientConfig.ts similarity index 100% rename from packages/js/client/src/PolywrapCoreClientConfig.ts rename to packages/js/client-config-builder/src/types/configs/PolywrapCoreClientConfig.ts diff --git a/packages/js/client-config-builder/src/types/configs/index.ts b/packages/js/client-config-builder/src/types/configs/index.ts new file mode 100644 index 0000000000..bc66d7e261 --- /dev/null +++ b/packages/js/client-config-builder/src/types/configs/index.ts @@ -0,0 +1,4 @@ +export * from "./BuilderConfig"; +export * from "./ClientConfig"; +export * from "./PolywrapClientConfig"; +export * from "./PolywrapCoreClientConfig"; diff --git a/packages/js/client/src/types/Env.ts b/packages/js/client-config-builder/src/types/configs/types/Env.ts similarity index 100% rename from packages/js/client/src/types/Env.ts rename to packages/js/client-config-builder/src/types/configs/types/Env.ts diff --git a/packages/js/client/src/types/IUriPackage.ts b/packages/js/client-config-builder/src/types/configs/types/IUriPackage.ts similarity index 100% rename from packages/js/client/src/types/IUriPackage.ts rename to packages/js/client-config-builder/src/types/configs/types/IUriPackage.ts diff --git a/packages/js/client/src/types/IUriRedirect.ts b/packages/js/client-config-builder/src/types/configs/types/IUriRedirect.ts similarity index 100% rename from packages/js/client/src/types/IUriRedirect.ts rename to packages/js/client-config-builder/src/types/configs/types/IUriRedirect.ts diff --git a/packages/js/client/src/types/IUriWrapper.ts b/packages/js/client-config-builder/src/types/configs/types/IUriWrapper.ts similarity index 100% rename from packages/js/client/src/types/IUriWrapper.ts rename to packages/js/client-config-builder/src/types/configs/types/IUriWrapper.ts diff --git a/packages/js/client/src/types/InterfaceImplementations.ts b/packages/js/client-config-builder/src/types/configs/types/InterfaceImplementations.ts similarity index 100% rename from packages/js/client/src/types/InterfaceImplementations.ts rename to packages/js/client-config-builder/src/types/configs/types/InterfaceImplementations.ts diff --git a/packages/js/client/src/types/UriResolverLike.ts b/packages/js/client-config-builder/src/types/configs/types/UriResolverLike.ts similarity index 100% rename from packages/js/client/src/types/UriResolverLike.ts rename to packages/js/client-config-builder/src/types/configs/types/UriResolverLike.ts diff --git a/packages/js/client-config-builder/src/types/configs/types/index.ts b/packages/js/client-config-builder/src/types/configs/types/index.ts new file mode 100644 index 0000000000..74493cde6a --- /dev/null +++ b/packages/js/client-config-builder/src/types/configs/types/index.ts @@ -0,0 +1,6 @@ +export * from "./InterfaceImplementations"; +export * from "./Env"; +export * from "./IUriWrapper"; +export * from "./IUriRedirect"; +export * from "./IUriPackage"; +export * from "./UriResolverLike"; diff --git a/packages/js/client-config-builder/src/types/index.ts b/packages/js/client-config-builder/src/types/index.ts new file mode 100644 index 0000000000..36b1c48aa5 --- /dev/null +++ b/packages/js/client-config-builder/src/types/index.ts @@ -0,0 +1,2 @@ +export * from "./configs"; +export * from "./IClientConfigBuilder"; diff --git a/packages/js/client/src/PolywrapClient.ts b/packages/js/client/src/PolywrapClient.ts index 56d58e2fff..13c2e5f32a 100644 --- a/packages/js/client/src/PolywrapClient.ts +++ b/packages/js/client/src/PolywrapClient.ts @@ -1,9 +1,13 @@ -import { PolywrapClientConfig } from "./PolywrapClientConfig"; -import { buildPolywrapCoreClientConfig, sanitizeUri } from "./helpers"; import { InvokerOptions, TryResolveUriOptions } from "./types"; -import { PolywrapCoreClientConfig } from "./PolywrapCoreClientConfig"; import { PolywrapCoreClient } from "@polywrap/core-client-js"; +import { + PolywrapClientConfig, + PolywrapCoreClientConfig, + buildPolywrapCoreClientConfig, + sanitizeUri, + ClientConfig, +} from "@polywrap/client-config-builder-js"; import { CoreClientConfig, Env, @@ -25,7 +29,9 @@ import { } from "@polywrap/wrap-manifest-types-js"; import { Tracer, TracerConfig } from "@polywrap/tracing-js"; -export class PolywrapClient extends PolywrapCoreClient { +export class PolywrapClient< + TUri extends Uri | string = string +> extends PolywrapCoreClient { /** * Instantiate a PolywrapClient * @@ -33,20 +39,38 @@ export class PolywrapClient extends PolywrapCoreClient { * @param options - { noDefaults?: boolean } */ constructor( - config?: Partial, - options?: { noDefaults?: false } + config?: Partial>, + options?: { noDefaults?: boolean } + ); + constructor(config: CoreClientConfig, options?: { noDefaults?: boolean }); + constructor( + config: Partial, + options?: { noDefaults?: boolean } + ); + constructor( + config: PolywrapCoreClientConfig, + options?: { noDefaults: boolean } ); - constructor(config: PolywrapCoreClientConfig, options: { noDefaults: true }); constructor( config: - | Partial + | Partial> | undefined - | PolywrapCoreClientConfig, + | PolywrapCoreClientConfig + | CoreClientConfig + | Partial, options?: { noDefaults?: boolean } ) { - super(buildPolywrapCoreClientConfig(config, options?.noDefaults ?? false)); + super( + buildPolywrapCoreClientConfig( + config, + undefined, + options?.noDefaults ?? false + ) + ); try { - this.setTracingEnabled(config?.tracerConfig); + if (config && "tracerConfig" in config) { + this.setTracingEnabled(config.tracerConfig); + } Tracer.startSpan("PolywrapClient: constructor"); } catch (error) { diff --git a/packages/js/client/src/__tests__/core/interface-impls.spec.ts b/packages/js/client/src/__tests__/core/interface-impls.spec.ts index 904b0a9a7c..c4ac60c09d 100644 --- a/packages/js/client/src/__tests__/core/interface-impls.spec.ts +++ b/packages/js/client/src/__tests__/core/interface-impls.spec.ts @@ -7,9 +7,9 @@ jest.setTimeout(200000); describe("interface-impls", () => { it("should register interface implementations successfully", async () => { - const interfaceUri = "wrap://ens/some-interface1.eth"; - const implementation1Uri = "wrap://ens/some-implementation1.eth"; - const implementation2Uri = "wrap://ens/some-implementation2.eth"; + const interfaceUri = Uri.from("wrap://ens/some-interface1.eth"); + const implementation1Uri = Uri.from("wrap://ens/some-implementation1.eth"); + const implementation2Uri = Uri.from("wrap://ens/some-implementation2.eth"); const client = new PolywrapClient( { @@ -20,8 +20,8 @@ describe("interface-impls", () => { }, ], resolver: UriResolver.from({ - from: "uri/foo", - to: "uri/bar" + from: Uri.from("uri/foo"), + to: Uri.from("uri/bar") }) }, { noDefaults: true } @@ -31,10 +31,10 @@ describe("interface-impls", () => { expect(interfaces).toEqual([ { - interface: new Uri(interfaceUri), + interface: interfaceUri, implementations: [ - new Uri(implementation1Uri), - new Uri(implementation2Uri), + implementation1Uri, + implementation2Uri, ], }, ]); @@ -51,14 +51,14 @@ describe("interface-impls", () => { }); it("should get all implementations of interface", async () => { - const interface1Uri = "wrap://ens/some-interface1.eth"; - const interface2Uri = "wrap://ens/some-interface2.eth"; - const interface3Uri = "wrap://ens/some-interface3.eth"; + const interface1Uri = Uri.from("wrap://ens/some-interface1.eth"); + const interface2Uri = Uri.from("wrap://ens/some-interface2.eth"); + const interface3Uri = Uri.from("wrap://ens/some-interface3.eth"); - const implementation1Uri = "wrap://ens/some-implementation.eth"; - const implementation2Uri = "wrap://ens/some-implementation2.eth"; - const implementation3Uri = "wrap://ens/some-implementation3.eth"; - const implementation4Uri = "wrap://ens/some-implementation4.eth"; + const implementation1Uri = Uri.from("wrap://ens/some-implementation.eth"); + const implementation2Uri = Uri.from("wrap://ens/some-implementation2.eth"); + const implementation3Uri = Uri.from("wrap://ens/some-implementation3.eth"); + const implementation4Uri = Uri.from("wrap://ens/some-implementation4.eth"); const client = new PolywrapClient( { @@ -129,9 +129,9 @@ describe("interface-impls", () => { }); it("should merge user-defined interface implementations with each other", async () => { - const interfaceUri = "wrap://ens/interface.eth"; - const implementationUri1 = "wrap://ens/implementation1.eth"; - const implementationUri2 = "wrap://ens/implementation2.eth"; + const interfaceUri = Uri.from("wrap://ens/interface.eth"); + const implementationUri1 = Uri.from("wrap://ens/implementation1.eth"); + const implementationUri2 = Uri.from("wrap://ens/implementation2.eth"); const client = new PolywrapClient({ interfaces: [ @@ -147,21 +147,21 @@ describe("interface-impls", () => { }); const interfaces = (client.getInterfaces() || []) - .filter((x) => x.interface.uri === interfaceUri); + .filter((x) => x.interface.uri === interfaceUri.uri); expect(interfaces.length).toEqual(1); const implementationUris = interfaces[0].implementations; expect(implementationUris).toEqual([ - new Uri(implementationUri1), - new Uri(implementationUri2), + implementationUri1, + implementationUri2, ]); }); it("should merge user-defined interface implementations with defaults", async () => { const interfaceUri = ExtendableUriResolver.extInterfaceUri; - const implementationUri1 = "wrap://ens/implementation1.eth"; - const implementationUri2 = "wrap://ens/implementation2.eth"; + const implementationUri1 = Uri.from("wrap://ens/implementation1.eth"); + const implementationUri2 = Uri.from("wrap://ens/implementation2.eth"); const client = new PolywrapClient({ interfaces: [ @@ -189,8 +189,8 @@ describe("interface-impls", () => { ...(defaultClientConfig.interfaces || []).find( (x) => x.interface.uri === interfaceUri.uri )!.implementations, - new Uri(implementationUri1), - new Uri(implementationUri2), + implementationUri1, + implementationUri2, ]); }); @@ -262,11 +262,11 @@ describe("interface-impls", () => { }); test("getImplementations - pass string or Uri", async () => { - const oldInterfaceUri = "ens/old.eth"; - const newInterfaceUri = "ens/new.eth"; + const oldInterfaceUri = Uri.from("ens/old.eth"); + const newInterfaceUri = Uri.from("ens/new.eth"); - const implementation1Uri = "wrap://ens/some-implementation1.eth"; - const implementation2Uri = "wrap://ens/some-implementation2.eth"; + const implementation1Uri = Uri.from("wrap://ens/some-implementation1.eth"); + const implementation2Uri = Uri.from("wrap://ens/some-implementation2.eth"); const client = new PolywrapClient({ redirects: [ @@ -299,19 +299,19 @@ describe("interface-impls", () => { if (!result.ok) fail(result.error); expect(result.value).toEqual([implementation1Uri, implementation2Uri]); - let result2 = await client.getImplementations(new Uri(oldInterfaceUri), { + let result2 = await client.getImplementations(oldInterfaceUri, { applyResolution: false, }); if (!result2.ok) fail(result2.error); - expect(result2.value).toEqual([new Uri(implementation1Uri)]); + expect(result2.value).toEqual([implementation1Uri]); - result2 = await client.getImplementations(new Uri(oldInterfaceUri), { + result2 = await client.getImplementations(oldInterfaceUri, { applyResolution: true, }); if (!result2.ok) fail(result2.error); expect(result2.value).toEqual([ - new Uri(implementation1Uri), - new Uri(implementation2Uri), + implementation1Uri, + implementation2Uri, ]); }); }); diff --git a/packages/js/client/src/__tests__/core/plugin-wrapper.spec.ts b/packages/js/client/src/__tests__/core/plugin-wrapper.spec.ts index 80f7ea4c01..ee35053ee1 100644 --- a/packages/js/client/src/__tests__/core/plugin-wrapper.spec.ts +++ b/packages/js/client/src/__tests__/core/plugin-wrapper.spec.ts @@ -1,4 +1,5 @@ import { PolywrapClient } from "../.."; +import { Uri } from "@polywrap/core-js"; import { WrapManifest } from "@polywrap/wrap-manifest-types-js"; import { PluginPackage, PluginModule } from "@polywrap/plugin-js"; import { UriResolver } from "@polywrap/uri-resolvers-js"; @@ -36,7 +37,7 @@ describe("plugin-wrapper", () => { }; it("plugin map types", async () => { - const implementationUri = "wrap://ens/some-implementation.eth"; + const implementationUri = Uri.from("wrap://ens/some-implementation.eth"); const mockPlugin = mockMapPlugin(); const client = new PolywrapClient( { @@ -80,7 +81,7 @@ describe("plugin-wrapper", () => { const client = new PolywrapClient( { resolver: UriResolver.from([ - { uri: "ens/ipfs.polywrap.eth", package: ipfsPlugin({}) }, + { uri: Uri.from("ens/ipfs.polywrap.eth"), package: ipfsPlugin({}) }, ]), }, { noDefaults: true } diff --git a/packages/js/client/src/__tests__/core/sanity.spec.ts b/packages/js/client/src/__tests__/core/sanity.spec.ts index 5a3c026815..6996a80a64 100644 --- a/packages/js/client/src/__tests__/core/sanity.spec.ts +++ b/packages/js/client/src/__tests__/core/sanity.spec.ts @@ -79,8 +79,8 @@ describe("sanity", () => { expect(resultError).toBeTruthy(); expect(resultError.message).toContain("Error resolving URI"); - let fooPackage: IUriPackage = { - uri: fooUri, + let fooPackage: IUriPackage = { + uri: Uri.from(fooUri), package: await getPackage("wrapper-a") } @@ -106,8 +106,8 @@ describe("sanity", () => { await buildWrapper(greetingPath); - let modifiedFooWrapper: IUriPackage = { - uri: greetingUri, + let modifiedFooWrapper: IUriPackage = { + uri: Uri.from(greetingUri), package: await getPackage("wrapper-b") }; resolvers.push(modifiedFooWrapper); @@ -123,9 +123,9 @@ describe("sanity", () => { expect(result.ok).toBeTruthy() await buildWrapper(modifiedFooPath); - let redirectUri: IUriRedirect = { - from: fooUri, - to: modifiedFooUri + let redirectUri: IUriRedirect = { + from: Uri.from(fooUri), + to: Uri.from(modifiedFooUri) }; resolvers.push(redirectUri); diff --git a/packages/js/client/src/__tests__/core/uri-resolution/uri-resolution.spec.ts b/packages/js/client/src/__tests__/core/uri-resolution/uri-resolution.spec.ts index 6e1ac8ad87..ec61822677 100644 --- a/packages/js/client/src/__tests__/core/uri-resolution/uri-resolution.spec.ts +++ b/packages/js/client/src/__tests__/core/uri-resolution/uri-resolution.spec.ts @@ -15,7 +15,7 @@ import { import fs from "fs"; import { Result } from "@polywrap/result"; import { mockPluginRegistration } from "../../helpers/mockPluginRegistration"; -import { PolywrapClient, ExtendableUriResolver } from "../../../"; +import { PolywrapClient, ExtendableUriResolver, PolywrapClientConfig } from "../../../"; jest.setTimeout(200000); @@ -64,6 +64,9 @@ const expectHistory = async ( "$root-wrapper-dir" ); + console.log(receivedCleanHistory); + console.log(JSON.stringify(JSON.parse(expectedCleanHistory), null, 2)); + expect(receivedCleanHistory).toEqual( JSON.stringify(JSON.parse(expectedCleanHistory), null, 2) ); @@ -109,7 +112,7 @@ describe("URI resolution", () => { await Promise.all([ buildWrapper(wrapperPath), buildWrapper(simpleFsResolverWrapperPath), - buildWrapper(simpleRedirectResolverWrapperPath) + buildWrapper(simpleRedirectResolverWrapperPath), ]); }); @@ -167,12 +170,14 @@ describe("URI resolution", () => { ]); }); - it("can resolve plugin", async () => { + // TODO: This test is failing because UriResolverAggregator is called twice + it.skip("can resolve plugin", async () => { const pluginUri = new Uri("ens/plugin.eth"); - - const client = new PolywrapClient({ - resolvers: [UriResolver.from(mockPluginRegistration(pluginUri))], - }); + const client = new PolywrapClient( + { + resolvers: [UriResolver.from(mockPluginRegistration(pluginUri))], + }, + ); const resolutionContext = new UriResolutionContext(); const result = await client.tryResolveUri({ @@ -180,6 +185,8 @@ describe("URI resolution", () => { resolutionContext, }); + // console.log(JSON.stringify(resolutionContext.getHistory(), null, 2)) + await expectWrapperWithHistory( result, pluginUri, @@ -317,8 +324,8 @@ describe("URI resolution", () => { const client = new PolywrapClient({ redirects: [ { - from: resolverRedirectUri.uri, - to: finalRedirectedUri.uri, + from: resolverRedirectUri, + to: finalRedirectedUri, }, ], interfaces: [ diff --git a/packages/js/client/src/__tests__/core/wasm-wrapper.spec.ts b/packages/js/client/src/__tests__/core/wasm-wrapper.spec.ts index e3ce638d3c..21f2f44af6 100644 --- a/packages/js/client/src/__tests__/core/wasm-wrapper.spec.ts +++ b/packages/js/client/src/__tests__/core/wasm-wrapper.spec.ts @@ -126,15 +126,10 @@ describe("wasm-wrapper", () => { it("should allow clone + reconfigure of redirects", async () => { let builder = new ClientConfigBuilder().add({ - packages: [ - { - uri: "wrap://ens/mock.polywrap.eth", - package: mockPlugin(), - }, - ], + packages: { "wrap://ens/mock.polywrap.eth": mockPlugin() }, }); - const client = new PolywrapClient(builder.build()); + const client = new PolywrapClient(builder.buildCoreConfig()); const clientResult = await client.invoke({ uri: simpleWrapperUri.uri, @@ -148,12 +143,9 @@ describe("wasm-wrapper", () => { expect(clientResult.value).toBeTruthy(); expect(clientResult.value).toEqual("test"); - const redirects = [ - { - from: simpleWrapperUri.uri, - to: "wrap://ens/mock.polywrap.eth", - }, - ]; + const redirects = { + [simpleWrapperUri.uri]: "wrap://ens/mock.polywrap.eth", + }; builder = builder.add({ redirects }); diff --git a/packages/js/client/src/__tests__/e2e/env.spec.ts b/packages/js/client/src/__tests__/e2e/env.spec.ts index e0fdfb7419..1273e308d8 100644 --- a/packages/js/client/src/__tests__/e2e/env.spec.ts +++ b/packages/js/client/src/__tests__/e2e/env.spec.ts @@ -1,3 +1,4 @@ +import { Uri } from "@polywrap/core-js"; import { PluginModule, PluginPackage } from "@polywrap/plugin-js"; import { RecursiveResolver } from "@polywrap/uri-resolvers-js"; import { WrapManifest } from "@polywrap/wrap-manifest-types-js"; @@ -22,7 +23,7 @@ describe("env", () => { describe("env client types", () => { test("plugin env types", async () => { - const implementationUri = "wrap://ens/some-implementation.eth"; + const implementationUri = Uri.from("wrap://ens/some-implementation.eth"); const envPlugin = mockEnvPlugin(); const client = new PolywrapClient( { @@ -53,7 +54,7 @@ describe("env", () => { }); test("inline plugin env types", async () => { - const implementationUri = "wrap://ens/some-implementation.eth"; + const implementationUri = Uri.from("wrap://ens/some-implementation.eth"); const client = new PolywrapClient( { resolver: RecursiveResolver.from([ diff --git a/packages/js/client/src/__tests__/e2e/test-cases.ts b/packages/js/client/src/__tests__/e2e/test-cases.ts index 9a0c3176ad..318df414c5 100644 --- a/packages/js/client/src/__tests__/e2e/test-cases.ts +++ b/packages/js/client/src/__tests__/e2e/test-cases.ts @@ -1,9 +1,9 @@ -import { CoreClient, Uri } from "../../"; +import { PolywrapClient, Uri } from "../../"; import { BigNumber } from "bignumber.js"; import { ErrResult } from "../utils/resultTypes"; export const runAsyncifyTest = async ( - client: CoreClient, + client: PolywrapClient, wrapperUri: string ) => { const subsequentInvokes = await client.invoke({ @@ -118,7 +118,7 @@ export const runAsyncifyTest = async ( expect(setDataWithManyStructuredArgs.value).toBe(true); }; -export const runBigIntTypeTest = async (client: CoreClient, uri: string) => { +export const runBigIntTypeTest = async (client: PolywrapClient, uri: string) => { { const response = await client.invoke({ uri, @@ -164,7 +164,7 @@ export const runBigIntTypeTest = async (client: CoreClient, uri: string) => { } }; -export const runBigNumberTypeTest = async (client: CoreClient, uri: string) => { +export const runBigNumberTypeTest = async (client: PolywrapClient, uri: string) => { { const response = await client.invoke({ uri, @@ -212,7 +212,7 @@ export const runBigNumberTypeTest = async (client: CoreClient, uri: string) => { } }; -export const runBytesTypeTest = async (client: CoreClient, uri: string) => { +export const runBytesTypeTest = async (client: PolywrapClient, uri: string) => { const response = await client.invoke({ uri, method: "bytesMethod", @@ -230,7 +230,7 @@ export const runBytesTypeTest = async (client: CoreClient, uri: string) => { ); }; -export const runEnumTypesTest = async (client: CoreClient, uri: string) => { +export const runEnumTypesTest = async (client: PolywrapClient, uri: string) => { let method1a = await client.invoke({ uri, method: "method1", @@ -287,7 +287,7 @@ export const runEnumTypesTest = async (client: CoreClient, uri: string) => { }; export const runImplementationsTest = async ( - client: CoreClient, + client: PolywrapClient, interfaceUri: string, implementationUri: string ) => { @@ -332,7 +332,7 @@ export const runImplementationsTest = async ( }; export const runGetImplementationsTest = async ( - client: CoreClient, + client: PolywrapClient, aggregatorUri: string, interfaceUri: string, implementationUri: string @@ -366,7 +366,7 @@ export const runGetImplementationsTest = async ( expect(moduleMethodResult.value).toEqual("Test String 2"); }; -export const runInvalidTypesTest = async (client: CoreClient, uri: string) => { +export const runInvalidTypesTest = async (client: PolywrapClient, uri: string) => { let invalidBoolIntSent = await client.invoke({ uri, method: "boolMethod", @@ -438,7 +438,7 @@ export const runInvalidTypesTest = async (client: CoreClient, uri: string) => { }; export const runJsonTypeTest = async ( - client: CoreClient, + client: PolywrapClient, uri: string, testReserved: boolean = false ) => { @@ -532,7 +532,7 @@ export const runJsonTypeTest = async ( } }; -export const runLargeTypesTest = async (client: CoreClient, uri: string) => { +export const runLargeTypesTest = async (client: PolywrapClient, uri: string) => { const largeStr = new Array(5000).join("polywrap "); const largeBytes = new Uint8Array(Buffer.from(largeStr)); const largeStrArray = []; @@ -566,7 +566,7 @@ export const runLargeTypesTest = async (client: CoreClient, uri: string) => { }); }; -export const runNumberTypesTest = async (client: CoreClient, uri: string) => { +export const runNumberTypesTest = async (client: PolywrapClient, uri: string) => { let i8Underflow = await client.invoke({ uri, method: "i8Method", @@ -653,7 +653,7 @@ export const runNumberTypesTest = async (client: CoreClient, uri: string) => { ); }; -export const runObjectTypesTest = async (client: CoreClient, uri: string) => { +export const runObjectTypesTest = async (client: PolywrapClient, uri: string) => { const method1a = await client.invoke({ uri, method: "method1", @@ -803,7 +803,7 @@ export const runObjectTypesTest = async (client: CoreClient, uri: string) => { }); }; -export const runMapTypeTest = async (client: CoreClient, uri: string) => { +export const runMapTypeTest = async (client: PolywrapClient, uri: string) => { const mapClass = new Map().set("Hello", 1).set("Heyo", 50); const nestedMapClass = new Map>().set( "Nested", @@ -898,7 +898,7 @@ export const runMapTypeTest = async (client: CoreClient, uri: string) => { }; export const runSimpleStorageTest = async ( - client: CoreClient, + client: PolywrapClient, wrapperUri: string ) => { const deploy = await client.invoke({ @@ -948,7 +948,7 @@ export const runSimpleStorageTest = async ( }; export const runSimpleEnvTest = async ( - client: CoreClient, + client: PolywrapClient, wrapperUri: string ) => { const getEnvResult = await client.invoke({ @@ -996,7 +996,7 @@ export const runSimpleEnvTest = async ( }; export const runComplexEnvs = async ( - client: CoreClient, + client: PolywrapClient, wrapperUri: string ) => { const methodRequireEnvResult = await client.invoke({ @@ -1118,7 +1118,7 @@ export const runComplexEnvs = async ( }); }; -export const runSubinvokeTest = async (client: CoreClient, uri: string) => { +export const runSubinvokeTest = async (client: PolywrapClient, uri: string) => { { const response = await client.invoke({ uri, diff --git a/packages/js/client/src/__tests__/helpers/getClientWithEnsAndIpfs.ts b/packages/js/client/src/__tests__/helpers/getClientWithEnsAndIpfs.ts index 4402b088fa..58e1b160cb 100644 --- a/packages/js/client/src/__tests__/helpers/getClientWithEnsAndIpfs.ts +++ b/packages/js/client/src/__tests__/helpers/getClientWithEnsAndIpfs.ts @@ -1,4 +1,4 @@ -import { PolywrapClient } from "../.."; +import { PolywrapClient, Uri } from "../.."; import { ensAddresses, providers } from "@polywrap/test-env-js"; import { Connection, @@ -26,7 +26,7 @@ export const getClientWithEnsAndIpfs = () => { }, defaultNetwork: "testnet", }); - return new PolywrapClient( + return new PolywrapClient( { envs: [ { @@ -38,7 +38,7 @@ export const getClientWithEnsAndIpfs = () => { ], interfaces: [ { - interface: ExtendableUriResolver.extInterfaceUri, + interface: ExtendableUriResolver.extInterfaceUri.uri, implementations: [ "wrap://ens/ipfs-resolver.polywrap.eth", "wrap://ens/ens-resolver.polywrap.eth", @@ -50,11 +50,11 @@ export const getClientWithEnsAndIpfs = () => { PackageToWrapperCacheResolver.from( [ { - uri: "wrap://ens/ethereum.polywrap.eth", + uri: Uri.from("wrap://ens/ethereum.polywrap.eth"), package: ethereumPlugin({ connections }), }, { - uri: "wrap://ens/ens-resolver.polywrap.eth", + uri: Uri.from("wrap://ens/ens-resolver.polywrap.eth"), package: ensResolverPlugin({ addresses: { testnet: ensAddresses.ensAddress, @@ -62,19 +62,19 @@ export const getClientWithEnsAndIpfs = () => { }), }, { - uri: "wrap://ens/ipfs.polywrap.eth", + uri: Uri.from("wrap://ens/ipfs.polywrap.eth"), package: ipfsPlugin({}), }, { - uri: "wrap://ens/ipfs-resolver.polywrap.eth", + uri: Uri.from("wrap://ens/ipfs-resolver.polywrap.eth"), package: ipfsResolverPlugin({}), }, { - uri: "wrap://ens/fs.polywrap.eth", + uri: Uri.from("wrap://ens/fs.polywrap.eth"), package: fileSystemPlugin({}), }, { - uri: "wrap://ens/fs-resolver.polywrap.eth", + uri: Uri.from("wrap://ens/fs-resolver.polywrap.eth"), package: fileSystemResolverPlugin({}), }, new ExtendableUriResolver(), diff --git a/packages/js/client/src/helpers/buildPolywrapCoreClientConfig.ts b/packages/js/client/src/helpers/buildPolywrapCoreClientConfig.ts deleted file mode 100644 index b532e63a2e..0000000000 --- a/packages/js/client/src/helpers/buildPolywrapCoreClientConfig.ts +++ /dev/null @@ -1,113 +0,0 @@ -// TODO: can move this to client-config-builder-js -// TODO: buildPolywrapCoreClientConfig can take clientConfigBuilder as an argument - -import { PolywrapClientConfig } from "../PolywrapClientConfig"; -import { PolywrapCoreClientConfig } from "../PolywrapCoreClientConfig"; -import { sanitizeUri } from "./sanitizeUri"; -import { UriResolverLike } from "../types"; - -import { CoreClientConfig, Uri } from "@polywrap/core-js"; -import { - BuilderConfig, - ClientConfigBuilder, -} from "@polywrap/client-config-builder-js"; -import { UriResolverLike as SanitizedUriResolverLike } from "@polywrap/uri-resolvers-js"; - -export function sanitizeConfig( - config: Partial> | PolywrapCoreClientConfig -): BuilderConfig { - const builderConfig: BuilderConfig = { - envs: {}, - interfaces: {}, - redirects: {}, - wrappers: {}, - packages: {}, - resolvers: [], - }; - - if (config.envs) { - for (const env of config.envs) { - builderConfig.envs[sanitizeUri(env.uri).uri] = env.env; - } - } - if (config.interfaces) { - for (const interfaceImplementation of config.interfaces) { - builderConfig.interfaces[ - sanitizeUri(interfaceImplementation.interface).uri - ] = new Set( - interfaceImplementation.implementations.map( - (uri: TUri) => sanitizeUri(uri).uri - ) - ); - } - } - if ("redirects" in config && config.redirects) { - for (const redirect of config.redirects) { - builderConfig.redirects[ - sanitizeUri(redirect.from).uri - ] = sanitizeUri(redirect.to).uri; - } - } - if ("wrappers" in config && config.wrappers) { - for (const wrapper of config.wrappers) { - builderConfig.wrappers[sanitizeUri(wrapper.uri).uri] = - wrapper.wrapper; - } - } - if ("packages" in config && config.packages) { - for (const pkg of config.packages) { - builderConfig.packages[sanitizeUri(pkg.uri).uri] = pkg.package; - } - } - if ("resolver" in config && config.resolver) { - builderConfig.resolvers.push(config.resolver); - } - if ("resolvers" in config && config.resolvers) { - builderConfig.resolvers.push(sanitizeResolverLike(config.resolvers)); - } - - return builderConfig; -} - -export function sanitizeResolverLike( - resolverLike: UriResolverLike -): SanitizedUriResolverLike { - if (Array.isArray(resolverLike)) { - return resolverLike.map((resolver) => sanitizeResolverLike(resolver)); - } else if ("tryResolveUri" in resolverLike) { - return resolverLike; - } else if ("uri" in resolverLike) { - return { - ...resolverLike, - uri: sanitizeUri(resolverLike.uri), - }; - } else if ("from" in resolverLike) { - return { - from: sanitizeUri(resolverLike.from), - to: sanitizeUri(resolverLike.to), - }; - } else { - throw new Error( - `Invalid resolverLike: ${JSON.stringify(resolverLike, null, 2)}` - ); - } -} - -export const buildPolywrapCoreClientConfig = ( - config?: Partial | PolywrapCoreClientConfig | undefined, - noDefaults = false -): CoreClientConfig => { - const builder = new ClientConfigBuilder(config?.wrapperCache); - - if (!noDefaults) { - builder.addDefaults(); - } - - if (config) { - builder.add(sanitizeConfig(config)); - } - - const sanitizedConfig = builder.buildCoreConfig(); - - return sanitizedConfig; -}; diff --git a/packages/js/client/src/index.ts b/packages/js/client/src/index.ts index 85c6d00e03..e4aa0a3f44 100644 --- a/packages/js/client/src/index.ts +++ b/packages/js/client/src/index.ts @@ -1,7 +1,4 @@ export * from "./PolywrapClient"; -export * from "./PolywrapClientConfig"; -export * from "./PolywrapCoreClientConfig"; -export * from "./helpers"; export * from "@polywrap/core-js"; export * from "@polywrap/core-client-js"; export * from "@polywrap/uri-resolvers-js"; diff --git a/packages/js/client/src/types/index.ts b/packages/js/client/src/types/index.ts index 447c57dbfb..5bc0467005 100644 --- a/packages/js/client/src/types/index.ts +++ b/packages/js/client/src/types/index.ts @@ -1,8 +1,2 @@ export * from "./InvokerOptions"; export * from "./TryResolveUriOptions"; -export * from "./InterfaceImplementations"; -export * from "./Env"; -export * from "./IUriWrapper"; -export * from "./IUriRedirect"; -export * from "./IUriPackage"; -export * from "./UriResolverLike"; diff --git a/packages/js/client/tsconfig.json b/packages/js/client/tsconfig.json index a708147fab..206de2ed46 100644 --- a/packages/js/client/tsconfig.json +++ b/packages/js/client/tsconfig.json @@ -11,6 +11,6 @@ }, "include": [ "./src/**/*.ts" - ], +, "../client-config-builder/src/types/configs/PolywrapClientConfig.ts", "../client-config-builder/src/types/configs/PolywrapCoreClientConfig.ts" ], "exclude": [] } diff --git a/packages/js/core/src/__tests__/InterfaceImplementations.spec.ts b/packages/js/core/src/__tests__/InterfaceImplementations.spec.ts deleted file mode 100644 index 6321e92dd4..0000000000 --- a/packages/js/core/src/__tests__/InterfaceImplementations.spec.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Uri } from "../"; -import { sanitizeInterfaceImplementations } from "../types"; - -describe("sanitizeInterfaceImplementations", () => { - it("Returns empty array if empty array passed", () => { - const interfaces = sanitizeInterfaceImplementations([]); - - expect(interfaces).toEqual([]); - }); - - it("Returns interfaces from interfaces definitions", () => { - const interfaces = sanitizeInterfaceImplementations([ - { - interface: "wrap://polywrap/interface", - implementations: ["wrap://polywrap/wrapper1", "wrap://polywrap/wrapper2"] - } - ]); - - expect(interfaces).toEqual([ - { - interface: new Uri("wrap://polywrap/interface"), - implementations: [new Uri("wrap://polywrap/wrapper1"), new Uri("wrap://polywrap/wrapper2")] - } - ]); - }); -}); diff --git a/packages/js/core/src/__tests__/get-implementations.spec.ts b/packages/js/core/src/__tests__/get-implementations.spec.ts index 658c10ed25..5d2ba04858 100644 --- a/packages/js/core/src/__tests__/get-implementations.spec.ts +++ b/packages/js/core/src/__tests__/get-implementations.spec.ts @@ -7,7 +7,7 @@ import { import { CoreClient, InterfaceImplementations } from "../types"; import { Result, ResultOk } from "@polywrap/result"; -const getClient = (redirects: IUriRedirect[]): CoreClient => { +const getClient = (redirects: IUriRedirect[]): CoreClient => { return { tryResolveUri: async ( { uri }: { uri: Uri }): Promise> => { while (true) { @@ -36,7 +36,7 @@ describe("getImplementations", () => { const implementation2Uri = "wrap://ens/some-implementation2.eth"; const implementation3Uri = "wrap://ens/some-implementation3.eth"; - const redirects: IUriRedirect[] = [ + const redirects: IUriRedirect[] = [ { from: new Uri(interface1Uri), to: new Uri(interface2Uri) @@ -51,7 +51,7 @@ describe("getImplementations", () => { } ]; - const interfaces: InterfaceImplementations[] = [ + const interfaces: InterfaceImplementations[] = [ { interface: new Uri(interface1Uri), implementations: [ @@ -112,14 +112,14 @@ describe("getImplementations", () => { const implementation1Uri = "wrap://ens/some-implementation.eth"; const implementation2Uri = "wrap://ens/some-implementation2.eth"; - const redirects: IUriRedirect[] = [ + const redirects: IUriRedirect[] = [ { from: new Uri(implementation1Uri), to: new Uri(implementation2Uri) } ]; - const interfaces: InterfaceImplementations[] = [ + const interfaces: InterfaceImplementations[] = [ { interface: new Uri(interface1Uri), implementations: [ From 6fe69ea34343bec15162f96465b7976d27e1e468 Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Mon, 2 Jan 2023 19:22:03 +0400 Subject: [PATCH 07/22] fix: plugin tests --- .../core/uri-resolution/uri-resolution.spec.ts | 2 -- .../js/plugins/file-system/src/__tests__/e2e.spec.ts | 4 ++-- packages/js/plugins/http/src/__tests__/e2e/e2e.spec.ts | 4 ++-- packages/js/plugins/ipfs/src/__tests__/e2e.spec.ts | 10 +++++----- .../ipfs-resolver/src/__tests__/e2e.spec.ts | 2 +- packages/js/plugins/ws/src/__tests__/e2e/e2e.spec.ts | 8 ++++---- .../plugins/ws/src/__tests__/e2e/integration.spec.ts | 9 +++++---- 7 files changed, 19 insertions(+), 20 deletions(-) diff --git a/packages/js/client/src/__tests__/core/uri-resolution/uri-resolution.spec.ts b/packages/js/client/src/__tests__/core/uri-resolution/uri-resolution.spec.ts index ec61822677..c0144f9337 100644 --- a/packages/js/client/src/__tests__/core/uri-resolution/uri-resolution.spec.ts +++ b/packages/js/client/src/__tests__/core/uri-resolution/uri-resolution.spec.ts @@ -185,8 +185,6 @@ describe("URI resolution", () => { resolutionContext, }); - // console.log(JSON.stringify(resolutionContext.getHistory(), null, 2)) - await expectWrapperWithHistory( result, pluginUri, diff --git a/packages/js/plugins/file-system/src/__tests__/e2e.spec.ts b/packages/js/plugins/file-system/src/__tests__/e2e.spec.ts index 4e9b2103dd..3d32d82d43 100644 --- a/packages/js/plugins/file-system/src/__tests__/e2e.spec.ts +++ b/packages/js/plugins/file-system/src/__tests__/e2e.spec.ts @@ -1,5 +1,5 @@ import { fileSystemPlugin } from "../index"; -import { PolywrapClient } from "@polywrap/client-js"; +import { PolywrapClient, Uri } from "@polywrap/client-js"; import { UriResolver } from "@polywrap/uri-resolvers-js"; import { FileSystem_Module, FileSystem_EncodingEnum } from "../wrap"; import fs from "fs"; @@ -29,7 +29,7 @@ describe("FileSystem plugin", () => { client = new PolywrapClient( { resolver: UriResolver.from({ - uri: "wrap://ens/fs.polywrap.eth", + uri: Uri.from("wrap://ens/fs.polywrap.eth"), package: fileSystemPlugin({}), }), }, diff --git a/packages/js/plugins/http/src/__tests__/e2e/e2e.spec.ts b/packages/js/plugins/http/src/__tests__/e2e/e2e.spec.ts index 8c93d0c937..b45b29c2d2 100644 --- a/packages/js/plugins/http/src/__tests__/e2e/e2e.spec.ts +++ b/packages/js/plugins/http/src/__tests__/e2e/e2e.spec.ts @@ -1,7 +1,7 @@ import { httpPlugin } from "../.."; import { Http_Response } from "../../wrap"; -import { PolywrapClient } from "@polywrap/client-js"; +import { PolywrapClient, Uri } from "@polywrap/client-js"; import { UriResolver } from "@polywrap/uri-resolvers-js"; import nock from "nock"; @@ -20,7 +20,7 @@ describe("e2e tests for HttpPlugin", () => { polywrapClient = new PolywrapClient( { resolver: UriResolver.from({ - uri: "wrap://ens/http.polywrap.eth", + uri: Uri.from("wrap://ens/http.polywrap.eth"), package: httpPlugin({}), }), }, diff --git a/packages/js/plugins/ipfs/src/__tests__/e2e.spec.ts b/packages/js/plugins/ipfs/src/__tests__/e2e.spec.ts index b38febc227..f0533ad6b4 100644 --- a/packages/js/plugins/ipfs/src/__tests__/e2e.spec.ts +++ b/packages/js/plugins/ipfs/src/__tests__/e2e.spec.ts @@ -1,4 +1,4 @@ -import { Result } from "@polywrap/core-js"; +import { Result, Uri } from "@polywrap/core-js"; import { initTestEnvironment, providers, @@ -39,7 +39,7 @@ describe("IPFS Plugin", () => { }, ], resolver: UriResolver.from({ - uri: "wrap://ens/ipfs.polywrap.eth", + uri: Uri.from("wrap://ens/ipfs.polywrap.eth"), package: ipfsPlugin({}), }), }, @@ -121,7 +121,7 @@ describe("IPFS Plugin", () => { }, ], resolver: UriResolver.from({ - uri: "wrap://ens/ipfs.polywrap.eth", + uri: Uri.from("wrap://ens/ipfs.polywrap.eth"), package: ipfsPlugin({}), }), }, @@ -180,7 +180,7 @@ describe("IPFS Plugin", () => { }, ], resolver: UriResolver.from({ - uri: "wrap://ens/ipfs.polywrap.eth", + uri: Uri.from("wrap://ens/ipfs.polywrap.eth"), package: ipfsPlugin({}), }), }, @@ -225,7 +225,7 @@ describe("IPFS Plugin", () => { }, ], resolver: UriResolver.from({ - uri: "wrap://ens/ipfs.polywrap.eth", + uri: Uri.from("wrap://ens/ipfs.polywrap.eth"), package: ipfsPlugin({}), }), }, diff --git a/packages/js/plugins/uri-resolvers/ipfs-resolver/src/__tests__/e2e.spec.ts b/packages/js/plugins/uri-resolvers/ipfs-resolver/src/__tests__/e2e.spec.ts index 02d21fdbbc..8916c26cdf 100644 --- a/packages/js/plugins/uri-resolvers/ipfs-resolver/src/__tests__/e2e.spec.ts +++ b/packages/js/plugins/uri-resolvers/ipfs-resolver/src/__tests__/e2e.spec.ts @@ -47,7 +47,7 @@ describe("IPFS Plugin", () => { fail("Expected response to be a wrapper"); } - const manifest = await result.value.wrapper.getManifest({}); + const manifest = await result.value.wrapper.getManifest(); expect(manifest?.name).toBe("SimpleStorage"); }); diff --git a/packages/js/plugins/ws/src/__tests__/e2e/e2e.spec.ts b/packages/js/plugins/ws/src/__tests__/e2e/e2e.spec.ts index e9dba64183..0c93e46bf9 100644 --- a/packages/js/plugins/ws/src/__tests__/e2e/e2e.spec.ts +++ b/packages/js/plugins/ws/src/__tests__/e2e/e2e.spec.ts @@ -3,7 +3,7 @@ import { Message } from "../../wrap"; import WS from "jest-websocket-mock"; import { PolywrapClient } from "@polywrap/client-js" -import { CoreClient } from "@polywrap/core-js"; +import { CoreClient, Uri } from "@polywrap/core-js"; import { UriResolver } from "@polywrap/uri-resolvers-js"; import { PluginPackage } from "@polywrap/plugin-js"; @@ -19,7 +19,7 @@ describe("WebSocket plugin", () => { { resolver: UriResolver.from([ { - uri: "wrap://ens/ws.polywrap.eth", + uri: Uri.from("wrap://ens/ws.polywrap.eth"), package: wsPlugin({}), }, ]), @@ -147,11 +147,11 @@ describe("WebSocket plugin", () => { { resolver: UriResolver.from([ { - uri: "wrap://ens/ws.polywrap.eth", + uri: Uri.from("wrap://ens/ws.polywrap.eth"), package: wsPlugin({}), }, { - uri: "wrap://ens/stub.polywrap.eth", + uri: Uri.from("wrap://ens/stub.polywrap.eth"), package: callbackPlugin, }, ]), diff --git a/packages/js/plugins/ws/src/__tests__/e2e/integration.spec.ts b/packages/js/plugins/ws/src/__tests__/e2e/integration.spec.ts index 0fc1c90cde..3c0ad03a21 100644 --- a/packages/js/plugins/ws/src/__tests__/e2e/integration.spec.ts +++ b/packages/js/plugins/ws/src/__tests__/e2e/integration.spec.ts @@ -1,14 +1,15 @@ -import { CoreClient } from "@polywrap/core-js"; +import { CoreClient, Uri } from "@polywrap/core-js"; import { buildWrapper } from "@polywrap/test-env-js"; import WS from "jest-websocket-mock"; import { PluginPackage } from "@polywrap/plugin-js"; import { getClient } from "./helpers/getClient"; +import { PolywrapClient } from "@polywrap/client-js"; jest.setTimeout(360000); describe("e2e tests for WsPlugin", () => { describe("integration", () => { - let client: CoreClient; + let client: PolywrapClient; let server: WS; const wrapperPath = `${__dirname}/integration`; @@ -53,7 +54,7 @@ describe("e2e tests for WsPlugin", () => { client = getClient([ { - uri: "wrap://ens/memory.polywrap.eth", + uri: Uri.from("wrap://ens/memory.polywrap.eth"), package: memoryPlugin, }, ]); @@ -100,7 +101,7 @@ describe("e2e tests for WsPlugin", () => { client = getClient([ [ { - uri: "wrap://ens/memory.polywrap.eth", + uri: Uri.from("wrap://ens/memory.polywrap.eth"), package: memoryPlugin, }, ], From a01e993c1caf9a79a2b051631eed94ebf2b9a759 Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Mon, 2 Jan 2023 19:27:41 +0400 Subject: [PATCH 08/22] fix: issues --- .../src/helpers/buildPolywrapCoreClientConfig.ts | 2 -- .../src/__tests__/core/uri-resolution/uri-resolution.spec.ts | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts b/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts index eda3a3854c..0fa8465100 100644 --- a/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts +++ b/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts @@ -130,8 +130,6 @@ export function buildPolywrapCoreClientConfig< } if (config) { - console.log(config); - console.log(sanitizeConfig(config)); builder.add(sanitizeConfig(config)); } diff --git a/packages/js/client/src/__tests__/core/uri-resolution/uri-resolution.spec.ts b/packages/js/client/src/__tests__/core/uri-resolution/uri-resolution.spec.ts index c0144f9337..51008d203b 100644 --- a/packages/js/client/src/__tests__/core/uri-resolution/uri-resolution.spec.ts +++ b/packages/js/client/src/__tests__/core/uri-resolution/uri-resolution.spec.ts @@ -64,8 +64,8 @@ const expectHistory = async ( "$root-wrapper-dir" ); - console.log(receivedCleanHistory); - console.log(JSON.stringify(JSON.parse(expectedCleanHistory), null, 2)); + // console.log(receivedCleanHistory); + // console.log(JSON.stringify(JSON.parse(expectedCleanHistory), null, 2)); expect(receivedCleanHistory).toEqual( JSON.stringify(JSON.parse(expectedCleanHistory), null, 2) From d76067c08fd21e5541fc1960ee23c48143d546bf Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Tue, 3 Jan 2023 18:02:41 +0400 Subject: [PATCH 09/22] wip --- .../core/uri-resolution/uri-resolution.spec.ts | 4 ++-- .../src/__tests__/helpers/getClient.ts | 14 +++++++------- .../src/__tests__/helpers/getClient.ts | 10 +++++----- .../src/__tests__/helpers/getClient.ts | 10 +++++----- .../src/__tests__/helpers/getClient.ts | 10 +++++----- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/packages/js/client/src/__tests__/core/uri-resolution/uri-resolution.spec.ts b/packages/js/client/src/__tests__/core/uri-resolution/uri-resolution.spec.ts index 51008d203b..ee69bfa800 100644 --- a/packages/js/client/src/__tests__/core/uri-resolution/uri-resolution.spec.ts +++ b/packages/js/client/src/__tests__/core/uri-resolution/uri-resolution.spec.ts @@ -15,9 +15,9 @@ import { import fs from "fs"; import { Result } from "@polywrap/result"; import { mockPluginRegistration } from "../../helpers/mockPluginRegistration"; -import { PolywrapClient, ExtendableUriResolver, PolywrapClientConfig } from "../../../"; +import { PolywrapClient, ExtendableUriResolver } from "../../../"; -jest.setTimeout(200000); +jest.setTimeout(300000); const wrapperPath = `${GetPathToTestWrappers()}/wasm-as/simple`; const wrapperUri = new Uri(`wrap://file/${wrapperPath}/build`); diff --git a/packages/js/plugins/uri-resolvers/ens-resolver/src/__tests__/helpers/getClient.ts b/packages/js/plugins/uri-resolvers/ens-resolver/src/__tests__/helpers/getClient.ts index d3ab8fc0af..7eb39e1d7f 100644 --- a/packages/js/plugins/uri-resolvers/ens-resolver/src/__tests__/helpers/getClient.ts +++ b/packages/js/plugins/uri-resolvers/ens-resolver/src/__tests__/helpers/getClient.ts @@ -10,17 +10,17 @@ import { PackageToWrapperCacheResolver, WrapperCache, } from "@polywrap/uri-resolvers-js"; -import { PolywrapClient } from "@polywrap/client-js"; +import { PolywrapClient, Uri } from "@polywrap/client-js"; import { ipfsPlugin } from "@polywrap/ipfs-plugin-js"; import { ipfsResolverPlugin } from "@polywrap/ipfs-resolver-plugin-js"; import { ExtendableUriResolver } from "@polywrap/uri-resolver-extensions-js"; export const getClient = () => { - return new PolywrapClient( + return new PolywrapClient( { interfaces: [ { - interface: ExtendableUriResolver.extInterfaceUri, + interface: ExtendableUriResolver.extInterfaceUri.uri, implementations: [ "wrap://ens/ipfs-resolver.polywrap.eth", "wrap://ens/ens-resolver.polywrap.eth", @@ -32,15 +32,15 @@ export const getClient = () => { PackageToWrapperCacheResolver.from( [ { - uri: "wrap://ens/ipfs-resolver.polywrap.eth", + uri: Uri.from("wrap://ens/ipfs-resolver.polywrap.eth"), package: ipfsResolverPlugin({}), }, { - uri: "wrap://ens/ipfs.polywrap.eth", + uri: Uri.from("wrap://ens/ipfs.polywrap.eth"), package: ipfsPlugin({}), }, { - uri: "wrap://ens/ethereum.polywrap.eth", + uri: Uri.from("wrap://ens/ethereum.polywrap.eth"), package: ethereumPlugin({ connections: new Connections({ networks: { @@ -53,7 +53,7 @@ export const getClient = () => { }), }, { - uri: "wrap://ens/ens-resolver.polywrap.eth", + uri: Uri.from("wrap://ens/ens-resolver.polywrap.eth"), package: ensResolverPlugin({ addresses: { testnet: ensAddresses.ensAddress, diff --git a/packages/js/plugins/uri-resolvers/file-system-resolver/src/__tests__/helpers/getClient.ts b/packages/js/plugins/uri-resolvers/file-system-resolver/src/__tests__/helpers/getClient.ts index 644f5bf156..c73c0b892a 100644 --- a/packages/js/plugins/uri-resolvers/file-system-resolver/src/__tests__/helpers/getClient.ts +++ b/packages/js/plugins/uri-resolvers/file-system-resolver/src/__tests__/helpers/getClient.ts @@ -3,17 +3,17 @@ import { PackageToWrapperCacheResolver, WrapperCache, } from "@polywrap/uri-resolvers-js"; -import { PolywrapClient } from "@polywrap/client-js"; +import { PolywrapClient, Uri } from "@polywrap/client-js"; import { ExtendableUriResolver } from "@polywrap/uri-resolver-extensions-js"; import { fileSystemPlugin } from "@polywrap/fs-plugin-js"; import { fileSystemResolverPlugin } from "../.."; export const getClient = () => { - return new PolywrapClient( + return new PolywrapClient( { interfaces: [ { - interface: ExtendableUriResolver.extInterfaceUri, + interface: ExtendableUriResolver.extInterfaceUri.uri, implementations: ["wrap://ens/fs-resolver.polywrap.eth"], }, ], @@ -21,11 +21,11 @@ export const getClient = () => { PackageToWrapperCacheResolver.from( [ { - uri: "wrap://ens/fs-resolver.polywrap.eth", + uri: Uri.from("wrap://ens/fs-resolver.polywrap.eth"), package: fileSystemResolverPlugin({}), }, { - uri: "wrap://ens/fs.polywrap.eth", + uri: Uri.from("wrap://ens/fs.polywrap.eth"), package: fileSystemPlugin({}), }, new ExtendableUriResolver(), diff --git a/packages/js/plugins/uri-resolvers/http-resolver/src/__tests__/helpers/getClient.ts b/packages/js/plugins/uri-resolvers/http-resolver/src/__tests__/helpers/getClient.ts index 442070adec..1f3d31dd10 100644 --- a/packages/js/plugins/uri-resolvers/http-resolver/src/__tests__/helpers/getClient.ts +++ b/packages/js/plugins/uri-resolvers/http-resolver/src/__tests__/helpers/getClient.ts @@ -3,17 +3,17 @@ import { PackageToWrapperCacheResolver, WrapperCache, } from "@polywrap/uri-resolvers-js"; -import { PolywrapClient } from "@polywrap/client-js"; +import { PolywrapClient, Uri } from "@polywrap/client-js"; import { ExtendableUriResolver } from "@polywrap/uri-resolver-extensions-js"; import { httpPlugin } from "@polywrap/http-plugin-js"; import { httpResolverPlugin } from "../.."; export const getClient = () => { - return new PolywrapClient( + return new PolywrapClient( { interfaces: [ { - interface: ExtendableUriResolver.extInterfaceUri, + interface: ExtendableUriResolver.extInterfaceUri.uri, implementations: ["wrap://ens/http-uri-resolver.polywrap.eth"], }, ], @@ -21,11 +21,11 @@ export const getClient = () => { PackageToWrapperCacheResolver.from( [ { - uri: "wrap://ens/http.polywrap.eth", + uri: Uri.from("wrap://ens/http.polywrap.eth"), package: httpPlugin({}), }, { - uri: "wrap://ens/http-uri-resolver.polywrap.eth", + uri: Uri.from("wrap://ens/http-uri-resolver.polywrap.eth"), package: httpResolverPlugin({}), }, new ExtendableUriResolver(), diff --git a/packages/js/plugins/uri-resolvers/ipfs-resolver/src/__tests__/helpers/getClient.ts b/packages/js/plugins/uri-resolvers/ipfs-resolver/src/__tests__/helpers/getClient.ts index b8b1d0e35b..ba25376610 100644 --- a/packages/js/plugins/uri-resolvers/ipfs-resolver/src/__tests__/helpers/getClient.ts +++ b/packages/js/plugins/uri-resolvers/ipfs-resolver/src/__tests__/helpers/getClient.ts @@ -3,14 +3,14 @@ import { PackageToWrapperCacheResolver, WrapperCache, } from "@polywrap/uri-resolvers-js"; -import { PolywrapClient } from "@polywrap/client-js"; +import { PolywrapClient, Uri } from "@polywrap/client-js"; import { ipfsPlugin } from "@polywrap/ipfs-plugin-js"; import { ExtendableUriResolver } from "@polywrap/uri-resolver-extensions-js"; import { providers } from "@polywrap/test-env-js"; import { ipfsResolverPlugin } from "../.."; export const getClient = (env: Record) => { - return new PolywrapClient( + return new PolywrapClient( { envs: [ { @@ -26,7 +26,7 @@ export const getClient = (env: Record) => { ], interfaces: [ { - interface: ExtendableUriResolver.extInterfaceUri, + interface: ExtendableUriResolver.extInterfaceUri.uri, implementations: ["wrap://ens/ipfs-resolver.polywrap.eth"], }, ], @@ -34,11 +34,11 @@ export const getClient = (env: Record) => { PackageToWrapperCacheResolver.from( [ { - uri: "wrap://ens/ipfs.polywrap.eth", + uri: Uri.from("wrap://ens/ipfs.polywrap.eth"), package: ipfsPlugin({}), }, { - uri: "wrap://ens/ipfs-resolver.polywrap.eth", + uri: Uri.from("wrap://ens/ipfs-resolver.polywrap.eth"), package: ipfsResolverPlugin({}), }, new ExtendableUriResolver(), From 0a783954e9239f47dfbd91aad995e7b413b7d142 Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Tue, 3 Jan 2023 20:01:26 +0400 Subject: [PATCH 10/22] wip --- .../js/client/src/__tests__/e2e/test-cases.ts | 4 +- .../client/src/__tests__/e2e/wasm-as.spec.ts | 37 ++++++- .../helpers/getClientWithEnsAndIpfs.ts | 100 ++++++++++++------ packages/js/wasm/src/imports.ts | 2 +- 4 files changed, 103 insertions(+), 40 deletions(-) diff --git a/packages/js/client/src/__tests__/e2e/test-cases.ts b/packages/js/client/src/__tests__/e2e/test-cases.ts index 318df414c5..24a157c729 100644 --- a/packages/js/client/src/__tests__/e2e/test-cases.ts +++ b/packages/js/client/src/__tests__/e2e/test-cases.ts @@ -295,7 +295,7 @@ export const runImplementationsTest = async ( applyResolution: false, }); if (!implResult.ok) fail(implResult.error); - expect(implResult.value).toEqual([new Uri(implementationUri).uri]); + expect(implResult.value).toEqual([new Uri(implementationUri)]); const results = await Promise.all([ client.invoke({ @@ -342,7 +342,7 @@ export const runGetImplementationsTest = async ( applyResolution: false, }); if (!implResult.ok) fail(implResult.error); - expect(implResult.value).toEqual([implUri.uri]); + expect(implResult.value).toEqual([implUri]); const result = await client.invoke({ uri: aggregatorUri, diff --git a/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts b/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts index f650f4fc92..7383c4eff3 100644 --- a/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts +++ b/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts @@ -319,8 +319,41 @@ describe("wasm-as test cases", () => { const wrapperUri = `fs/${wrapperPath}/build`; const externalWrapperUri = `fs/${externalWrapperPath}/build`; - await buildWrapper(externalWrapperPath); - await buildWrapper(wrapperPath); + // await buildWrapper(externalWrapperPath); + // await buildWrapper(wrapperPath); + const client = new PolywrapClient({ + envs: [ + { + uri: wrapperUri, + env: { + object: { + prop: "object string", + }, + str: "string", + optFilledStr: "optional string", + number: 10, + bool: true, + en: "FIRST", + array: [32, 23], + }, + }, + { + uri: externalWrapperUri, + env: { + externalArray: [1, 2, 3], + externalString: "iamexternal", + }, + }, + ], + redirects: [ + { + from: "ens/externalenv.polywrap.eth", + to: externalWrapperUri, + }, + ], + }); + + console.log(client.getEnvs()); await TestCases.runComplexEnvs( new PolywrapClient({ diff --git a/packages/js/client/src/__tests__/helpers/getClientWithEnsAndIpfs.ts b/packages/js/client/src/__tests__/helpers/getClientWithEnsAndIpfs.ts index 58e1b160cb..de2c24f9b6 100644 --- a/packages/js/client/src/__tests__/helpers/getClientWithEnsAndIpfs.ts +++ b/packages/js/client/src/__tests__/helpers/getClientWithEnsAndIpfs.ts @@ -46,42 +46,72 @@ export const getClientWithEnsAndIpfs = () => { ], }, ], - resolver: RecursiveResolver.from( - PackageToWrapperCacheResolver.from( - [ - { - uri: Uri.from("wrap://ens/ethereum.polywrap.eth"), - package: ethereumPlugin({ connections }), - }, - { - uri: Uri.from("wrap://ens/ens-resolver.polywrap.eth"), - package: ensResolverPlugin({ - addresses: { - testnet: ensAddresses.ensAddress, - }, - }), - }, - { - uri: Uri.from("wrap://ens/ipfs.polywrap.eth"), - package: ipfsPlugin({}), - }, - { - uri: Uri.from("wrap://ens/ipfs-resolver.polywrap.eth"), - package: ipfsResolverPlugin({}), - }, - { - uri: Uri.from("wrap://ens/fs.polywrap.eth"), - package: fileSystemPlugin({}), - }, - { - uri: Uri.from("wrap://ens/fs-resolver.polywrap.eth"), - package: fileSystemResolverPlugin({}), + packages: [ + { + uri: "wrap://ens/ethereum.polywrap.eth", + package: ethereumPlugin({ connections }), + }, + { + uri: "wrap://ens/ens-resolver.polywrap.eth", + package: ensResolverPlugin({ + addresses: { + testnet: ensAddresses.ensAddress, }, - new ExtendableUriResolver(), - ], - new WrapperCache() - ) - ), + }), + }, + { + uri: "wrap://ens/ipfs.polywrap.eth", + package: ipfsPlugin({}), + }, + { + uri: "wrap://ens/ipfs-resolver.polywrap.eth", + package: ipfsResolverPlugin({}), + }, + { + uri: "wrap://ens/fs.polywrap.eth", + package: fileSystemPlugin({}), + }, + { + uri: "wrap://ens/fs-resolver.polywrap.eth", + package: fileSystemResolverPlugin({}), + }, + ], + // resolver: RecursiveResolver.from( + // PackageToWrapperCacheResolver.from( + // [ + // { + // uri: Uri.from("wrap://ens/ethereum.polywrap.eth"), + // package: ethereumPlugin({ connections }), + // }, + // { + // uri: Uri.from("wrap://ens/ens-resolver.polywrap.eth"), + // package: ensResolverPlugin({ + // addresses: { + // testnet: ensAddresses.ensAddress, + // }, + // }), + // }, + // { + // uri: Uri.from("wrap://ens/ipfs.polywrap.eth"), + // package: ipfsPlugin({}), + // }, + // { + // uri: Uri.from("wrap://ens/ipfs-resolver.polywrap.eth"), + // package: ipfsResolverPlugin({}), + // }, + // { + // uri: Uri.from("wrap://ens/fs.polywrap.eth"), + // package: fileSystemPlugin({}), + // }, + // { + // uri: Uri.from("wrap://ens/fs-resolver.polywrap.eth"), + // package: fileSystemResolverPlugin({}), + // }, + // new ExtendableUriResolver(), + // ], + // new WrapperCache() + // ) + // ), }, { noDefaults: true, diff --git a/packages/js/wasm/src/imports.ts b/packages/js/wasm/src/imports.ts index 91edfed00f..7861326896 100644 --- a/packages/js/wasm/src/imports.ts +++ b/packages/js/wasm/src/imports.ts @@ -183,7 +183,7 @@ export const createImports = (config: { abort(result.error?.message as string); return false; } - const implementations = result.value; + const implementations = result.value.map((i) => i.uri); state.getImplementationsResult = msgpackEncode(implementations); return implementations.length > 0; }, From 5960855f1310032eccf37d268751b79518b8026f Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Wed, 4 Jan 2023 02:30:58 +0400 Subject: [PATCH 11/22] fix: issues --- .../helpers/buildPolywrapCoreClientConfig.ts | 55 ++++++++-- .../client/src/__tests__/core/sanity.spec.ts | 8 +- .../src/__tests__/core/wasm-wrapper.spec.ts | 2 +- .../helpers/getClientWithEnsAndIpfs.ts | 100 ++++++------------ 4 files changed, 85 insertions(+), 80 deletions(-) diff --git a/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts b/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts index 0fa8465100..fe6409545e 100644 --- a/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts +++ b/packages/js/client-config-builder/src/helpers/buildPolywrapCoreClientConfig.ts @@ -8,15 +8,16 @@ import { UriResolverLike } from "../types/configs/types"; import { ClientConfigBuilder } from "../ClientConfigBuilder"; import { sanitizeUri } from "./sanitizeUri"; -import { CoreClientConfig, Uri } from "@polywrap/core-js"; +import { + CoreClientConfig, + Env, + InterfaceImplementations, + Uri, +} from "@polywrap/core-js"; import { UriResolverLike as SanitizedUriResolverLike } from "@polywrap/uri-resolvers-js"; export function sanitizeConfig( - config: - | Partial> - | PolywrapCoreClientConfig - | Partial - | CoreClientConfig + config: Partial> | Partial ): BuilderConfig { const builderConfig: BuilderConfig = { envs: {}, @@ -65,9 +66,6 @@ export function sanitizeConfig( pkg.package; } } - if ("resolver" in config && config.resolver) { - builderConfig.resolvers.push(config.resolver); - } if ("resolvers" in config && config.resolvers) { builderConfig.resolvers.push( sanitizeResolverLike(config.resolvers) @@ -105,6 +103,41 @@ export function sanitizeResolverLike( } } +export function sanitizePolywrapCoreConfig( + config: PolywrapCoreClientConfig | CoreClientConfig +): CoreClientConfig { + const sanitizedEnvs: Env[] = []; + const sanitizedInterfaces: InterfaceImplementations[] = []; + + if (config.envs) { + for (const env of config.envs) { + sanitizedEnvs.push({ + uri: sanitizeUri(env.uri), + env: env.env, + }); + } + } + if (config.interfaces) { + for (const interfaceImpl of config.interfaces) { + const sanitizedImpls: Uri[] = []; + for (const impl of interfaceImpl.implementations) { + sanitizedImpls.push(sanitizeUri(impl)); + } + + sanitizedInterfaces.push({ + interface: sanitizeUri(interfaceImpl.interface), + implementations: sanitizedImpls, + }); + } + } + + return { + envs: sanitizedEnvs, + interfaces: sanitizedInterfaces, + resolver: config.resolver, + }; +} + export function buildPolywrapCoreClientConfig< TUri extends Uri | string = string >( @@ -129,7 +162,9 @@ export function buildPolywrapCoreClientConfig< builder.addDefaults(); } - if (config) { + if (config && "resolver" in config) { + return sanitizePolywrapCoreConfig(config); + } else if (config) { builder.add(sanitizeConfig(config)); } diff --git a/packages/js/client/src/__tests__/core/sanity.spec.ts b/packages/js/client/src/__tests__/core/sanity.spec.ts index 6996a80a64..296d616cbc 100644 --- a/packages/js/client/src/__tests__/core/sanity.spec.ts +++ b/packages/js/client/src/__tests__/core/sanity.spec.ts @@ -31,14 +31,14 @@ describe("sanity", () => { new Uri("wrap://ipfs/QmfRCVA1MSAjUbrXXjya4xA9QHkbWeiKRsT7Um1cvrR7FY"), ], }, - { - interface: new Uri("wrap://ens/wrappers.polywrap.eth:logger@1.0.0"), - implementations: [new Uri("wrap://plugin/logger")], - }, { interface: new Uri(defaultWrappers.concurrentInterface), implementations: [new Uri("wrap://plugin/concurrent")], }, + { + interface: new Uri("wrap://ens/wrappers.polywrap.eth:logger@1.0.0"), + implementations: [new Uri("wrap://plugin/logger")], + }, ]); }); diff --git a/packages/js/client/src/__tests__/core/wasm-wrapper.spec.ts b/packages/js/client/src/__tests__/core/wasm-wrapper.spec.ts index 21f2f44af6..ecadc079bb 100644 --- a/packages/js/client/src/__tests__/core/wasm-wrapper.spec.ts +++ b/packages/js/client/src/__tests__/core/wasm-wrapper.spec.ts @@ -127,7 +127,7 @@ describe("wasm-wrapper", () => { it("should allow clone + reconfigure of redirects", async () => { let builder = new ClientConfigBuilder().add({ packages: { "wrap://ens/mock.polywrap.eth": mockPlugin() }, - }); + }).addDefaults(); const client = new PolywrapClient(builder.buildCoreConfig()); diff --git a/packages/js/client/src/__tests__/helpers/getClientWithEnsAndIpfs.ts b/packages/js/client/src/__tests__/helpers/getClientWithEnsAndIpfs.ts index de2c24f9b6..58e1b160cb 100644 --- a/packages/js/client/src/__tests__/helpers/getClientWithEnsAndIpfs.ts +++ b/packages/js/client/src/__tests__/helpers/getClientWithEnsAndIpfs.ts @@ -46,72 +46,42 @@ export const getClientWithEnsAndIpfs = () => { ], }, ], - packages: [ - { - uri: "wrap://ens/ethereum.polywrap.eth", - package: ethereumPlugin({ connections }), - }, - { - uri: "wrap://ens/ens-resolver.polywrap.eth", - package: ensResolverPlugin({ - addresses: { - testnet: ensAddresses.ensAddress, + resolver: RecursiveResolver.from( + PackageToWrapperCacheResolver.from( + [ + { + uri: Uri.from("wrap://ens/ethereum.polywrap.eth"), + package: ethereumPlugin({ connections }), }, - }), - }, - { - uri: "wrap://ens/ipfs.polywrap.eth", - package: ipfsPlugin({}), - }, - { - uri: "wrap://ens/ipfs-resolver.polywrap.eth", - package: ipfsResolverPlugin({}), - }, - { - uri: "wrap://ens/fs.polywrap.eth", - package: fileSystemPlugin({}), - }, - { - uri: "wrap://ens/fs-resolver.polywrap.eth", - package: fileSystemResolverPlugin({}), - }, - ], - // resolver: RecursiveResolver.from( - // PackageToWrapperCacheResolver.from( - // [ - // { - // uri: Uri.from("wrap://ens/ethereum.polywrap.eth"), - // package: ethereumPlugin({ connections }), - // }, - // { - // uri: Uri.from("wrap://ens/ens-resolver.polywrap.eth"), - // package: ensResolverPlugin({ - // addresses: { - // testnet: ensAddresses.ensAddress, - // }, - // }), - // }, - // { - // uri: Uri.from("wrap://ens/ipfs.polywrap.eth"), - // package: ipfsPlugin({}), - // }, - // { - // uri: Uri.from("wrap://ens/ipfs-resolver.polywrap.eth"), - // package: ipfsResolverPlugin({}), - // }, - // { - // uri: Uri.from("wrap://ens/fs.polywrap.eth"), - // package: fileSystemPlugin({}), - // }, - // { - // uri: Uri.from("wrap://ens/fs-resolver.polywrap.eth"), - // package: fileSystemResolverPlugin({}), - // }, - // new ExtendableUriResolver(), - // ], - // new WrapperCache() - // ) - // ), + { + uri: Uri.from("wrap://ens/ens-resolver.polywrap.eth"), + package: ensResolverPlugin({ + addresses: { + testnet: ensAddresses.ensAddress, + }, + }), + }, + { + uri: Uri.from("wrap://ens/ipfs.polywrap.eth"), + package: ipfsPlugin({}), + }, + { + uri: Uri.from("wrap://ens/ipfs-resolver.polywrap.eth"), + package: ipfsResolverPlugin({}), + }, + { + uri: Uri.from("wrap://ens/fs.polywrap.eth"), + package: fileSystemPlugin({}), + }, + { + uri: Uri.from("wrap://ens/fs-resolver.polywrap.eth"), + package: fileSystemResolverPlugin({}), + }, + new ExtendableUriResolver(), + ], + new WrapperCache() + ) + ), }, { noDefaults: true, From 2efe7637f1d9743f4258514fcf63f6672d4863cb Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Wed, 4 Jan 2023 03:11:53 +0400 Subject: [PATCH 12/22] wip --- .../client/src/__tests__/e2e/wasm-as.spec.ts | 31 ------------------- .../wasm-as/env-types/main/polywrap.yaml | 2 +- 2 files changed, 1 insertion(+), 32 deletions(-) diff --git a/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts b/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts index d45139638f..e587605e74 100644 --- a/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts +++ b/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts @@ -321,37 +321,6 @@ describe("wasm-as test cases", () => { await buildWrapper(externalWrapperPath); await buildWrapper(wrapperPath); - const client = new PolywrapClient({ - envs: [ - { - uri: wrapperUri, - env: { - object: { - prop: "object string", - }, - str: "string", - optFilledStr: "optional string", - number: 10, - bool: true, - en: "FIRST", - array: [32, 23], - }, - }, - { - uri: externalWrapperUri, - env: { - externalArray: [1, 2, 3], - externalString: "iamexternal", - }, - }, - ], - redirects: [ - { - from: "ens/externalenv.polywrap.eth", - to: externalWrapperUri, - }, - ], - }); await TestCases.runComplexEnvs( new PolywrapClient({ diff --git a/packages/test-cases/cases/wrappers/wasm-as/env-types/main/polywrap.yaml b/packages/test-cases/cases/wrappers/wasm-as/env-types/main/polywrap.yaml index 001426a684..a798b97520 100644 --- a/packages/test-cases/cases/wrappers/wasm-as/env-types/main/polywrap.yaml +++ b/packages/test-cases/cases/wrappers/wasm-as/env-types/main/polywrap.yaml @@ -9,4 +9,4 @@ source: - uri: "ens/externalenv.polywrap.eth" abi: ../external/build/wrap.info extensions: - build: ./polywrap.build.yaml \ No newline at end of file + build: ./polywrap.build.yaml From ac5e3068914a50d163581d1871a9b00fea25352e Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Wed, 4 Jan 2023 03:19:19 +0400 Subject: [PATCH 13/22] fix: issues --- packages/js/client/src/__tests__/core/sanity.spec.ts | 2 +- packages/js/client/src/__tests__/e2e/wasm-as.spec.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/js/client/src/__tests__/core/sanity.spec.ts b/packages/js/client/src/__tests__/core/sanity.spec.ts index 7dac8ac57d..26fd97c3ef 100644 --- a/packages/js/client/src/__tests__/core/sanity.spec.ts +++ b/packages/js/client/src/__tests__/core/sanity.spec.ts @@ -122,7 +122,7 @@ describe("sanity", () => { expect(result.ok).toBeTruthy() - await buildWrapper(modifiedFooPath); + await buildWrapper(modifiedFooPath, undefined, true); let redirectUri: IUriRedirect = { from: Uri.from(fooUri), to: Uri.from(modifiedFooUri) diff --git a/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts b/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts index e587605e74..a7d4419a71 100644 --- a/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts +++ b/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts @@ -319,8 +319,8 @@ describe("wasm-as test cases", () => { const wrapperUri = `fs/${wrapperPath}/build`; const externalWrapperUri = `fs/${externalWrapperPath}/build`; - await buildWrapper(externalWrapperPath); - await buildWrapper(wrapperPath); + await buildWrapper(externalWrapperPath, undefined, true); + await buildWrapper(wrapperPath, undefined, true); await TestCases.runComplexEnvs( new PolywrapClient({ From e1f92e1dd90091984d4e1ca21dd1817aecbabdf6 Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Wed, 4 Jan 2023 03:22:07 +0400 Subject: [PATCH 14/22] fix: plugin --- .../src/__tests__/helpers/getDefaultConfig.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/js/plugins/ethereum/src/__tests__/helpers/getDefaultConfig.ts b/packages/js/plugins/ethereum/src/__tests__/helpers/getDefaultConfig.ts index ec0cbb1531..c62016a3ed 100644 --- a/packages/js/plugins/ethereum/src/__tests__/helpers/getDefaultConfig.ts +++ b/packages/js/plugins/ethereum/src/__tests__/helpers/getDefaultConfig.ts @@ -7,6 +7,7 @@ import { defaultIpfsProviders, ClientConfig, } from "@polywrap/client-config-builder-js"; +import { Uri } from "@polywrap/core-js"; export const getDefaultConfig = ( connections: Connections @@ -14,7 +15,7 @@ export const getDefaultConfig = ( return { envs: [ { - uri: "wrap://ens/ipfs.polywrap.eth", + uri: Uri.from("wrap://ens/ipfs.polywrap.eth"), env: { provider: providers.ipfs, fallbackProviders: defaultIpfsProviders, @@ -24,20 +25,20 @@ export const getDefaultConfig = ( interfaces: [ { interface: ExtendableUriResolver.extInterfaceUri, - implementations: ["wrap://ens/fs-resolver.polywrap.eth"], + implementations: [Uri.from("wrap://ens/fs-resolver.polywrap.eth")], }, ], packages: [ { - uri: "wrap://ens/ethereum.polywrap.eth", + uri: Uri.from("wrap://ens/ethereum.polywrap.eth"), package: ethereumPlugin({ connections }), }, { - uri: "wrap://ens/fs-resolver.polywrap.eth", + uri: Uri.from("wrap://ens/fs-resolver.polywrap.eth"), package: fileSystemResolverPlugin({}), }, { - uri: "wrap://ens/fs.polywrap.eth", + uri: Uri.from("wrap://ens/fs.polywrap.eth"), package: fileSystemPlugin({}), }, ], From 46756478fbc9eddd220c191349040d5c0c368de4 Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Wed, 4 Jan 2023 03:35:07 +0400 Subject: [PATCH 15/22] fix: custom config issues --- .../app/codegen/004-custom-config/config.ts | 11 ++-------- .../cli/docgen/002-custom-config/config.ts | 5 +---- .../build-cmd/005-custom-config/config.ts | 7 ++----- .../codegen/005-custom-config/config.ts | 7 ++----- .../cases/cli/run/008-custom-config/config.ts | 15 -------------- .../010-custom-config/config.ts | 5 +---- .../014-override-config/config.ts | 20 +++++++++---------- .../wasm/codegen/005-custom-config/config.ts | 5 +---- .../codegen/007-override-config/config.ts | 15 +++++++------- 9 files changed, 26 insertions(+), 64 deletions(-) delete mode 100644 packages/test-cases/cases/cli/run/008-custom-config/config.ts diff --git a/packages/test-cases/cases/cli/app/codegen/004-custom-config/config.ts b/packages/test-cases/cases/cli/app/codegen/004-custom-config/config.ts index 2828720aeb..e1a1c1fb38 100644 --- a/packages/test-cases/cases/cli/app/codegen/004-custom-config/config.ts +++ b/packages/test-cases/cases/cli/app/codegen/004-custom-config/config.ts @@ -1,6 +1,4 @@ -import { - IClientConfigBuilder, -} from "@polywrap/client-config-builder-js"; +import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; import { PluginModule, PluginPackage } from "@polywrap/plugin-js"; import { latestWrapManifestVersion, @@ -31,12 +29,7 @@ const mockPlugin = () => { }; export function configure(builder: IClientConfigBuilder): IClientConfigBuilder { - return builder.addPackage( - { - uri: "wrap://ens/mock.eth", - package: mockPlugin(), - }, - ); + return builder.addPackage("wrap://ens/mock.eth", mockPlugin()); } export const mockPluginManifest: WrapManifest = { diff --git a/packages/test-cases/cases/cli/docgen/002-custom-config/config.ts b/packages/test-cases/cases/cli/docgen/002-custom-config/config.ts index be449a42a0..e1a1c1fb38 100644 --- a/packages/test-cases/cases/cli/docgen/002-custom-config/config.ts +++ b/packages/test-cases/cases/cli/docgen/002-custom-config/config.ts @@ -29,10 +29,7 @@ const mockPlugin = () => { }; export function configure(builder: IClientConfigBuilder): IClientConfigBuilder { - return builder.addPackage({ - uri: "wrap://ens/mock.eth", - package: mockPlugin(), - }); + return builder.addPackage("wrap://ens/mock.eth", mockPlugin()); } export const mockPluginManifest: WrapManifest = { diff --git a/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/config.ts b/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/config.ts index 6ef997bf99..97850e3b0d 100644 --- a/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/config.ts +++ b/packages/test-cases/cases/cli/plugin/build-cmd/005-custom-config/config.ts @@ -33,13 +33,10 @@ const mockPlugin = () => { setData(value: Int!): Boolean! deployContract: String! } - `) + `), }); }; export function configure(builder: IClientConfigBuilder): IClientConfigBuilder { - return builder.addPackage({ - uri: "wrap://ens/mock.eth", - package: mockPlugin(), - }); + return builder.addPackage("wrap://ens/mock.eth", mockPlugin()); } diff --git a/packages/test-cases/cases/cli/plugin/codegen/005-custom-config/config.ts b/packages/test-cases/cases/cli/plugin/codegen/005-custom-config/config.ts index 6ef997bf99..97850e3b0d 100644 --- a/packages/test-cases/cases/cli/plugin/codegen/005-custom-config/config.ts +++ b/packages/test-cases/cases/cli/plugin/codegen/005-custom-config/config.ts @@ -33,13 +33,10 @@ const mockPlugin = () => { setData(value: Int!): Boolean! deployContract: String! } - `) + `), }); }; export function configure(builder: IClientConfigBuilder): IClientConfigBuilder { - return builder.addPackage({ - uri: "wrap://ens/mock.eth", - package: mockPlugin(), - }); + return builder.addPackage("wrap://ens/mock.eth", mockPlugin()); } diff --git a/packages/test-cases/cases/cli/run/008-custom-config/config.ts b/packages/test-cases/cases/cli/run/008-custom-config/config.ts deleted file mode 100644 index 1d12fce783..0000000000 --- a/packages/test-cases/cases/cli/run/008-custom-config/config.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { IClientConfigBuilder } from "@polywrap/client-config-builder-js"; -import path from "path"; - -export function configure(builder: IClientConfigBuilder): IClientConfigBuilder { - const wrapperPath = path.join(__dirname, "..", "run-test-wrapper"); - const wrapperUri = `fs/${path.resolve(wrapperPath)}/build`; - return builder - .addRedirect("wrap://ens/test.eth", wrapperUri) - .addEnv( - wrapperUri, - { - value: 1, - } - ); -} diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/010-custom-config/config.ts b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/010-custom-config/config.ts index aeb80a6f01..c55430565f 100644 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/010-custom-config/config.ts +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/010-custom-config/config.ts @@ -120,8 +120,5 @@ const mockPlugin = () => { }; export function configure(builder: IClientConfigBuilder): IClientConfigBuilder { - return builder.addPackage({ - uri: "wrap://ens/mock.eth", - package: mockPlugin(), - }); + return builder.addPackage("wrap://ens/mock.eth", mockPlugin()); } diff --git a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/config.ts b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/config.ts index f2d061717c..8c0d716d41 100644 --- a/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/config.ts +++ b/packages/test-cases/cases/cli/wasm/build-cmd/assemblyscript/014-override-config/config.ts @@ -3,22 +3,23 @@ import { PluginModule, PluginPackage } from "@polywrap/plugin-js"; import { latestWrapManifestVersion } from "@polywrap/wrap-manifest-types-js"; export class CustomConfigBuilder extends BaseClientConfigBuilder { - addDefaults(): CustomConfigBuilder { + addDefaults(): IClientConfigBuilder { return this.add(getDefaultConfig()); } - buildCoreConfig(): CoreClientConfig { + buildCoreConfig(): CoreClientConfig { + const config = super.build(); return { - envs: this.config.envs, - interfaces: this.config.interfaces, + envs: config.envs, + interfaces: config.interfaces, resolver: RecursiveResolver.from( PackageToWrapperCacheResolver.from( [ StaticResolver.from([ - ...this.config.redirects, - ...this.config.wrappers, - ...this.config.packages, + ...config.redirects, + ...config.wrappers, + ...config.packages, ]), ...this.config.resolvers, new ExtendableUriResolver(), @@ -150,8 +151,5 @@ const mockPlugin = () => { export function configure(_: IClientConfigBuilder): IClientConfigBuilder { return new CustomConfigBuilder() .addDefaults() - .addPackage({ - uri: "wrap://ens/mock.eth", - package: mockPlugin(), - }); + .addPackage("wrap://ens/mock.eth", mockPlugin()); } diff --git a/packages/test-cases/cases/cli/wasm/codegen/005-custom-config/config.ts b/packages/test-cases/cases/cli/wasm/codegen/005-custom-config/config.ts index 5a103a3b93..3dd8b8bacc 100644 --- a/packages/test-cases/cases/cli/wasm/codegen/005-custom-config/config.ts +++ b/packages/test-cases/cases/cli/wasm/codegen/005-custom-config/config.ts @@ -35,10 +35,7 @@ const mockPlugin = (): IWrapPackage => { }; export function configure(builder: IClientConfigBuilder): IClientConfigBuilder { - return builder.addPackage({ - uri: "wrap://ens/mock.eth", - package: mockPlugin(), - }); + return builder.addPackage("wrap://ens/mock.eth", mockPlugin()); } const abi: WrapAbi = { diff --git a/packages/test-cases/cases/cli/wasm/codegen/007-override-config/config.ts b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/config.ts index bd1193c312..482ea5f805 100644 --- a/packages/test-cases/cases/cli/wasm/codegen/007-override-config/config.ts +++ b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/config.ts @@ -3,22 +3,23 @@ import { PluginModule, PluginPackage } from "@polywrap/plugin-js"; import { latestWrapManifestVersion } from "@polywrap/schema-parse"; export class CustomConfigBuilder extends BaseClientConfigBuilder { - addDefaults(): CustomConfigBuilder { + addDefaults(): IClientConfigBuilder { return this.add(getDefaultConfig()); } - buildCoreConfig(): CoreClientConfig { + buildCoreConfig(): CoreClientConfig { + const config = super.build(); return { - envs: this.config.envs, - interfaces: this.config.interfaces, + envs: config.envs, + interfaces: config.interfaces, resolver: RecursiveResolver.from( PackageToWrapperCacheResolver.from( [ StaticResolver.from([ - ...this.config.redirects, - ...this.config.wrappers, - ...this.config.packages, + ...config.redirects, + ...config.wrappers, + ...config.packages, ]), ...this.config.resolvers, new ExtendableUriResolver(), From d7a512e5a601914cc29ba3bfdae634d56f5f09be Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Wed, 4 Jan 2023 03:41:55 +0400 Subject: [PATCH 16/22] fix: plugin tests --- .../js/plugins/http/src/__tests__/helpers/getClient.ts | 10 +++++----- .../plugins/ws/src/__tests__/e2e/helpers/getClient.ts | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/js/plugins/http/src/__tests__/helpers/getClient.ts b/packages/js/plugins/http/src/__tests__/helpers/getClient.ts index 3ceb9ef238..8670071b4a 100644 --- a/packages/js/plugins/http/src/__tests__/helpers/getClient.ts +++ b/packages/js/plugins/http/src/__tests__/helpers/getClient.ts @@ -4,7 +4,7 @@ import { WrapperCache, StaticResolver, } from "@polywrap/uri-resolvers-js"; -import { PolywrapClient } from "@polywrap/client-js"; +import { PolywrapClient, Uri } from "@polywrap/client-js"; import { fileSystemPlugin } from "@polywrap/fs-plugin-js"; import { fileSystemResolverPlugin } from "@polywrap/fs-resolver-plugin-js"; import { ExtendableUriResolver } from "@polywrap/uri-resolver-extensions-js"; @@ -15,7 +15,7 @@ export const getClient = () => { { interfaces: [ { - interface: ExtendableUriResolver.extInterfaceUri, + interface: ExtendableUriResolver.extInterfaceUri.uri, implementations: ["wrap://ens/fs-resolver.polywrap.eth"], }, ], @@ -24,15 +24,15 @@ export const getClient = () => { [ StaticResolver.from([ { - uri: "wrap://ens/http.polywrap.eth", + uri: Uri.from("wrap://ens/http.polywrap.eth"), package: httpPlugin({}), }, { - uri: "wrap://ens/fs-resolver.polywrap.eth", + uri: Uri.from("wrap://ens/fs-resolver.polywrap.eth"), package: fileSystemResolverPlugin({}), }, { - uri: "wrap://ens/fs.polywrap.eth", + uri: Uri.from("wrap://ens/fs.polywrap.eth"), package: fileSystemPlugin({}), }, ]), diff --git a/packages/js/plugins/ws/src/__tests__/e2e/helpers/getClient.ts b/packages/js/plugins/ws/src/__tests__/e2e/helpers/getClient.ts index 72edf4600e..bd8edd90e9 100644 --- a/packages/js/plugins/ws/src/__tests__/e2e/helpers/getClient.ts +++ b/packages/js/plugins/ws/src/__tests__/e2e/helpers/getClient.ts @@ -5,7 +5,7 @@ import { StaticResolver, StaticResolverLike, } from "@polywrap/uri-resolvers-js"; -import { PolywrapClient } from "@polywrap/client-js"; +import { PolywrapClient, Uri } from "@polywrap/client-js"; import { fileSystemPlugin } from "@polywrap/fs-plugin-js"; import { fileSystemResolverPlugin } from "@polywrap/fs-resolver-plugin-js"; import { ExtendableUriResolver } from "@polywrap/uri-resolver-extensions-js"; @@ -16,7 +16,7 @@ export const getClient = (staticResolvers?: StaticResolverLike[]) => { { interfaces: [ { - interface: ExtendableUriResolver.extInterfaceUri, + interface: ExtendableUriResolver.extInterfaceUri.uri, implementations: ["wrap://ens/fs-resolver.polywrap.eth"], }, ], @@ -25,15 +25,15 @@ export const getClient = (staticResolvers?: StaticResolverLike[]) => { [ StaticResolver.from([ { - uri: "wrap://ens/ws.polywrap.eth", + uri: Uri.from("wrap://ens/ws.polywrap.eth"), package: wsPlugin({}), }, { - uri: "wrap://ens/fs-resolver.polywrap.eth", + uri: Uri.from("wrap://ens/fs-resolver.polywrap.eth"), package: fileSystemResolverPlugin({}), }, { - uri: "wrap://ens/fs.polywrap.eth", + uri: Uri.from("wrap://ens/fs.polywrap.eth"), package: fileSystemPlugin({}), }, ...(staticResolvers ?? []), From 77feb4c522b3b291e977ad8df68afbc53b33a0d7 Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Wed, 4 Jan 2023 05:06:54 +0400 Subject: [PATCH 17/22] wip: fixes --- .../option-parsers/option-parsers.spec.ts | 23 +++---- packages/cli/src/commands/test.ts | 1 + .../src/lib/option-parsers/client-config.ts | 7 ++- .../src/lib/option-parsers/wrapper-envs.ts | 2 + packages/cli/src/lib/workflow/JobRunner.ts | 2 + .../codegen/001-sanity/expected/wrap/types.ts | 63 ++++++++++--------- .../002-single-module/expected/wrap/types.ts | 63 ++++++++++--------- .../codegen/003-env/expected/wrap/types.ts | 3 +- .../expected/wrap/types.ts | 3 +- .../005-custom-config/expected/wrap/types.ts | 63 ++++++++++--------- .../expected/wrap/types.ts | 63 ++++++++++--------- .../expected/wrap/types.ts | 7 ++- .../cli/test/008-custom-config/validator.cue | 2 +- .../codegen/007-override-config/config.ts | 49 ++++++++------- .../wasm-rs/env-types/external/Cargo.toml | 2 +- .../wasm-rs/env-types/main/Cargo.toml | 2 +- 16 files changed, 185 insertions(+), 170 deletions(-) diff --git a/packages/cli/src/__tests__/unit/option-parsers/option-parsers.spec.ts b/packages/cli/src/__tests__/unit/option-parsers/option-parsers.spec.ts index 62dc907b72..323cce85a7 100644 --- a/packages/cli/src/__tests__/unit/option-parsers/option-parsers.spec.ts +++ b/packages/cli/src/__tests__/unit/option-parsers/option-parsers.spec.ts @@ -1,26 +1,17 @@ -import { Uri } from "@polywrap/core-js"; import path from "path"; import { parseWrapperEnvsOption } from "../../../lib"; describe("unit tests for option-parsers", () => { describe("wrapper-envs", () => { - const sampleFileEnvs = [ - { - uri: Uri.from("wrap://ens/hello-world.polywrap.eth"), - env: { - foo: "bar", + const sampleFileEnvs = { + "ens/ethereum.polywrap.eth": { + connection: { + networkNameOrChainId: "mainnet", + node: "https://mainnet.infura.io/v3/some_api_key", }, }, - { - uri: Uri.from("ens/ethereum.polywrap.eth"), - env: { - connection: { - node: "https://mainnet.infura.io/v3/some_api_key", - networkNameOrChainId: "mainnet", - }, - }, - }, - ]; + "ens/hello-world.polywrap.eth": { foo: "bar" }, + }; it("Should return undefined when no filename is provided", async () => { const envs = await parseWrapperEnvsOption(undefined); diff --git a/packages/cli/src/commands/test.ts b/packages/cli/src/commands/test.ts index 47e1e74610..b45c1d2dec 100644 --- a/packages/cli/src/commands/test.ts +++ b/packages/cli/src/commands/test.ts @@ -1,3 +1,4 @@ +// @ts-nocheck import { Command, Program } from "./types"; import { intlMsg, diff --git a/packages/cli/src/lib/option-parsers/client-config.ts b/packages/cli/src/lib/option-parsers/client-config.ts index ebe0b5b58f..deeebc03cc 100644 --- a/packages/cli/src/lib/option-parsers/client-config.ts +++ b/packages/cli/src/lib/option-parsers/client-config.ts @@ -42,7 +42,12 @@ export async function parseClientConfigOption( process.exit(1); } - return await configModule.configure(builder); + const bdlr = await configModule.configure(builder); + if (!bdlr.config.packages["wrap://ens/mock.eth"]) { + throw new Error("Mock plugin not found"); + } + throw new Error("Mock plugin found"); + return bdlr; } else { return builder; } diff --git a/packages/cli/src/lib/option-parsers/wrapper-envs.ts b/packages/cli/src/lib/option-parsers/wrapper-envs.ts index 60e118101b..bd436fa49f 100644 --- a/packages/cli/src/lib/option-parsers/wrapper-envs.ts +++ b/packages/cli/src/lib/option-parsers/wrapper-envs.ts @@ -29,6 +29,8 @@ export async function parseWrapperEnvsOption( } } + console.log(loadEnvironmentVariables(envs)) + const wrapperEnvs = loadEnvironmentVariables(envs) as Record< string, Record diff --git a/packages/cli/src/lib/workflow/JobRunner.ts b/packages/cli/src/lib/workflow/JobRunner.ts index 9df6565780..3cc4c9e083 100644 --- a/packages/cli/src/lib/workflow/JobRunner.ts +++ b/packages/cli/src/lib/workflow/JobRunner.ts @@ -186,6 +186,8 @@ export class JobRunner { if (step.config) { const finalConfig = buildPolywrapCoreClientConfig(step.config); + console.log(finalConfig) + finalClient = new PolywrapClient(finalConfig, { noDefaults: true }); } diff --git a/packages/test-cases/cases/cli/plugin/codegen/001-sanity/expected/wrap/types.ts b/packages/test-cases/cases/cli/plugin/codegen/001-sanity/expected/wrap/types.ts index 2b1bf8b120..535609f0d7 100644 --- a/packages/test-cases/cases/cli/plugin/codegen/001-sanity/expected/wrap/types.ts +++ b/packages/test-cases/cases/cli/plugin/codegen/001-sanity/expected/wrap/types.ts @@ -7,7 +7,8 @@ import * as Types from "./"; // @ts-ignore import { CoreClient, - InvokeResult + InvokeResult, + Uri, } from "@polywrap/core-js"; export type UInt = number; @@ -361,7 +362,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "callContractView", args: (args as unknown) as Record, }); @@ -372,7 +373,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "callContractStatic", args: (args as unknown) as Record, }); @@ -383,7 +384,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getBalance", args: (args as unknown) as Record, }); @@ -394,7 +395,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "encodeParams", args: (args as unknown) as Record, }); @@ -405,7 +406,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "encodeFunction", args: (args as unknown) as Record, }); @@ -416,7 +417,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "solidityPack", args: (args as unknown) as Record, }); @@ -427,7 +428,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "solidityKeccak256", args: (args as unknown) as Record, }); @@ -438,7 +439,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "soliditySha256", args: (args as unknown) as Record, }); @@ -449,7 +450,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getSignerAddress", args: (args as unknown) as Record, }); @@ -460,7 +461,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getSignerBalance", args: (args as unknown) as Record, }); @@ -471,7 +472,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getSignerTransactionCount", args: (args as unknown) as Record, }); @@ -482,7 +483,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getGasPrice", args: (args as unknown) as Record, }); @@ -493,7 +494,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "estimateTransactionGas", args: (args as unknown) as Record, }); @@ -504,7 +505,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "estimateContractCallGas", args: (args as unknown) as Record, }); @@ -515,7 +516,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "checkAddress", args: (args as unknown) as Record, }); @@ -526,7 +527,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "toWei", args: (args as unknown) as Record, }); @@ -537,7 +538,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "toEth", args: (args as unknown) as Record, }); @@ -548,7 +549,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "awaitTransaction", args: (args as unknown) as Record, }); @@ -559,7 +560,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "waitForEvent", args: (args as unknown) as Record, }); @@ -570,7 +571,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getNetwork", args: (args as unknown) as Record, }); @@ -581,7 +582,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise>> => { return client.invoke>({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "requestAccounts", args: (args as unknown) as Record, }); @@ -592,7 +593,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "callContractMethod", args: (args as unknown) as Record, }); @@ -603,7 +604,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "callContractMethodAndWait", args: (args as unknown) as Record, }); @@ -614,7 +615,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "sendTransaction", args: (args as unknown) as Record, }); @@ -625,7 +626,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "sendTransactionAndWait", args: (args as unknown) as Record, }); @@ -636,7 +637,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "deployContract", args: (args as unknown) as Record, }); @@ -647,7 +648,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "signMessage", args: (args as unknown) as Record, }); @@ -658,7 +659,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "signMessageBytes", args: (args as unknown) as Record, }); @@ -669,7 +670,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "signTypedData", args: (args as unknown) as Record, }); @@ -680,7 +681,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "sendRPC", args: (args as unknown) as Record, }); diff --git a/packages/test-cases/cases/cli/plugin/codegen/002-single-module/expected/wrap/types.ts b/packages/test-cases/cases/cli/plugin/codegen/002-single-module/expected/wrap/types.ts index 2b1bf8b120..535609f0d7 100644 --- a/packages/test-cases/cases/cli/plugin/codegen/002-single-module/expected/wrap/types.ts +++ b/packages/test-cases/cases/cli/plugin/codegen/002-single-module/expected/wrap/types.ts @@ -7,7 +7,8 @@ import * as Types from "./"; // @ts-ignore import { CoreClient, - InvokeResult + InvokeResult, + Uri, } from "@polywrap/core-js"; export type UInt = number; @@ -361,7 +362,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "callContractView", args: (args as unknown) as Record, }); @@ -372,7 +373,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "callContractStatic", args: (args as unknown) as Record, }); @@ -383,7 +384,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getBalance", args: (args as unknown) as Record, }); @@ -394,7 +395,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "encodeParams", args: (args as unknown) as Record, }); @@ -405,7 +406,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "encodeFunction", args: (args as unknown) as Record, }); @@ -416,7 +417,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "solidityPack", args: (args as unknown) as Record, }); @@ -427,7 +428,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "solidityKeccak256", args: (args as unknown) as Record, }); @@ -438,7 +439,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "soliditySha256", args: (args as unknown) as Record, }); @@ -449,7 +450,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getSignerAddress", args: (args as unknown) as Record, }); @@ -460,7 +461,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getSignerBalance", args: (args as unknown) as Record, }); @@ -471,7 +472,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getSignerTransactionCount", args: (args as unknown) as Record, }); @@ -482,7 +483,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getGasPrice", args: (args as unknown) as Record, }); @@ -493,7 +494,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "estimateTransactionGas", args: (args as unknown) as Record, }); @@ -504,7 +505,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "estimateContractCallGas", args: (args as unknown) as Record, }); @@ -515,7 +516,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "checkAddress", args: (args as unknown) as Record, }); @@ -526,7 +527,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "toWei", args: (args as unknown) as Record, }); @@ -537,7 +538,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "toEth", args: (args as unknown) as Record, }); @@ -548,7 +549,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "awaitTransaction", args: (args as unknown) as Record, }); @@ -559,7 +560,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "waitForEvent", args: (args as unknown) as Record, }); @@ -570,7 +571,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getNetwork", args: (args as unknown) as Record, }); @@ -581,7 +582,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise>> => { return client.invoke>({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "requestAccounts", args: (args as unknown) as Record, }); @@ -592,7 +593,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "callContractMethod", args: (args as unknown) as Record, }); @@ -603,7 +604,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "callContractMethodAndWait", args: (args as unknown) as Record, }); @@ -614,7 +615,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "sendTransaction", args: (args as unknown) as Record, }); @@ -625,7 +626,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "sendTransactionAndWait", args: (args as unknown) as Record, }); @@ -636,7 +637,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "deployContract", args: (args as unknown) as Record, }); @@ -647,7 +648,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "signMessage", args: (args as unknown) as Record, }); @@ -658,7 +659,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "signMessageBytes", args: (args as unknown) as Record, }); @@ -669,7 +670,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "signTypedData", args: (args as unknown) as Record, }); @@ -680,7 +681,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "sendRPC", args: (args as unknown) as Record, }); diff --git a/packages/test-cases/cases/cli/plugin/codegen/003-env/expected/wrap/types.ts b/packages/test-cases/cases/cli/plugin/codegen/003-env/expected/wrap/types.ts index 3ee39fd838..4c2d185fd6 100644 --- a/packages/test-cases/cases/cli/plugin/codegen/003-env/expected/wrap/types.ts +++ b/packages/test-cases/cases/cli/plugin/codegen/003-env/expected/wrap/types.ts @@ -7,7 +7,8 @@ import * as Types from "./"; // @ts-ignore import { CoreClient, - InvokeResult + InvokeResult, + Uri, } from "@polywrap/core-js"; export type UInt = number; diff --git a/packages/test-cases/cases/cli/plugin/codegen/004-env-sanitization/expected/wrap/types.ts b/packages/test-cases/cases/cli/plugin/codegen/004-env-sanitization/expected/wrap/types.ts index a2a3e3bb29..e404b14007 100644 --- a/packages/test-cases/cases/cli/plugin/codegen/004-env-sanitization/expected/wrap/types.ts +++ b/packages/test-cases/cases/cli/plugin/codegen/004-env-sanitization/expected/wrap/types.ts @@ -7,7 +7,8 @@ import * as Types from "./"; // @ts-ignore import { CoreClient, - InvokeResult + InvokeResult, + Uri, } from "@polywrap/core-js"; export type UInt = number; diff --git a/packages/test-cases/cases/cli/plugin/codegen/005-custom-config/expected/wrap/types.ts b/packages/test-cases/cases/cli/plugin/codegen/005-custom-config/expected/wrap/types.ts index 2b1bf8b120..535609f0d7 100644 --- a/packages/test-cases/cases/cli/plugin/codegen/005-custom-config/expected/wrap/types.ts +++ b/packages/test-cases/cases/cli/plugin/codegen/005-custom-config/expected/wrap/types.ts @@ -7,7 +7,8 @@ import * as Types from "./"; // @ts-ignore import { CoreClient, - InvokeResult + InvokeResult, + Uri, } from "@polywrap/core-js"; export type UInt = number; @@ -361,7 +362,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "callContractView", args: (args as unknown) as Record, }); @@ -372,7 +373,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "callContractStatic", args: (args as unknown) as Record, }); @@ -383,7 +384,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getBalance", args: (args as unknown) as Record, }); @@ -394,7 +395,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "encodeParams", args: (args as unknown) as Record, }); @@ -405,7 +406,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "encodeFunction", args: (args as unknown) as Record, }); @@ -416,7 +417,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "solidityPack", args: (args as unknown) as Record, }); @@ -427,7 +428,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "solidityKeccak256", args: (args as unknown) as Record, }); @@ -438,7 +439,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "soliditySha256", args: (args as unknown) as Record, }); @@ -449,7 +450,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getSignerAddress", args: (args as unknown) as Record, }); @@ -460,7 +461,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getSignerBalance", args: (args as unknown) as Record, }); @@ -471,7 +472,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getSignerTransactionCount", args: (args as unknown) as Record, }); @@ -482,7 +483,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getGasPrice", args: (args as unknown) as Record, }); @@ -493,7 +494,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "estimateTransactionGas", args: (args as unknown) as Record, }); @@ -504,7 +505,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "estimateContractCallGas", args: (args as unknown) as Record, }); @@ -515,7 +516,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "checkAddress", args: (args as unknown) as Record, }); @@ -526,7 +527,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "toWei", args: (args as unknown) as Record, }); @@ -537,7 +538,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "toEth", args: (args as unknown) as Record, }); @@ -548,7 +549,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "awaitTransaction", args: (args as unknown) as Record, }); @@ -559,7 +560,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "waitForEvent", args: (args as unknown) as Record, }); @@ -570,7 +571,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getNetwork", args: (args as unknown) as Record, }); @@ -581,7 +582,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise>> => { return client.invoke>({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "requestAccounts", args: (args as unknown) as Record, }); @@ -592,7 +593,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "callContractMethod", args: (args as unknown) as Record, }); @@ -603,7 +604,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "callContractMethodAndWait", args: (args as unknown) as Record, }); @@ -614,7 +615,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "sendTransaction", args: (args as unknown) as Record, }); @@ -625,7 +626,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "sendTransactionAndWait", args: (args as unknown) as Record, }); @@ -636,7 +637,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "deployContract", args: (args as unknown) as Record, }); @@ -647,7 +648,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "signMessage", args: (args as unknown) as Record, }); @@ -658,7 +659,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "signMessageBytes", args: (args as unknown) as Record, }); @@ -669,7 +670,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "signTypedData", args: (args as unknown) as Record, }); @@ -680,7 +681,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "sendRPC", args: (args as unknown) as Record, }); diff --git a/packages/test-cases/cases/cli/plugin/codegen/006-custom-manifest-file/expected/wrap/types.ts b/packages/test-cases/cases/cli/plugin/codegen/006-custom-manifest-file/expected/wrap/types.ts index 2b1bf8b120..535609f0d7 100644 --- a/packages/test-cases/cases/cli/plugin/codegen/006-custom-manifest-file/expected/wrap/types.ts +++ b/packages/test-cases/cases/cli/plugin/codegen/006-custom-manifest-file/expected/wrap/types.ts @@ -7,7 +7,8 @@ import * as Types from "./"; // @ts-ignore import { CoreClient, - InvokeResult + InvokeResult, + Uri, } from "@polywrap/core-js"; export type UInt = number; @@ -361,7 +362,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "callContractView", args: (args as unknown) as Record, }); @@ -372,7 +373,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "callContractStatic", args: (args as unknown) as Record, }); @@ -383,7 +384,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getBalance", args: (args as unknown) as Record, }); @@ -394,7 +395,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "encodeParams", args: (args as unknown) as Record, }); @@ -405,7 +406,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "encodeFunction", args: (args as unknown) as Record, }); @@ -416,7 +417,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "solidityPack", args: (args as unknown) as Record, }); @@ -427,7 +428,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "solidityKeccak256", args: (args as unknown) as Record, }); @@ -438,7 +439,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "soliditySha256", args: (args as unknown) as Record, }); @@ -449,7 +450,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getSignerAddress", args: (args as unknown) as Record, }); @@ -460,7 +461,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getSignerBalance", args: (args as unknown) as Record, }); @@ -471,7 +472,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getSignerTransactionCount", args: (args as unknown) as Record, }); @@ -482,7 +483,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getGasPrice", args: (args as unknown) as Record, }); @@ -493,7 +494,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "estimateTransactionGas", args: (args as unknown) as Record, }); @@ -504,7 +505,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "estimateContractCallGas", args: (args as unknown) as Record, }); @@ -515,7 +516,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "checkAddress", args: (args as unknown) as Record, }); @@ -526,7 +527,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "toWei", args: (args as unknown) as Record, }); @@ -537,7 +538,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "toEth", args: (args as unknown) as Record, }); @@ -548,7 +549,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "awaitTransaction", args: (args as unknown) as Record, }); @@ -559,7 +560,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "waitForEvent", args: (args as unknown) as Record, }); @@ -570,7 +571,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "getNetwork", args: (args as unknown) as Record, }); @@ -581,7 +582,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise>> => { return client.invoke>({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "requestAccounts", args: (args as unknown) as Record, }); @@ -592,7 +593,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "callContractMethod", args: (args as unknown) as Record, }); @@ -603,7 +604,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "callContractMethodAndWait", args: (args as unknown) as Record, }); @@ -614,7 +615,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "sendTransaction", args: (args as unknown) as Record, }); @@ -625,7 +626,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "sendTransactionAndWait", args: (args as unknown) as Record, }); @@ -636,7 +637,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "deployContract", args: (args as unknown) as Record, }); @@ -647,7 +648,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "signMessage", args: (args as unknown) as Record, }); @@ -658,7 +659,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "signMessageBytes", args: (args as unknown) as Record, }); @@ -669,7 +670,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "signTypedData", args: (args as unknown) as Record, }); @@ -680,7 +681,7 @@ export const Ethereum_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "ens/ethereum.polywrap.eth", + uri: Uri.from("ens/ethereum.polywrap.eth"), method: "sendRPC", args: (args as unknown) as Record, }); diff --git a/packages/test-cases/cases/cli/plugin/codegen/007-interface-comments/expected/wrap/types.ts b/packages/test-cases/cases/cli/plugin/codegen/007-interface-comments/expected/wrap/types.ts index 2d12d2f2df..5a6e882223 100644 --- a/packages/test-cases/cases/cli/plugin/codegen/007-interface-comments/expected/wrap/types.ts +++ b/packages/test-cases/cases/cli/plugin/codegen/007-interface-comments/expected/wrap/types.ts @@ -7,7 +7,8 @@ import * as Types from "./"; // @ts-ignore import { CoreClient, - InvokeResult + InvokeResult, + Uri, } from "@polywrap/core-js"; export type UInt = number; @@ -57,7 +58,7 @@ export const Interface_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "my/import", + uri: Uri.from("my/import"), method: "methodA", args: (args as unknown) as Record, }); @@ -68,7 +69,7 @@ export const Interface_Module = { client: CoreClient ): Promise> => { return client.invoke({ - uri: "my/import", + uri: Uri.from("my/import"), method: "methodB", args: (args as unknown) as Record, }); diff --git a/packages/test-cases/cases/cli/test/008-custom-config/validator.cue b/packages/test-cases/cases/cli/test/008-custom-config/validator.cue index 6c96e94033..fd03ab6e3b 100644 --- a/packages/test-cases/cases/cli/test/008-custom-config/validator.cue +++ b/packages/test-cases/cases/cli/test/008-custom-config/validator.cue @@ -3,7 +3,7 @@ package e2e cases: { $0: { data: 2, - error?: _|_, // Never fails + error?: "hhelo", // Never fails } } diff --git a/packages/test-cases/cases/cli/wasm/codegen/007-override-config/config.ts b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/config.ts index 482ea5f805..0a2f2426fd 100644 --- a/packages/test-cases/cases/cli/wasm/codegen/007-override-config/config.ts +++ b/packages/test-cases/cases/cli/wasm/codegen/007-override-config/config.ts @@ -1,4 +1,15 @@ -import { BaseClientConfigBuilder, getDefaultConfig, IClientConfigBuilder, CoreClientConfig, ExtendableUriResolver, PackageToWrapperCacheResolver, RecursiveResolver, StaticResolver, Uri, WrapperCache } from "@polywrap/client-js"; +import { + BaseClientConfigBuilder, + getDefaultConfig, + IClientConfigBuilder, + CoreClientConfig, + ExtendableUriResolver, + PackageToWrapperCacheResolver, + RecursiveResolver, + StaticResolver, + Uri, + WrapperCache, +} from "@polywrap/client-js"; import { PluginModule, PluginPackage } from "@polywrap/plugin-js"; import { latestWrapManifestVersion } from "@polywrap/schema-parse"; @@ -12,21 +23,20 @@ export class CustomConfigBuilder extends BaseClientConfigBuilder { return { envs: config.envs, interfaces: config.interfaces, - resolver: - RecursiveResolver.from( - PackageToWrapperCacheResolver.from( - [ - StaticResolver.from([ - ...config.redirects, - ...config.wrappers, - ...config.packages, - ]), - ...this.config.resolvers, - new ExtendableUriResolver(), - ], - new WrapperCache() - ) - ), + resolver: RecursiveResolver.from( + PackageToWrapperCacheResolver.from( + [ + StaticResolver.from([ + ...config.redirects, + ...config.wrappers, + ...config.packages, + ]), + ...this.config.resolvers, + new ExtendableUriResolver(), + ], + new WrapperCache() + ) + ), }; } } @@ -143,7 +153,7 @@ const mockPlugin = () => { imports: [], interfaces: [], }, - } + }, } ); }; @@ -151,8 +161,5 @@ const mockPlugin = () => { export function configure(_: IClientConfigBuilder): IClientConfigBuilder { return new CustomConfigBuilder() .addDefaults() - .addPackage({ - uri: "wrap://ens/mock.eth", - package: mockPlugin(), - }); + .addPackage("wrap://ens/mock.eth", mockPlugin()); } diff --git a/packages/test-cases/cases/wrappers/wasm-rs/env-types/external/Cargo.toml b/packages/test-cases/cases/wrappers/wasm-rs/env-types/external/Cargo.toml index 922ab71a20..242710b629 100644 --- a/packages/test-cases/cases/wrappers/wasm-rs/env-types/external/Cargo.toml +++ b/packages/test-cases/cases/wrappers/wasm-rs/env-types/external/Cargo.toml @@ -10,7 +10,7 @@ license = "MIT" edition = "2021" [dependencies] -polywrap-wasm-rs = { path = "../../../../../../../wasm/rs" } +polywrap-wasm-rs = { path = "../../../../../../wasm/rs" } serde = { version = "1.0", features = ["derive"] } [lib] diff --git a/packages/test-cases/cases/wrappers/wasm-rs/env-types/main/Cargo.toml b/packages/test-cases/cases/wrappers/wasm-rs/env-types/main/Cargo.toml index 922ab71a20..242710b629 100644 --- a/packages/test-cases/cases/wrappers/wasm-rs/env-types/main/Cargo.toml +++ b/packages/test-cases/cases/wrappers/wasm-rs/env-types/main/Cargo.toml @@ -10,7 +10,7 @@ license = "MIT" edition = "2021" [dependencies] -polywrap-wasm-rs = { path = "../../../../../../../wasm/rs" } +polywrap-wasm-rs = { path = "../../../../../../wasm/rs" } serde = { version = "1.0", features = ["derive"] } [lib] From 9e59d6560ee9053bfdda7b98786f8949c9544ada Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Wed, 4 Jan 2023 06:02:39 +0400 Subject: [PATCH 18/22] wip --- packages/cli/src/commands/test.ts | 1 - packages/cli/src/lib/option-parsers/client-config.ts | 7 +------ packages/cli/src/lib/workflow/JobRunner.ts | 2 -- 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/packages/cli/src/commands/test.ts b/packages/cli/src/commands/test.ts index b45c1d2dec..47e1e74610 100644 --- a/packages/cli/src/commands/test.ts +++ b/packages/cli/src/commands/test.ts @@ -1,4 +1,3 @@ -// @ts-nocheck import { Command, Program } from "./types"; import { intlMsg, diff --git a/packages/cli/src/lib/option-parsers/client-config.ts b/packages/cli/src/lib/option-parsers/client-config.ts index deeebc03cc..ebe0b5b58f 100644 --- a/packages/cli/src/lib/option-parsers/client-config.ts +++ b/packages/cli/src/lib/option-parsers/client-config.ts @@ -42,12 +42,7 @@ export async function parseClientConfigOption( process.exit(1); } - const bdlr = await configModule.configure(builder); - if (!bdlr.config.packages["wrap://ens/mock.eth"]) { - throw new Error("Mock plugin not found"); - } - throw new Error("Mock plugin found"); - return bdlr; + return await configModule.configure(builder); } else { return builder; } diff --git a/packages/cli/src/lib/workflow/JobRunner.ts b/packages/cli/src/lib/workflow/JobRunner.ts index 3cc4c9e083..9df6565780 100644 --- a/packages/cli/src/lib/workflow/JobRunner.ts +++ b/packages/cli/src/lib/workflow/JobRunner.ts @@ -186,8 +186,6 @@ export class JobRunner { if (step.config) { const finalConfig = buildPolywrapCoreClientConfig(step.config); - console.log(finalConfig) - finalClient = new PolywrapClient(finalConfig, { noDefaults: true }); } From 09fad8b958f23586fcfc114be668f07fdd491d84 Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Thu, 5 Jan 2023 20:40:53 +0400 Subject: [PATCH 19/22] fix: issues --- packages/cli/src/__tests__/unit/jobrunner.spec.ts | 3 +-- packages/cli/src/lib/option-parsers/wrapper-envs.ts | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/cli/src/__tests__/unit/jobrunner.spec.ts b/packages/cli/src/__tests__/unit/jobrunner.spec.ts index 82257fba69..33b3beca58 100644 --- a/packages/cli/src/__tests__/unit/jobrunner.spec.ts +++ b/packages/cli/src/__tests__/unit/jobrunner.spec.ts @@ -3,8 +3,7 @@ import { buildWrapper } from "@polywrap/test-env-js"; import { testCases } from "./jobrunner-test-cases"; import { JobRunner } from "../../lib"; import path from "path"; -import { ClientConfigBuilder } from "@polywrap/client-config-builder-js"; -import { IClientConfigBuilder } from "@polywrap/client-config-builder-js/build/IClientConfigBuilder"; +import { ClientConfigBuilder, IClientConfigBuilder } from "@polywrap/client-config-builder-js"; jest.setTimeout(200000); diff --git a/packages/cli/src/lib/option-parsers/wrapper-envs.ts b/packages/cli/src/lib/option-parsers/wrapper-envs.ts index bd436fa49f..60e118101b 100644 --- a/packages/cli/src/lib/option-parsers/wrapper-envs.ts +++ b/packages/cli/src/lib/option-parsers/wrapper-envs.ts @@ -29,8 +29,6 @@ export async function parseWrapperEnvsOption( } } - console.log(loadEnvironmentVariables(envs)) - const wrapperEnvs = loadEnvironmentVariables(envs) as Record< string, Record From 77cf007d2d1581e388368d57d1916148a4f307c6 Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Fri, 6 Jan 2023 18:02:47 +0400 Subject: [PATCH 20/22] debug --- .../js/client/src/__tests__/e2e/env.spec.ts | 31 ++++++----- .../js/client/src/__tests__/e2e/test-cases.ts | 52 ++++++++++--------- .../client/src/__tests__/e2e/wasm-as.spec.ts | 27 ++++++---- .../js/core-client/src/PolywrapCoreClient.ts | 51 ++++++++++++++++++ packages/js/wasm/src/imports.ts | 2 + 5 files changed, 116 insertions(+), 47 deletions(-) diff --git a/packages/js/client/src/__tests__/e2e/env.spec.ts b/packages/js/client/src/__tests__/e2e/env.spec.ts index 1273e308d8..9e3dd01b3e 100644 --- a/packages/js/client/src/__tests__/e2e/env.spec.ts +++ b/packages/js/client/src/__tests__/e2e/env.spec.ts @@ -27,13 +27,16 @@ describe("env", () => { const envPlugin = mockEnvPlugin(); const client = new PolywrapClient( { - resolver: RecursiveResolver.from({ - uri: implementationUri, - package: envPlugin, - }), - envs: [ + resolver: RecursiveResolver.from([ { uri: implementationUri, + package: envPlugin, + }, + { from: Uri.from("ens/hello.eth"), to: implementationUri }, + ]), + envs: [ + { + uri: Uri.from("ens/hello.eth"), env: { arg1: "10", }, @@ -43,14 +46,18 @@ describe("env", () => { { noDefaults: true } ); - const mockEnv = await client.invoke({ - uri: implementationUri, - method: "mockEnv", - }); + const wrapper = client.tryResolveUri({uri: Uri.from("ens/hello.eth")}); + + console.log("END"); - if (!mockEnv.ok) fail(mockEnv.error); - expect(mockEnv.value).toBeTruthy(); - expect(mockEnv.value).toMatchObject({ arg1: "10" }); + // const mockEnv = await client.invoke({ + // uri: Uri.from("ens/hello.eth"), + // method: "mockEnv", + // }); + + // if (!mockEnv.ok) fail(mockEnv.error); + // expect(mockEnv.value).toBeTruthy(); + // expect(mockEnv.value).toMatchObject({ arg1: "10" }); }); test("inline plugin env types", async () => { diff --git a/packages/js/client/src/__tests__/e2e/test-cases.ts b/packages/js/client/src/__tests__/e2e/test-cases.ts index 24a157c729..c2e5cd3344 100644 --- a/packages/js/client/src/__tests__/e2e/test-cases.ts +++ b/packages/js/client/src/__tests__/e2e/test-cases.ts @@ -999,30 +999,34 @@ export const runComplexEnvs = async ( client: PolywrapClient, wrapperUri: string ) => { - const methodRequireEnvResult = await client.invoke({ - uri: wrapperUri, - method: "methodRequireEnv", - args: { - arg: "string", - }, - }); - if (!methodRequireEnvResult.ok) fail(methodRequireEnvResult.error); - expect(methodRequireEnvResult.value).toEqual({ - str: "string", - optFilledStr: "optional string", - optStr: null, - number: 10, - optNumber: null, - bool: true, - optBool: null, - object: { - prop: "object string", - }, - optObject: null, - en: 0, - optEnum: null, - array: [32, 23], - }); + // const res = await client.tryResolveUri({uri: "ens/externalenv.polywrap.eth"}); + + // console.log(res); + + // const methodRequireEnvResult = await client.invoke({ + // uri: wrapperUri, + // method: "methodRequireEnv", + // args: { + // arg: "string", + // }, + // }); + // if (!methodRequireEnvResult.ok) fail(methodRequireEnvResult.error); + // expect(methodRequireEnvResult.value).toEqual({ + // str: "string", + // optFilledStr: "optional string", + // optStr: null, + // number: 10, + // optNumber: null, + // bool: true, + // optBool: null, + // object: { + // prop: "object string", + // }, + // optObject: null, + // en: 0, + // optEnum: null, + // array: [32, 23], + // }); const subinvokeEnvMethodResult = await client.invoke({ uri: wrapperUri, diff --git a/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts b/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts index a7d4419a71..b828fbc1f4 100644 --- a/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts +++ b/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts @@ -2,24 +2,25 @@ import * as TestCases from "./test-cases"; import { makeMemoryStoragePlugin } from "./memory-storage"; import { buildWrapper, - initTestEnvironment, - stopTestEnvironment, + // initTestEnvironment, + // stopTestEnvironment, runCLI, } from "@polywrap/test-env-js"; import { GetPathToTestWrappers } from "@polywrap/test-cases"; import { getClientWithEnsAndIpfs } from "../helpers/getClientWithEnsAndIpfs"; import { PolywrapClient } from "../../PolywrapClient"; +import { PolywrapClientConfig } from "@polywrap/client-config-builder-js"; jest.setTimeout(300000); describe("wasm-as test cases", () => { - beforeAll(async () => { - await initTestEnvironment(); - }); + // beforeAll(async () => { + // await initTestEnvironment(); + // }); - afterAll(async () => { - await stopTestEnvironment(); - }); + // afterAll(async () => { + // await stopTestEnvironment(); + // }); it("asyncify", async () => { const wrapperPath = `${GetPathToTestWrappers()}/wasm-as/asyncify`; @@ -319,11 +320,11 @@ describe("wasm-as test cases", () => { const wrapperUri = `fs/${wrapperPath}/build`; const externalWrapperUri = `fs/${externalWrapperPath}/build`; - await buildWrapper(externalWrapperPath, undefined, true); - await buildWrapper(wrapperPath, undefined, true); + // await buildWrapper(externalWrapperPath, undefined, true); + // await buildWrapper(wrapperPath, undefined, true); await TestCases.runComplexEnvs( - new PolywrapClient({ + new PolywrapClient({ envs: [ { uri: wrapperUri, @@ -352,6 +353,10 @@ describe("wasm-as test cases", () => { from: "ens/externalenv.polywrap.eth", to: externalWrapperUri, }, + { + from: "ens/hello.eth", + to: wrapperUri, + } ], }), wrapperUri diff --git a/packages/js/core-client/src/PolywrapCoreClient.ts b/packages/js/core-client/src/PolywrapCoreClient.ts index 76484f49fd..f195b30efe 100644 --- a/packages/js/core-client/src/PolywrapCoreClient.ts +++ b/packages/js/core-client/src/PolywrapCoreClient.ts @@ -252,15 +252,35 @@ export class PolywrapCoreClient implements CoreClient { public async invoke( options: InvokerOptions ): Promise> { + if (options.uri.authority === "fs") { + console.log("HELLO FS ", options.uri.uri); + } + if (options.uri.authority === "ens") { + console.log("HELLO ENS ", options.uri.uri); + } + try { const typedOptions: InvokeOptions = { ...options, uri: Uri.from(options.uri), }; + // console.log("URI", typedOptions.uri.uri); + if (options.uri.uri === "wrap://ens/externalenv.polywrap.eth") { + console.log(typedOptions.uri.uri); + } + const resolutionContext = options.resolutionContext ?? new UriResolutionContext(); + if (options.uri.uri === "wrap://ens/externalenv.polywrap.eth") { + console.log("CREATE", resolutionContext); + + await this.loadWrapper(typedOptions.uri, resolutionContext); + + throw new Error("STOP"); + } + const loadWrapperResult = await this.loadWrapper( typedOptions.uri, resolutionContext @@ -271,11 +291,21 @@ export class PolywrapCoreClient implements CoreClient { } const wrapper = loadWrapperResult.value; + if (options.uri.uri === "wrap://ens/externalenv.polywrap.eth") { + console.log("LOADED WRAPPER RESOLUTION CONTEXT", resolutionContext); + } + const resolutionPath = resolutionContext.getResolutionPath(); + if (options.uri.uri === "wrap://ens/externalenv.polywrap.eth") { + console.log(resolutionPath); + } const env = getEnvFromUriHistory( resolutionPath.length > 0 ? resolutionPath : [typedOptions.uri], this ); + if (options.uri.uri === "wrap://ens/externalenv.polywrap.eth") { + console.log(env); + } const invokeResult = await this.invokeWrapper({ env: env?.env, @@ -302,19 +332,31 @@ export class PolywrapCoreClient implements CoreClient { public async tryResolveUri( options: TryResolveUriOptions ): Promise> { + // console.log(options.uri.uri); + const uri = Uri.from(options.uri); const uriResolver = this.getResolver(); + if (uri.uri === "wrap://ens/externalenv.polywrap.eth") { + console.log(options.resolutionContext); + } + const resolutionContext = options.resolutionContext ?? new UriResolutionContext(); + // console.log("URI RESOLVER 0", resolutionContext.getResolutionPath()); + const response = await uriResolver.tryResolveUri( uri, this, resolutionContext ); + if (uri.uri === "wrap://ens/externalenv.polywrap.eth") { + console.log("URI RESOLVER 1", resolutionContext.getResolutionPath()); + } + return response; } @@ -336,6 +378,12 @@ export class PolywrapCoreClient implements CoreClient { resolutionContext?: IUriResolutionContext, options?: DeserializeManifestOptions ): Promise> { + console.log(uri.uri, resolutionContext); + // console.log(uri.uri); + // console.log("LOAD 0 RESOLUTION CONTEXT", resolutionContext) + if (uri.uri === "wrap://ens/externalenv.polywrap.eth") { + console.log("LOAD 0 CONTEXT", resolutionContext); + } if (!resolutionContext) { resolutionContext = new UriResolutionContext(); } @@ -344,6 +392,9 @@ export class PolywrapCoreClient implements CoreClient { uri, resolutionContext, }); + if (uri.uri === "wrap://ens/externalenv.polywrap.eth") { + console.log("LOAD 1 CONTEXT", resolutionContext); + } if (!result.ok) { if (result.error) { diff --git a/packages/js/wasm/src/imports.ts b/packages/js/wasm/src/imports.ts index 7861326896..61eb23ba00 100644 --- a/packages/js/wasm/src/imports.ts +++ b/packages/js/wasm/src/imports.ts @@ -33,6 +33,8 @@ export const createImports = (config: { const method = readString(memory.buffer, methodPtr, methodLen); const args = readBytes(memory.buffer, argsPtr, argsLen); + console.log(uri); + const result = await client.invoke({ uri: Uri.from(uri), method: method, From ccbbac3911d3d82cf9de7acb39b0cbd361db187f Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Fri, 6 Jan 2023 18:52:04 +0400 Subject: [PATCH 21/22] wip working --- packages/js/client/src/__tests__/e2e/wasm-as.spec.ts | 10 +++++----- packages/js/core-client/src/PolywrapCoreClient.ts | 11 +++++++---- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts b/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts index b828fbc1f4..b5fb9aa5ed 100644 --- a/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts +++ b/packages/js/client/src/__tests__/e2e/wasm-as.spec.ts @@ -341,7 +341,7 @@ describe("wasm-as test cases", () => { }, }, { - uri: externalWrapperUri, + uri: "ens/externalenv.polywrap.eth", env: { externalArray: [1, 2, 3], externalString: "iamexternal", @@ -353,10 +353,10 @@ describe("wasm-as test cases", () => { from: "ens/externalenv.polywrap.eth", to: externalWrapperUri, }, - { - from: "ens/hello.eth", - to: wrapperUri, - } + // { + // from: "ens/hello.eth", + // to: wrapperUri, + // } ], }), wrapperUri diff --git a/packages/js/core-client/src/PolywrapCoreClient.ts b/packages/js/core-client/src/PolywrapCoreClient.ts index f195b30efe..92ab430546 100644 --- a/packages/js/core-client/src/PolywrapCoreClient.ts +++ b/packages/js/core-client/src/PolywrapCoreClient.ts @@ -276,14 +276,17 @@ export class PolywrapCoreClient implements CoreClient { if (options.uri.uri === "wrap://ens/externalenv.polywrap.eth") { console.log("CREATE", resolutionContext); - await this.loadWrapper(typedOptions.uri, resolutionContext); + // @ts-ignore + await this.loadWrapper(typedOptions.uri, resolutionContext, 1); - throw new Error("STOP"); + // throw new Error("STOP"); } const loadWrapperResult = await this.loadWrapper( typedOptions.uri, - resolutionContext + resolutionContext, + // @ts-ignore + 2 ); if (!loadWrapperResult.ok) { @@ -378,7 +381,7 @@ export class PolywrapCoreClient implements CoreClient { resolutionContext?: IUriResolutionContext, options?: DeserializeManifestOptions ): Promise> { - console.log(uri.uri, resolutionContext); + console.log(options, uri.uri, resolutionContext); // console.log(uri.uri); // console.log("LOAD 0 RESOLUTION CONTEXT", resolutionContext) if (uri.uri === "wrap://ens/externalenv.polywrap.eth") { From ffebf2ec5ae100540b3cc7c34598b80a1a61dde7 Mon Sep 17 00:00:00 2001 From: Niraj Kamdar Date: Tue, 10 Jan 2023 18:54:39 +0400 Subject: [PATCH 22/22] fix: issue --- packages/js/client/src/PolywrapClient.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/js/client/src/PolywrapClient.ts b/packages/js/client/src/PolywrapClient.ts index 13c2e5f32a..a9a4900ab0 100644 --- a/packages/js/client/src/PolywrapClient.ts +++ b/packages/js/client/src/PolywrapClient.ts @@ -15,6 +15,7 @@ import { GetImplementationsOptions, InterfaceImplementations, InvokeResult, + IUriResolutionContext, IUriResolver, Uri, UriPackageOrWrapper, @@ -24,6 +25,7 @@ import { import { Result, ResultErr, ResultOk } from "@polywrap/result"; import { compareSignature, + DeserializeManifestOptions, ImportedModuleDefinition, WrapManifest, } from "@polywrap/wrap-manifest-types-js"; @@ -182,10 +184,12 @@ export class PolywrapClient< } @Tracer.traceMethod("PolywrapClient: loadWrapper") - public async loadWrapper( - uri: TUri + loadWrapper( + uri: Uri, + resolutionContext?: IUriResolutionContext, + options?: DeserializeManifestOptions ): Promise> { - return super.loadWrapper(sanitizeUri(uri)); + return super.loadWrapper(sanitizeUri(uri), resolutionContext, options); } @Tracer.traceMethod("PolywrapClient: validateConfig")