From c5e3a4e8f39ef0eba8274fd6e2ccb5c9734c5239 Mon Sep 17 00:00:00 2001 From: Jacob Date: Wed, 13 Mar 2024 00:54:45 +0800 Subject: [PATCH 1/4] support specify apikey for auth service request --- packages/network-support/src/orderManager.ts | 6 +++++- packages/network-support/src/utils/query.ts | 10 +++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/network-support/src/orderManager.ts b/packages/network-support/src/orderManager.ts index 9219c131..6d4e39bf 100644 --- a/packages/network-support/src/orderManager.ts +++ b/packages/network-support/src/orderManager.ts @@ -28,6 +28,7 @@ export enum ResponseFormat { type Options = { logger: Logger; authUrl: string; + apikey?: string; fallbackServiceUrl?: string; projectId: string; projectType: ProjectType; @@ -56,6 +57,7 @@ export class OrderManager { private scoreManager: ScoreManager; private authUrl: string; + private apikey?: string; private projectId: string; private interval = 300_000; private minScore = 0; @@ -68,6 +70,7 @@ export class OrderManager { constructor(options: Options) { const { authUrl, + apikey, fallbackServiceUrl, projectId, logger, @@ -78,6 +81,7 @@ export class OrderManager { timeout = 60000, } = options; this.authUrl = authUrl; + this.apikey = apikey; this.projectId = projectId; this.projectType = projectType; this.logger = logger; @@ -133,7 +137,7 @@ export class OrderManager { private async refreshAgreements() { try { - const orders = await fetchOrders(this.authUrl, this.projectId, this.projectType); + const orders = await fetchOrders(this.authUrl, this.projectId, this.projectType, this.apikey); if (orders.agreements) { this._agreements = orders.agreements; } diff --git a/packages/network-support/src/utils/query.ts b/packages/network-support/src/utils/query.ts index 8883158c..140a6abd 100644 --- a/packages/network-support/src/utils/query.ts +++ b/packages/network-support/src/utils/query.ts @@ -61,9 +61,17 @@ interface AgreementsResponse { plans: FlexPlanOrder[]; } -export async function fetchOrders(authUrl: string, projectId: string, projectType: ProjectType) { +export async function fetchOrders( + authUrl: string, + projectId: string, + projectType: ProjectType, + apikey?: string +) { try { const agreementsURL = new URL(`/orders/${projectType}/${projectId}`, authUrl); + if (apikey) { + agreementsURL.searchParams.append('apikey', apikey); + } return await GET(agreementsURL.toString()); } catch { return { agreements: [], plans: [] }; From 0f199264add045641d75e2d006093d15d40687ad Mon Sep 17 00:00:00 2001 From: Ian He <39037239+ianhe8x@users.noreply.github.com> Date: Thu, 14 Mar 2024 17:53:39 +1300 Subject: [PATCH 2/4] improve logging --- packages/network-support/src/fetch.ts | 6 ++++-- packages/network-support/src/orderManager.ts | 6 +++++- packages/network-support/test/fetch.test.ts | 18 ++++++++++-------- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/packages/network-support/src/fetch.ts b/packages/network-support/src/fetch.ts index 203adc23..b1b0b3cc 100644 --- a/packages/network-support/src/fetch.ts +++ b/packages/network-support/src/fetch.ts @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import { OrderManager } from './orderManager'; -import { customFetch, generateUniqueId } from './utils'; +import { customFetch, generateUniqueId, Logger } from './utils'; import { ChannelState, OrderType } from './types'; import { ScoreType } from './scoreManager'; import { Base64 } from 'js-base64'; @@ -32,7 +32,8 @@ export class FetchError extends Error { export function createFetch( orderManager: OrderManager, - maxRetries = 5 + maxRetries = 5, + logger?: Logger ): (init: RequestInit) => Promise { let retries = 0; return async function fetch(init: RequestInit): Promise { @@ -84,6 +85,7 @@ export function createFetch( text: () => undefined, } as unknown as Response; } catch (e) { + logger?.warn(e); if (retries < maxRetries) { orderManager.updateScore(runner, ScoreType.RPC); retries += 1; diff --git a/packages/network-support/src/orderManager.ts b/packages/network-support/src/orderManager.ts index 9219c131..4a1787d8 100644 --- a/packages/network-support/src/orderManager.ts +++ b/packages/network-support/src/orderManager.ts @@ -263,7 +263,11 @@ export class OrderManager { return [body, state, '']; } default: - throw new Error('invalid X-Indexer-Response-Format'); + if (typeof payload === 'object' && (payload as any).code) { + throw new Error(JSON.stringify(payload)); + } else { + throw new Error('invalid X-Indexer-Response-Format'); + } } } diff --git a/packages/network-support/test/fetch.test.ts b/packages/network-support/test/fetch.test.ts index c4254c0a..1fb27782 100644 --- a/packages/network-support/test/fetch.test.ts +++ b/packages/network-support/test/fetch.test.ts @@ -20,14 +20,16 @@ describe('eth provider', () => { logger: mockLogger, responseFormat: ResponseFormat.Wrapped, }); - const fetch = createFetch(orderManager); + const fetch = createFetch(orderManager, 3, mockLogger); - const res = await fetch({ - body: JSON.stringify({ jsonrpc: '2.0', method: 'eth_blockNumber', params: [], id: 1 }), - headers: { 'Content-Type': 'application/json' }, - method: 'post', - }); - expect(res).toBeTruthy(); - expect(await res.json()).toBeTruthy(); + for (let i = 0; i < 10; i++) { + const res = await fetch({ + body: JSON.stringify({ jsonrpc: '2.0', method: 'eth_blockNumber', params: [], id: 1 }), + headers: { 'Content-Type': 'application/json' }, + method: 'post', + }); + expect(res).toBeTruthy(); + expect(await res.json()).toBeTruthy(); + } }, 30000); }); From 6373c318d8af5e9d760f80a209b81c3929c2e6a2 Mon Sep 17 00:00:00 2001 From: Jacob Date: Fri, 15 Mar 2024 11:16:00 +0800 Subject: [PATCH 3/4] Add apikey to auth-service requests --- packages/network-support/src/orderManager.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/network-support/src/orderManager.ts b/packages/network-support/src/orderManager.ts index 50b17d84..031a5883 100644 --- a/packages/network-support/src/orderManager.ts +++ b/packages/network-support/src/orderManager.ts @@ -203,6 +203,7 @@ export class OrderManager { const signedState = await POST(tokenUrl.toString(), { deployment: this.projectId, channelId, + apikey: this.apikey, }); this.logger?.debug(`request new state signature for runner ${runner} success`); @@ -278,7 +279,10 @@ export class OrderManager { async syncChannelState(state: ChannelState): Promise { try { const stateUrl = new URL('/channel/state', this.authUrl); - const res = await POST<{ consumerSign: string }>(stateUrl.toString(), state); + const res = await POST<{ consumerSign: string }>(stateUrl.toString(), { + ...state, + apikey: this.apikey, + }); if (res.consumerSign) { this.logger?.debug(`syncChannelState succeed`); From dbee5d8e03a60036da91b8f7d835aefa9f51570a Mon Sep 17 00:00:00 2001 From: Jacob Date: Fri, 15 Mar 2024 11:56:43 +0800 Subject: [PATCH 4/4] [release] @subql/network-support@1.1.0 --- packages/network-support/CHANGELOG.md | 5 ++++- packages/network-support/package.json | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/network-support/CHANGELOG.md b/packages/network-support/CHANGELOG.md index fd60007f..ece6fbae 100644 --- a/packages/network-support/CHANGELOG.md +++ b/packages/network-support/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.1.0] 2024-03-15 + ## [1.0.0] 2024-03-07 ## [0.2.0] 2024-01-12 @@ -19,7 +21,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - It's a internal library. -[unreleased]: https://github.com/subquery/network-support/compare/v1.0.0...HEAD +[unreleased]: https://github.com/subquery/network-support/compare/v1.1.0...HEAD +[1.1.0]: https://github.com/subquery/network-support/releases/tag/v1.1.0 [1.0.0]: https://github.com/subquery/network-support/releases/tag/v1.0.0 [0.2.0]: https://github.com/subquery/network-support/releases/tag/v0.2.0 [0.1.1]: https://github.com/subquery/network-support/releases/tag/v0.1.1 diff --git a/packages/network-support/package.json b/packages/network-support/package.json index ec6c6080..1e2f62c2 100644 --- a/packages/network-support/package.json +++ b/packages/network-support/package.json @@ -1,6 +1,6 @@ { "name": "@subql/network-support", - "version": "1.0.2", + "version": "1.1.0", "main": "dist/index.js", "author": "SubQuery Pte Limited", "license": "Apache-2.0",