From 9b9a507a87018638fb9febe6544993682dff3cef Mon Sep 17 00:00:00 2001 From: LuizAsFight Date: Tue, 31 Oct 2023 18:40:44 -0300 Subject: [PATCH 01/13] fix: provider connect method accept options --- packages/providers/src/provider.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/providers/src/provider.ts b/packages/providers/src/provider.ts index 547b36d83aa..b024e67c194 100644 --- a/packages/providers/src/provider.ts +++ b/packages/providers/src/provider.ts @@ -243,7 +243,7 @@ export default class Provider { * @param options - Additional options for the provider * @hidden */ - protected constructor( + constructor( /** GraphQL endpoint of the Fuel node */ public url: string, public options: ProviderOptions = {} @@ -310,9 +310,9 @@ export default class Provider { /** * Updates the URL for the provider and fetches the consensus parameters for the new URL, if needed. */ - async connect(url: string) { + async connect(url: string, options?: ProviderOptions) { this.url = url; - this.operations = this.createOperations(url); + this.operations = this.createOperations(url, options); await this.fetchChainAndNodeInfo(); } @@ -352,7 +352,7 @@ export default class Provider { * @param options - Additional options for the provider * @returns The operation SDK object */ - private createOperations(url: string, options: ProviderOptions = {}) { + createOperations(url: string, options: ProviderOptions = {}) { this.url = url; const gqlClient = new GraphQLClient(url, options.fetch ? { fetch: options.fetch } : undefined); return getOperationsSdk(gqlClient); From 2dc4d17bd448f2fde4f53ea845da2cb8480975c8 Mon Sep 17 00:00:00 2001 From: LuizAsFight Date: Tue, 31 Oct 2023 18:41:42 -0300 Subject: [PATCH 02/13] chore: release --- .github/workflows/pr-release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-release.yaml b/.github/workflows/pr-release.yaml index 9b48fc2352a..34ad25146b1 100644 --- a/.github/workflows/pr-release.yaml +++ b/.github/workflows/pr-release.yaml @@ -8,7 +8,7 @@ jobs: name: "Release PR to npm" runs-on: ubuntu-latest # comment out if:false to enable release PR to npm - if: false + # if: false permissions: write-all steps: - name: Checkout From aa3523e51587eb381f69990b6f7e01e2c8d25642 Mon Sep 17 00:00:00 2001 From: Dhaiwat Date: Fri, 3 Nov 2023 13:34:31 +0530 Subject: [PATCH 03/13] save `providerOptions` --- packages/providers/src/provider.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/providers/src/provider.ts b/packages/providers/src/provider.ts index b024e67c194..bf049b84840 100644 --- a/packages/providers/src/provider.ts +++ b/packages/providers/src/provider.ts @@ -234,6 +234,8 @@ export default class Provider { private static chainInfoCache: ChainInfoCache = {}; private static nodeInfoCache: NodeInfoCache = {}; + + private providerOptions: ProviderOptions = {} /** * Constructor to initialize a Provider. @@ -259,6 +261,7 @@ export default class Provider { */ static async create(url: string, options: ProviderOptions = {}) { const provider = new Provider(url, options); + provider.providerOptions = options; await provider.fetchChainAndNodeInfo(); return provider; } @@ -312,7 +315,7 @@ export default class Provider { */ async connect(url: string, options?: ProviderOptions) { this.url = url; - this.operations = this.createOperations(url, options); + this.operations = this.createOperations(url, options || this.providerOptions); await this.fetchChainAndNodeInfo(); } From d5955a2e0362cd6f03da20f4fc60862211f94f58 Mon Sep 17 00:00:00 2001 From: Dhaiwat Date: Fri, 3 Nov 2023 13:35:16 +0530 Subject: [PATCH 04/13] add changeset --- .changeset/khaki-years-compare.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/khaki-years-compare.md diff --git a/.changeset/khaki-years-compare.md b/.changeset/khaki-years-compare.md new file mode 100644 index 00000000000..1db3ae13ea6 --- /dev/null +++ b/.changeset/khaki-years-compare.md @@ -0,0 +1,5 @@ +--- +"@fuel-ts/providers": patch +--- + +You can now pass in `ProviderOptions` to `Provider.connect` From 7559b0922642725048c7df2af77bdea00766c1ea Mon Sep 17 00:00:00 2001 From: Dhaiwat Date: Fri, 3 Nov 2023 13:40:50 +0530 Subject: [PATCH 05/13] fix lint issue --- packages/providers/src/provider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/providers/src/provider.ts b/packages/providers/src/provider.ts index bf049b84840..571757b0459 100644 --- a/packages/providers/src/provider.ts +++ b/packages/providers/src/provider.ts @@ -234,7 +234,7 @@ export default class Provider { private static chainInfoCache: ChainInfoCache = {}; private static nodeInfoCache: NodeInfoCache = {}; - + private providerOptions: ProviderOptions = {} /** From 208a4e13a74676ef67e903fd1a3f146b72a04eda Mon Sep 17 00:00:00 2001 From: Dhaiwat Date: Fri, 3 Nov 2023 13:48:07 +0530 Subject: [PATCH 06/13] fix lint error --- packages/providers/src/provider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/providers/src/provider.ts b/packages/providers/src/provider.ts index 571757b0459..2d6d26c0ec6 100644 --- a/packages/providers/src/provider.ts +++ b/packages/providers/src/provider.ts @@ -235,7 +235,7 @@ export default class Provider { private static chainInfoCache: ChainInfoCache = {}; private static nodeInfoCache: NodeInfoCache = {}; - private providerOptions: ProviderOptions = {} + private providerOptions: ProviderOptions = {}; /** * Constructor to initialize a Provider. From 74fcceb76dd44b37e989709b81053624ab5b0225 Mon Sep 17 00:00:00 2001 From: Dhaiwat Date: Sat, 4 Nov 2023 00:34:38 +0530 Subject: [PATCH 07/13] revert constructor modification --- packages/providers/src/provider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/providers/src/provider.ts b/packages/providers/src/provider.ts index 2d6d26c0ec6..9f4a28f1834 100644 --- a/packages/providers/src/provider.ts +++ b/packages/providers/src/provider.ts @@ -245,7 +245,7 @@ export default class Provider { * @param options - Additional options for the provider * @hidden */ - constructor( + protected constructor( /** GraphQL endpoint of the Fuel node */ public url: string, public options: ProviderOptions = {} From 19a569f06ba6982b5baaf11a0409cbfccb33870e Mon Sep 17 00:00:00 2001 From: Dhaiwat Date: Sat, 4 Nov 2023 00:43:48 +0530 Subject: [PATCH 08/13] Update provider.ts --- packages/providers/src/provider.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/providers/src/provider.ts b/packages/providers/src/provider.ts index 9f4a28f1834..8c6dbd83486 100644 --- a/packages/providers/src/provider.ts +++ b/packages/providers/src/provider.ts @@ -235,8 +235,6 @@ export default class Provider { private static chainInfoCache: ChainInfoCache = {}; private static nodeInfoCache: NodeInfoCache = {}; - private providerOptions: ProviderOptions = {}; - /** * Constructor to initialize a Provider. * @@ -261,7 +259,6 @@ export default class Provider { */ static async create(url: string, options: ProviderOptions = {}) { const provider = new Provider(url, options); - provider.providerOptions = options; await provider.fetchChainAndNodeInfo(); return provider; } @@ -315,7 +312,7 @@ export default class Provider { */ async connect(url: string, options?: ProviderOptions) { this.url = url; - this.operations = this.createOperations(url, options || this.providerOptions); + this.operations = this.createOperations(url, options ?? this.options); await this.fetchChainAndNodeInfo(); } From 7219a2c3c792cb884b69c1a784369aab40847678 Mon Sep 17 00:00:00 2001 From: Dhaiwat Date: Sat, 4 Nov 2023 00:45:15 +0530 Subject: [PATCH 09/13] Update pr-release.yaml --- .github/workflows/pr-release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-release.yaml b/.github/workflows/pr-release.yaml index 34ad25146b1..9b48fc2352a 100644 --- a/.github/workflows/pr-release.yaml +++ b/.github/workflows/pr-release.yaml @@ -8,7 +8,7 @@ jobs: name: "Release PR to npm" runs-on: ubuntu-latest # comment out if:false to enable release PR to npm - # if: false + if: false permissions: write-all steps: - name: Checkout From 53c2fe774ff4bd988d065db9efe294599aef5c40 Mon Sep 17 00:00:00 2001 From: Dhaiwat Date: Sat, 4 Nov 2023 00:49:10 +0530 Subject: [PATCH 10/13] Update provider.ts --- packages/providers/src/provider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/providers/src/provider.ts b/packages/providers/src/provider.ts index 8c6dbd83486..880ab356108 100644 --- a/packages/providers/src/provider.ts +++ b/packages/providers/src/provider.ts @@ -352,7 +352,7 @@ export default class Provider { * @param options - Additional options for the provider * @returns The operation SDK object */ - createOperations(url: string, options: ProviderOptions = {}) { + private createOperations(url: string, options: ProviderOptions = {}) { this.url = url; const gqlClient = new GraphQLClient(url, options.fetch ? { fetch: options.fetch } : undefined); return getOperationsSdk(gqlClient); From ad0ff8dbed4c5ba5edb8c843393180f18a85d912 Mon Sep 17 00:00:00 2001 From: Anderson Arboleya Date: Sun, 5 Nov 2023 07:29:07 -0300 Subject: [PATCH 11/13] Default options initialization is already handled in `create` method --- packages/providers/src/provider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/providers/src/provider.ts b/packages/providers/src/provider.ts index 880ab356108..b6e99c9651a 100644 --- a/packages/providers/src/provider.ts +++ b/packages/providers/src/provider.ts @@ -246,7 +246,7 @@ export default class Provider { protected constructor( /** GraphQL endpoint of the Fuel node */ public url: string, - public options: ProviderOptions = {} + public options: ProviderOptions ) { this.operations = this.createOperations(url, options); this.cache = options.cacheUtxo ? new MemoryCache(options.cacheUtxo) : undefined; From f42366aba01522dc398787ecd7886f207f5cda8c Mon Sep 17 00:00:00 2001 From: Anderson Arboleya Date: Sun, 5 Nov 2023 07:29:47 -0300 Subject: [PATCH 12/13] Ensuring connect `options` override works as expected --- packages/providers/test/provider.test.ts | 32 ++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/packages/providers/test/provider.test.ts b/packages/providers/test/provider.test.ts index f87a3393688..42f06b5da33 100644 --- a/packages/providers/test/provider.test.ts +++ b/packages/providers/test/provider.test.ts @@ -241,6 +241,38 @@ describe('Provider', () => { const provider = await Provider.create(providerUrl, { fetch: getCustomFetch('getVersion', { nodeInfo: { nodeVersion: '0.30.0' } }), }); + + expect(await provider.getVersion()).toEqual('0.30.0'); + }); + + it('can accept options override in connect method', async () => { + const providerUrl = FUEL_NETWORK_URL; + + /** + * Mocking and initializing Provider with an invalid fetcher just + * to ensure it'll be properly overriden in `connect` method below + */ + const fetchChainAndNodeInfo = jest + .spyOn(Provider.prototype, 'fetchChainAndNodeInfo') + .mockImplementation(); + + const provider = await Provider.create(providerUrl, { + fetch: () => { + throw new Error('This should never happen'); + }, + }); + + expect(fetchChainAndNodeInfo).toHaveBeenCalledTimes(1); + + /** + * Restore mock and call connect with a proper fetch override + */ + fetchChainAndNodeInfo.mockRestore(); + + await provider.connect(providerUrl, { + fetch: getCustomFetch('getVersion', { nodeInfo: { nodeVersion: '0.30.0' } }), + }); + expect(await provider.getVersion()).toEqual('0.30.0'); }); From 590d16f077833928658ba9a186bb4b7a4e8b7113 Mon Sep 17 00:00:00 2001 From: Anderson Arboleya Date: Sun, 5 Nov 2023 07:57:52 -0300 Subject: [PATCH 13/13] Rolling back default options initializer (required for custom providers) --- packages/providers/src/provider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/providers/src/provider.ts b/packages/providers/src/provider.ts index b6e99c9651a..880ab356108 100644 --- a/packages/providers/src/provider.ts +++ b/packages/providers/src/provider.ts @@ -246,7 +246,7 @@ export default class Provider { protected constructor( /** GraphQL endpoint of the Fuel node */ public url: string, - public options: ProviderOptions + public options: ProviderOptions = {} ) { this.operations = this.createOperations(url, options); this.cache = options.cacheUtxo ? new MemoryCache(options.cacheUtxo) : undefined;