Skip to content

Commit df77cab

Browse files
Merge pull request #1383 from input-output-hk/fix/resubmit-error-handling
Fix/resubmit error handling
2 parents cbd23f3 + 24bc42c commit df77cab

File tree

14 files changed

+49
-27
lines changed

14 files changed

+49
-27
lines changed

compose/common.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ services:
187187
healthcheck:
188188
retries: 2000
189189
ports:
190-
- ${OGMIOS_PORT:-1337}:1337
190+
- ${OGMIOS_PORT:-1340}:1337
191191
restart: on-failure
192192
volumes:
193193
- node-ipc:/ipc
@@ -241,7 +241,7 @@ services:
241241
timeout: 5s
242242
retries: 10
243243
ports:
244-
- ${POSTGRES_PORT:-5432}:5432
244+
- ${POSTGRES_PORT:-5435}:5432
245245
restart: on-failure
246246
secrets:
247247
- postgres_db_db_sync

packages/cardano-services-client/test/HttpProvider.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* eslint-disable sonarjs/cognitive-complexity */
22
/* eslint-disable sonarjs/no-duplicate-string */
3+
import { CardanoNodeUtil, Provider, ProviderError, ProviderFailure } from '@cardano-sdk/core';
34
import { HttpProviderConfig, createHttpProvider } from '../src';
4-
import { Provider, ProviderError, ProviderFailure } from '@cardano-sdk/core';
55
import { Server } from 'http';
66
import { fromSerializableObject, toSerializableObject } from '@cardano-sdk/util';
77
import { getPort } from 'get-port-please';
@@ -115,7 +115,7 @@ describe('createHttpProvider', () => {
115115
await provider.noArgsEmptyReturn();
116116
throw new Error('Expected to throw');
117117
} catch (error) {
118-
if (error instanceof ProviderError) {
118+
if (CardanoNodeUtil.isProviderError(error)) {
119119
expect(error.reason).toBe(ProviderFailure.ConnectionFailure);
120120
} else {
121121
throw new TypeError('Invalid error type');
@@ -136,7 +136,7 @@ describe('createHttpProvider', () => {
136136
await provider.noArgsEmptyReturn();
137137
throw new Error('Expected to throw');
138138
} catch (error) {
139-
if (error instanceof ProviderError) {
139+
if (CardanoNodeUtil.isProviderError(error)) {
140140
expect(error.reason).toBe(ProviderFailure.ConnectionFailure);
141141
} else {
142142
throw new TypeError('Invalid error type');
@@ -160,7 +160,7 @@ describe('createHttpProvider', () => {
160160
await provider.noArgsEmptyReturn();
161161
throw new Error('Expected to throw');
162162
} catch (error) {
163-
if (error instanceof ProviderError) {
163+
if (CardanoNodeUtil.isProviderError(error)) {
164164
expect(error.innerError).toEqual(errorJson);
165165
} else {
166166
throw new TypeError('Expected ProviderError');

packages/cardano-services/src/Asset/CardanoTokenRegistry.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1-
import { Asset, Cardano, Milliseconds, ProviderError, ProviderFailure, Seconds } from '@cardano-sdk/core';
1+
import {
2+
Asset,
3+
Cardano,
4+
CardanoNodeUtil,
5+
Milliseconds,
6+
ProviderError,
7+
ProviderFailure,
8+
Seconds
9+
} from '@cardano-sdk/core';
210
import { InMemoryCache } from '../InMemoryCache';
311
import { Logger } from 'ts-log';
412
import { TokenMetadataService } from './types';
@@ -38,7 +46,7 @@ export const toCoreTokenMetadata = (record: TokenMetadataServiceRecord): Asset.T
3846
) as Asset.TokenMetadata;
3947

4048
const toProviderError = (error: unknown, details: string) => {
41-
if (error instanceof ProviderError) return error;
49+
if (CardanoNodeUtil.isProviderError(error)) return error;
4250

4351
const message = error instanceof Error ? `${error.message} ` : '';
4452

packages/cardano-services/src/Asset/DbSyncAssetProvider/DbSyncAssetProvider.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {
22
Asset,
33
AssetProvider,
44
Cardano,
5+
CardanoNodeUtil,
56
GetAssetArgs,
67
GetAssetsArgs,
78
ProviderError,
@@ -65,7 +66,7 @@ export class DbSyncAssetProvider extends DbSyncProvider() implements AssetProvid
6566
try {
6667
assetInfo.tokenMetadata = (await this.#dependencies.tokenMetadataService.getTokenMetadata([assetId]))[0];
6768
} catch (error) {
68-
if (error instanceof ProviderError && error.reason === ProviderFailure.Unhealthy) {
69+
if (CardanoNodeUtil.isProviderError(error) && error.reason === ProviderFailure.Unhealthy) {
6970
this.logger.error(`Failed to fetch token metadata for asset with ${assetId} due to: ${error.message}`);
7071
assetInfo.tokenMetadata = undefined;
7172
} else {
@@ -92,7 +93,7 @@ export class DbSyncAssetProvider extends DbSyncProvider() implements AssetProvid
9293
try {
9394
tokenMetadataList = await this.#dependencies.tokenMetadataService.getTokenMetadata(assetIds);
9495
} catch (error) {
95-
if (error instanceof ProviderError && error.reason === ProviderFailure.Unhealthy) {
96+
if (CardanoNodeUtil.isProviderError(error) && error.reason === ProviderFailure.Unhealthy) {
9697
this.logger.error(`Failed to fetch token metadata for assets ${assetIds} due to: ${error.message}`);
9798
tokenMetadataList = Array.from({ length: assetIds.length });
9899
} else {

packages/cardano-services/src/Asset/TypeormAssetProvider/TypeormAssetProvider.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {
22
Asset,
33
AssetProvider,
44
Cardano,
5+
CardanoNodeUtil,
56
GetAssetArgs,
67
GetAssetsArgs,
78
ProviderError,
@@ -81,7 +82,7 @@ export class TypeormAssetProvider extends TypeormProvider implements AssetProvid
8182
try {
8283
tokenMetadataList = await this.#dependencies.tokenMetadataService.getTokenMetadata(assetIds);
8384
} catch (error) {
84-
if (error instanceof ProviderError && error.reason === ProviderFailure.Unhealthy) {
85+
if (CardanoNodeUtil.isProviderError(error) && error.reason === ProviderFailure.Unhealthy) {
8586
this.logger.error(`Failed to fetch token metadata for assets ${assetIds} due to: ${error.message}`);
8687
tokenMetadataList = Array.from({ length: assetIds.length });
8788
} else {

packages/cardano-services/src/Http/HttpService.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import * as OpenApiValidator from 'express-openapi-validator';
22
import {
3+
CardanoNodeUtil,
34
HealthCheckResponse,
45
HttpProviderConfigPaths,
56
Provider,
@@ -43,7 +44,7 @@ export abstract class HttpService extends RunnableModule {
4344
body = await this.healthCheck();
4445
} catch (error) {
4546
logger.error(error);
46-
body = error instanceof ProviderError ? error.message : 'Unknown error';
47+
body = CardanoNodeUtil.isProviderError(error) ? error.message : 'Unknown error';
4748
res.statusCode = 500;
4849
}
4950
res.send(body);
@@ -92,7 +93,7 @@ export abstract class HttpService extends RunnableModule {
9293
} catch (error) {
9394
logger.error(error);
9495

95-
if (error instanceof ProviderError) {
96+
if (CardanoNodeUtil.isProviderError(error)) {
9697
const code = providerFailureToStatusCodeMap[error.reason];
9798

9899
return HttpServer.sendJSON(res, error, code);

packages/cardano-services/src/PgBoss/stakePoolMetadataHandler.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Cardano, NotImplementedError, ProviderError, ProviderFailure } from '@cardano-sdk/core';
1+
import { Cardano, CardanoNodeUtil, NotImplementedError, ProviderFailure } from '@cardano-sdk/core';
22
import { CustomError } from 'ts-custom-error';
33
import { DataSource, MoreThan } from 'typeorm';
44
import { Hash32ByteBase16 } from '@cardano-sdk/crypto';
@@ -73,7 +73,7 @@ export const attachExtendedMetadata = (
7373
if (extMetadata instanceof CustomError) {
7474
const error = extMetadata;
7575

76-
if (error instanceof ProviderError && error.reason === ProviderFailure.NotFound) {
76+
if (CardanoNodeUtil.isProviderError(error) && error.reason === ProviderFailure.NotFound) {
7777
return { ...metadataWithoutExt!, ext: null };
7878
}
7979
return metadataWithoutExt;

packages/cardano-services/src/StakePool/DbSyncStakePoolProvider/DbSyncStakePoolProvider.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
} from './util';
99
import {
1010
Cardano,
11+
CardanoNodeUtil,
1112
Paginated,
1213
ProviderError,
1314
ProviderFailure,
@@ -148,9 +149,9 @@ export class DbSyncStakePoolProvider extends DbSyncProvider(RunnableModule) impl
148149
try {
149150
pool.metadata.ext = await this.#metadataService.getStakePoolExtendedMetadata(pool.metadata);
150151
} catch (error) {
151-
if (error instanceof ProviderError && error.reason === ProviderFailure.ConnectionFailure) {
152+
if (CardanoNodeUtil.isProviderError(error) && error.reason === ProviderFailure.ConnectionFailure) {
152153
pool.metadata.ext = undefined;
153-
} else if (error instanceof ProviderError && error.reason === ProviderFailure.NotFound) {
154+
} else if (CardanoNodeUtil.isProviderError(error) && error.reason === ProviderFailure.NotFound) {
154155
pool.metadata.ext = null;
155156
} else {
156157
throw error;

packages/cardano-services/src/TxSubmit/TxSubmitHttpService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export class TxSubmitHttpService extends HttpService {
4141
} catch {
4242
isHealthy = false;
4343
}
44-
if (error instanceof ProviderError) {
44+
if (CardanoNodeUtil.isProviderError(error)) {
4545
return HttpServer.sendJSON(res, error, providerFailureToStatusCodeMap[error.reason]);
4646
}
4747
if (!isHealthy) {

packages/cardano-services/test/TxSubmit/TxSubmitHttpService.test.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
/* eslint-disable @typescript-eslint/no-explicit-any */
22
import { APPLICATION_JSON, CONTENT_TYPE, HttpServer, HttpServerConfig, TxSubmitHttpService } from '../../src';
3+
import {
4+
CardanoNodeUtil,
5+
ProviderError,
6+
TxSubmissionError,
7+
TxSubmissionErrorCode,
8+
TxSubmitProvider
9+
} from '@cardano-sdk/core';
310
import { CreateHttpProviderConfig, txSubmitHttpProvider } from '@cardano-sdk/cardano-services-client';
411
import { FATAL, createLogger } from 'bunyan';
5-
import { ProviderError, TxSubmissionError, TxSubmissionErrorCode, TxSubmitProvider } from '@cardano-sdk/core';
612
import { bufferToHexString, fromSerializableObject } from '@cardano-sdk/util';
713
import { getPort } from 'get-port-please';
814
import { logger } from '@cardano-sdk/util-dev';
@@ -199,7 +205,7 @@ describe('TxSubmitHttpService', () => {
199205
try {
200206
await clientProvider.submitTx({ signedTransaction: emptyUintArrayAsHexString });
201207
} catch (error: any) {
202-
if (error instanceof ProviderError) {
208+
if (CardanoNodeUtil.isProviderError(error)) {
203209
const innerError = error.innerError as TxSubmissionError;
204210
expect(innerError).toBeInstanceOf(TxSubmissionError);
205211
expect(innerError.code).toBe(stubErrors[0].code);

0 commit comments

Comments
 (0)