From f7f6a12a529452b72fd5f1692b772cf46f674fde Mon Sep 17 00:00:00 2001 From: pergerk Date: Thu, 26 Jun 2025 17:08:34 +0300 Subject: [PATCH 1/3] SP-6446: process server errors with code 500-599 (#518) * fix(fetchOffers): process server errors with code 500-599 * feat(fetchOffers): add retrying if error >500 * fix(fetchOffers): replace to native doWithReties * add(error.utils): add getErrorFunction to extend error message --- src/error.utils.ts | 29 +++++++++++++++++++++++++++++ src/services/fetchOffers.ts | 30 ++++++++++++++++-------------- 2 files changed, 45 insertions(+), 14 deletions(-) create mode 100644 src/error.utils.ts diff --git a/src/error.utils.ts b/src/error.utils.ts new file mode 100644 index 0000000..ac818db --- /dev/null +++ b/src/error.utils.ts @@ -0,0 +1,29 @@ +interface ApiErrorResponse { + response?: { + status?: number; + errors?: Array<{ message?: string }>; + }; +} + +const isApiError = (error: unknown): error is ApiErrorResponse => + error !== null && typeof error === 'object' && 'response' in error; + +export function getErrorMessage(error: unknown, baseMessage: string): string { + if (!isApiError(error)) { + return baseMessage; + } + + const { response } = error; + const status = response?.status; + + if (typeof status === 'number' && status >= 500) { + return `${baseMessage}: Server error - code = ${status}`; + } + + const errorMessage = response?.errors?.[0]?.message; + if (errorMessage) { + return `${baseMessage}: ${errorMessage}`; + } + + return baseMessage; +} diff --git a/src/services/fetchOffers.ts b/src/services/fetchOffers.ts index 7b02474..7b1873e 100644 --- a/src/services/fetchOffers.ts +++ b/src/services/fetchOffers.ts @@ -3,6 +3,8 @@ import { GraphQLClient } from 'graphql-request'; import { ErrorWithCustomMessage, formatDate, getObjectKey } from '../utils'; import getGqlHeaders from './gqlHeaders'; import { OfferType } from '@super-protocol/sdk-js'; +import doWithRetries from './doWithRetries'; +import { getErrorMessage } from '../error.utils'; export type FetchOffersParams = { backendUrl: string; @@ -54,26 +56,26 @@ export default async ( const headers = getGqlHeaders(params.accessToken); try { - const { result } = await sdk.Offers( - { - pagination: { - first: params.limit, - after: params.cursor, - sortDir: 'DESC', - sortBy: 'origins.createdDate', + const { result } = await doWithRetries(() => + sdk.Offers( + { + pagination: { + first: params.limit, + after: params.cursor, + sortDir: 'DESC', + sortBy: 'origins.createdDate', + }, + filter: { id: params.id, ids: params.ids }, }, - filter: { id: params.id, ids: params.ids }, - }, - headers, + headers, + ), ); return { list: result.page.edges?.map((item) => item.node) || [], cursor: result.page.pageInfo?.endCursor || '', }; - } catch (error: any) { - let message = 'Fetching offers error'; - if (error?.response?.errors[0]?.message) message += ': ' + error.response.errors[0].message; - throw ErrorWithCustomMessage(message, error); + } catch (error: unknown) { + throw ErrorWithCustomMessage(getErrorMessage(error, 'Fetching offers error'), error); } }; From 65b70a19f1af50a38cb1d0ae64627f8288df8e3f Mon Sep 17 00:00:00 2001 From: Abakar Kuliev Date: Thu, 26 Jun 2025 17:11:56 +0300 Subject: [PATCH 2/3] 0.11.7 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2f93b60..160f554 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@super-protocol/ctl", - "version": "0.11.6", + "version": "0.11.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@super-protocol/ctl", - "version": "0.11.6", + "version": "0.11.7", "license": "MIT", "dependencies": { "@amplitude/node": "^1.10.2", diff --git a/package.json b/package.json index 75fab72..38df7c6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@super-protocol/ctl", - "version": "0.11.6", + "version": "0.11.7", "description": "A tool for publishing values in a secure and reliable way.", "main": "./build/index.js", "type": "commonjs", From e033c65ce7e28e8dfd7c37971af2a88de66f7dd3 Mon Sep 17 00:00:00 2001 From: Alex Kheben Date: Fri, 4 Jul 2025 11:11:08 +0300 Subject: [PATCH 3/3] feat: #SP-6602 Update version to 0.11.8 and upgrade dependencies in package.json and package-lock.json (#520) --- package-lock.json | 48 +++++++++++++++++++++++++++++++---------------- package.json | 4 ++-- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 160f554..f2f328b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,19 @@ { "name": "@super-protocol/ctl", - "version": "0.11.7", + "version": "0.11.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@super-protocol/ctl", - "version": "0.11.7", + "version": "0.11.8", "license": "MIT", "dependencies": { "@amplitude/node": "^1.10.2", "@iarna/toml": "^2.2.5", "@super-protocol/distributed-secrets": "1.1.7", "@super-protocol/dto-js": "1.1.2", - "@super-protocol/sdk-js": "3.11.4", + "@super-protocol/sdk-js": "3.11.12", "@super-protocol/sp-files-addon": "^0.11.0", "@types/tar-stream": "^3.1.3", "axios": "1.6.2", @@ -5755,25 +5755,28 @@ } }, "node_modules/@super-protocol/pki-common": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@super-protocol/pki-common/-/pki-common-1.6.5.tgz", - "integrity": "sha512-r4/EcmwM4pl3/CNuQKz9BMTO/TKaO6aNlsG/CDboA8xArXNwuvq6XY7tfriAJ/5z87ck/WGIEvdoz4lNeaGSgg==", + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/@super-protocol/pki-common/-/pki-common-1.6.6.tgz", + "integrity": "sha512-H38l0pUqOaGjfZUtFePA8h00vLP9JCEUoPv2qfPVdpIS0Uj2zSdg9mUcb0RCuE1HlBVuKABRb40TkoQ/UPr5wA==", + "license": "ISC", "dependencies": { + "@types/node-forge": "^1.3.11", "hi-base32": "^0.5.1", "node-forge": "^1.3.1" } }, "node_modules/@super-protocol/sdk-js": { - "version": "3.11.4", - "resolved": "https://registry.npmjs.org/@super-protocol/sdk-js/-/sdk-js-3.11.4.tgz", - "integrity": "sha512-woqmqVFjAT0iN7rECQIxkuMcdw4Bjoh+kO61Iu1qiNmXjXjDCFnFIw3dDSLi8qXSgWo89yEhYRhUSM2VYwPSoA==", + "version": "3.11.12", + "resolved": "https://registry.npmjs.org/@super-protocol/sdk-js/-/sdk-js-3.11.12.tgz", + "integrity": "sha512-Tz+9BDasTQtf98auzkXIZkcby9Kw3KmXI8JO7ENRMWebKZjxoSfypTg7iUwCJVuoZkjjXQSDvtSuvsEsu4sRzQ==", + "license": "MIT", "dependencies": { "@aws-sdk/client-s3": "^3.470.0", "@fidm/x509": "^1.2.1", "@msgpack/msgpack": "^2.8.0", "@sinclair/typebox": "0.33.17", - "@super-protocol/dto-js": "1.1.10", - "@super-protocol/pki-common": "1.6.5", + "@super-protocol/dto-js": "1.2.0", + "@super-protocol/pki-common": "1.6.6", "@super-protocol/uplink-nodejs": "^1.2.20", "asn1js": "^3.0.5", "axios": "^1.5.1", @@ -5801,12 +5804,14 @@ "node_modules/@super-protocol/sdk-js/node_modules/@sinclair/typebox": { "version": "0.33.17", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.33.17.tgz", - "integrity": "sha512-75232GRx3wp3P7NP+yc4nRK3XUAnaQShxTAzapgmQrgs0QvSq0/mOJGoZXRpH15cFCKyys+4laCPbBselqJ5Ag==" + "integrity": "sha512-75232GRx3wp3P7NP+yc4nRK3XUAnaQShxTAzapgmQrgs0QvSq0/mOJGoZXRpH15cFCKyys+4laCPbBselqJ5Ag==", + "license": "MIT" }, "node_modules/@super-protocol/sdk-js/node_modules/@super-protocol/dto-js": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@super-protocol/dto-js/-/dto-js-1.1.10.tgz", - "integrity": "sha512-0FvYsqIWpzHDN+4W/CNvmReaQy/w0llDgjd4yILxFbdxI7szlL/W+BAkzgj/REWf3J3EBP3XmRBTN+vwVqO1TQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@super-protocol/dto-js/-/dto-js-1.2.0.tgz", + "integrity": "sha512-1SJg697WsdTpPSBDo/YwAaasrZTPqc+Ww+LTtUNkv0x2PL+9KcQ1H727iF3TB5bF+DzR5AFtyHwT2yqKdSLQyQ==", + "license": "MIT", "peerDependencies": { "@sinclair/typebox": "^0.33.17", "iso-639-3": "^2.2.0" @@ -6072,6 +6077,15 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.96.tgz", "integrity": "sha512-84iSqGXoO+Ha16j8pRZ/L90vDMKX04QTYMTfYeE1WrjWaZXuchBehGUZEpNgx7JnmlrIHdnABmpjrQjhCnNldQ==" }, + "node_modules/@types/node-forge": { + "version": "1.3.12", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.12.tgz", + "integrity": "sha512-a0ToKlRVnUw3aXKQq2F+krxZKq7B8LEQijzPn5RdFAMatARD2JX9o8FBpMXOOrjob0uc13aN+V/AXniOXW4d9A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/parse-json": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", @@ -9555,7 +9569,8 @@ "node_modules/hi-base32": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/hi-base32/-/hi-base32-0.5.1.tgz", - "integrity": "sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==" + "integrity": "sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==", + "license": "MIT" }, "node_modules/hmac-drbg": { "version": "1.0.1", @@ -11696,6 +11711,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" } diff --git a/package.json b/package.json index 38df7c6..cb356cf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@super-protocol/ctl", - "version": "0.11.7", + "version": "0.11.8", "description": "A tool for publishing values in a secure and reliable way.", "main": "./build/index.js", "type": "commonjs", @@ -36,7 +36,7 @@ "@iarna/toml": "^2.2.5", "@super-protocol/distributed-secrets": "1.1.7", "@super-protocol/dto-js": "1.1.2", - "@super-protocol/sdk-js": "3.11.4", + "@super-protocol/sdk-js": "3.11.12", "@super-protocol/sp-files-addon": "^0.11.0", "@types/tar-stream": "^3.1.3", "axios": "1.6.2",