From 3c648f85da45d81356f4a95d4153321f7b2a7256 Mon Sep 17 00:00:00 2001 From: Andy Haynes Date: Mon, 17 Oct 2022 11:49:39 -0700 Subject: [PATCH 1/6] refactor: utils/logging module --- packages/near-api-js/src/utils/logging.ts | 58 +++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 packages/near-api-js/src/utils/logging.ts diff --git a/packages/near-api-js/src/utils/logging.ts b/packages/near-api-js/src/utils/logging.ts new file mode 100644 index 0000000000..e17f424905 --- /dev/null +++ b/packages/near-api-js/src/utils/logging.ts @@ -0,0 +1,58 @@ +import { FinalExecutionOutcome } from '../providers'; +import { parseRpcError } from './rpc_errors'; + +const SUPPRESS_LOGGING = !!process.env.NEAR_NO_LOGS; + +export function printLogsAndFailures({ + contractId, + outcome, + suppressLogging = SUPPRESS_LOGGING, +}: { contractId: string, outcome: FinalExecutionOutcome, suppressLogging?: boolean }) { + if (suppressLogging) { + return; + } + + const flatLogs = [outcome.transaction_outcome, ...outcome.receipts_outcome] + .reduce((acc, it) => { + const isFailure = typeof it.outcome.status === 'object' && typeof it.outcome.status.Failure === 'object'; + if (it.outcome.logs.length || isFailure) { + return acc.concat({ + receiptIds: it.outcome.receipt_ids, + logs: it.outcome.logs, + failure: typeof it.outcome.status === 'object' && it.outcome.status.Failure !== undefined + ? parseRpcError(it.outcome.status.Failure) + : null + }); + } else { + return acc; + } + }, []); + + for (const result of flatLogs) { + console.log(`Receipt${result.receiptIds.length > 1 ? 's' : ''}: ${result.receiptIds.join(', ')}`); + printLogs({ + contractId, + logs: result.logs, + prefix: '\t', + }); + + if (result.failure) { + console.warn(`\tFailure [${contractId}]: ${result.failure}`); + } + } +} + +export function printLogs({ + contractId, + logs, + prefix = '', + suppressLogging = SUPPRESS_LOGGING, +}: { contractId: string, logs: string[], prefix?: string, suppressLogging?: boolean }) { + if (suppressLogging) { + return; + } + + for (const log of logs) { + console.log(`${prefix}Log [${contractId}]: ${log}`); + } +} From eea9a5f0769345aed3e7db685160628d83c6141d Mon Sep 17 00:00:00 2001 From: Andy Haynes Date: Mon, 17 Oct 2022 11:53:39 -0700 Subject: [PATCH 2/6] refactor: replace Account.printLogs* with refactored methods --- packages/near-api-js/src/account.ts | 46 +++-------------------------- 1 file changed, 4 insertions(+), 42 deletions(-) diff --git a/packages/near-api-js/src/account.ts b/packages/near-api-js/src/account.ts index b2b5bced0e..d260fa5a27 100644 --- a/packages/near-api-js/src/account.ts +++ b/packages/near-api-js/src/account.ts @@ -32,8 +32,8 @@ import { Connection } from './connection'; import { baseDecode, baseEncode } from 'borsh'; import { PublicKey } from './utils/key_pair'; import { logWarning, PositionalArgsError } from './utils/errors'; -import { parseRpcError, parseResultError } from './utils/rpc_errors'; -import { ServerError } from './utils/rpc_errors'; +import { printLogs, printLogsAndFailures } from './utils/logging'; +import { parseResultError } from './utils/rpc_errors'; import { DEFAULT_FUNCTION_CALL_GAS } from './constants'; import exponentialBackoff from './utils/exponential-backoff'; @@ -123,12 +123,6 @@ export interface ViewFunctionCallOptions extends FunctionCallOptions { blockQuery?: BlockReference; } -interface ReceiptLogWithFailure { - receiptIds: [string]; - logs: [string]; - failure: ServerError; -} - interface StakedBalance { validatorId: string; amount?: string; @@ -177,28 +171,6 @@ export class Account { }); } - /** @hidden */ - private printLogsAndFailures(contractId: string, results: [ReceiptLogWithFailure]) { - if (!process.env['NEAR_NO_LOGS']) { - for (const result of results) { - console.log(`Receipt${result.receiptIds.length > 1 ? 's' : ''}: ${result.receiptIds.join(', ')}`); - this.printLogs(contractId, result.logs, '\t'); - if (result.failure) { - console.warn(`\tFailure [${contractId}]: ${result.failure}`); - } - } - } - } - - /** @hidden */ - private printLogs(contractId: string, logs: string[], prefix = '') { - if (!process.env['NEAR_NO_LOGS']) { - for (const log of logs) { - console.log(`${prefix}Log [${contractId}]: ${log}`); - } - } - } - /** * Create a signed transaction which can be broadcast to the network * @param receiverId NEAR account receiving the transaction @@ -254,17 +226,7 @@ export class Account { throw new TypedError('nonce retries exceeded for transaction. This usually means there are too many parallel requests with the same access key.', 'RetriesExceeded'); } - const flatLogs = [result.transaction_outcome, ...result.receipts_outcome].reduce((acc, it) => { - if (it.outcome.logs.length || - (typeof it.outcome.status === 'object' && typeof it.outcome.status.Failure === 'object')) { - return acc.concat({ - 'receiptIds': it.outcome.receipt_ids, - 'logs': it.outcome.logs, - 'failure': typeof it.outcome.status.Failure != 'undefined' ? parseRpcError(it.outcome.status.Failure) : null - }); - } else return acc; - }, []); - this.printLogsAndFailures(signedTx.transaction.receiverId, flatLogs); + printLogsAndFailures({ contractId: signedTx.transaction.receiverId, outcome: result }); // Should be falsy if result.status.Failure is null if (!returnError && typeof result.status === 'object' && typeof result.status.Failure === 'object' && result.status.Failure !== null) { @@ -537,7 +499,7 @@ export class Account { }); if (result.logs) { - this.printLogs(contractId, result.logs); + printLogs({ contractId, logs: result.logs }); } return result.result && result.result.length > 0 && parse(Buffer.from(result.result)); From 8cda99b5390597d84c40ce479700a9bbafe8532b Mon Sep 17 00:00:00 2001 From: Andy Haynes Date: Tue, 18 Oct 2022 15:27:15 -0700 Subject: [PATCH 3/6] docs: add jsdocs --- packages/near-api-js/src/utils/logging.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/near-api-js/src/utils/logging.ts b/packages/near-api-js/src/utils/logging.ts index e17f424905..373816ec7a 100644 --- a/packages/near-api-js/src/utils/logging.ts +++ b/packages/near-api-js/src/utils/logging.ts @@ -3,6 +3,13 @@ import { parseRpcError } from './rpc_errors'; const SUPPRESS_LOGGING = !!process.env.NEAR_NO_LOGS; +/** + * Parse and print details from a query execution response + * @param params + * @param params.contractId ID of the account/contract which made the query + * @param params.outcome the query execution response + * @param params.suppressLogging disables console output when `true` + */ export function printLogsAndFailures({ contractId, outcome, @@ -42,6 +49,13 @@ export function printLogsAndFailures({ } } +/** + * Format and print log output from a query execution response + * @param params + * @param params.contractId ID of the account/contract which made the query + * @param params.logs log output from a query execution response + * @param params.suppressLogging disables console output when `true` + */ export function printLogs({ contractId, logs, From 3d37b2b277508d0ace36903457374783feaffa0f Mon Sep 17 00:00:00 2001 From: Andy Haynes Date: Tue, 18 Oct 2022 15:45:38 -0700 Subject: [PATCH 4/6] refactor: more descriptive names --- packages/near-api-js/src/account.ts | 6 +++--- packages/near-api-js/src/utils/logging.ts | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/near-api-js/src/account.ts b/packages/near-api-js/src/account.ts index d260fa5a27..afffd2913c 100644 --- a/packages/near-api-js/src/account.ts +++ b/packages/near-api-js/src/account.ts @@ -32,7 +32,7 @@ import { Connection } from './connection'; import { baseDecode, baseEncode } from 'borsh'; import { PublicKey } from './utils/key_pair'; import { logWarning, PositionalArgsError } from './utils/errors'; -import { printLogs, printLogsAndFailures } from './utils/logging'; +import { printTxOutcomeLogs, printTxOutcomeLogsAndFailures } from './utils/logging'; import { parseResultError } from './utils/rpc_errors'; import { DEFAULT_FUNCTION_CALL_GAS } from './constants'; @@ -226,7 +226,7 @@ export class Account { throw new TypedError('nonce retries exceeded for transaction. This usually means there are too many parallel requests with the same access key.', 'RetriesExceeded'); } - printLogsAndFailures({ contractId: signedTx.transaction.receiverId, outcome: result }); + printTxOutcomeLogsAndFailures({ contractId: signedTx.transaction.receiverId, outcome: result }); // Should be falsy if result.status.Failure is null if (!returnError && typeof result.status === 'object' && typeof result.status.Failure === 'object' && result.status.Failure !== null) { @@ -499,7 +499,7 @@ export class Account { }); if (result.logs) { - printLogs({ contractId, logs: result.logs }); + printTxOutcomeLogs({ contractId, logs: result.logs }); } return result.result && result.result.length > 0 && parse(Buffer.from(result.result)); diff --git a/packages/near-api-js/src/utils/logging.ts b/packages/near-api-js/src/utils/logging.ts index 373816ec7a..773164f27c 100644 --- a/packages/near-api-js/src/utils/logging.ts +++ b/packages/near-api-js/src/utils/logging.ts @@ -10,7 +10,7 @@ const SUPPRESS_LOGGING = !!process.env.NEAR_NO_LOGS; * @param params.outcome the query execution response * @param params.suppressLogging disables console output when `true` */ -export function printLogsAndFailures({ +export function printTxOutcomeLogsAndFailures({ contractId, outcome, suppressLogging = SUPPRESS_LOGGING, @@ -37,7 +37,7 @@ export function printLogsAndFailures({ for (const result of flatLogs) { console.log(`Receipt${result.receiptIds.length > 1 ? 's' : ''}: ${result.receiptIds.join(', ')}`); - printLogs({ + printTxOutcomeLogs({ contractId, logs: result.logs, prefix: '\t', @@ -56,7 +56,7 @@ export function printLogsAndFailures({ * @param params.logs log output from a query execution response * @param params.suppressLogging disables console output when `true` */ -export function printLogs({ +export function printTxOutcomeLogs({ contractId, logs, prefix = '', From 905d5fe87f3f36797b02efcabc76fb29060b01a1 Mon Sep 17 00:00:00 2001 From: Andy Haynes Date: Tue, 18 Oct 2022 15:47:17 -0700 Subject: [PATCH 5/6] refactor: use module-scoped value rather than allowing override in args --- packages/near-api-js/src/utils/logging.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/near-api-js/src/utils/logging.ts b/packages/near-api-js/src/utils/logging.ts index 773164f27c..b30511abd3 100644 --- a/packages/near-api-js/src/utils/logging.ts +++ b/packages/near-api-js/src/utils/logging.ts @@ -8,14 +8,12 @@ const SUPPRESS_LOGGING = !!process.env.NEAR_NO_LOGS; * @param params * @param params.contractId ID of the account/contract which made the query * @param params.outcome the query execution response - * @param params.suppressLogging disables console output when `true` */ export function printTxOutcomeLogsAndFailures({ contractId, outcome, - suppressLogging = SUPPRESS_LOGGING, -}: { contractId: string, outcome: FinalExecutionOutcome, suppressLogging?: boolean }) { - if (suppressLogging) { +}: { contractId: string, outcome: FinalExecutionOutcome }) { + if (SUPPRESS_LOGGING) { return; } @@ -54,15 +52,13 @@ export function printTxOutcomeLogsAndFailures({ * @param params * @param params.contractId ID of the account/contract which made the query * @param params.logs log output from a query execution response - * @param params.suppressLogging disables console output when `true` */ export function printTxOutcomeLogs({ contractId, logs, prefix = '', - suppressLogging = SUPPRESS_LOGGING, -}: { contractId: string, logs: string[], prefix?: string, suppressLogging?: boolean }) { - if (suppressLogging) { +}: { contractId: string, logs: string[], prefix?: string }) { + if (SUPPRESS_LOGGING) { return; } From 560cfb8ed235d625115c9fcf683a9d6ddf17d37e Mon Sep 17 00:00:00 2001 From: Andy Haynes Date: Wed, 19 Oct 2022 14:42:28 -0700 Subject: [PATCH 6/6] docs: missing JSDoc parameter --- packages/near-api-js/src/utils/logging.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/near-api-js/src/utils/logging.ts b/packages/near-api-js/src/utils/logging.ts index b30511abd3..8e1e6c1a86 100644 --- a/packages/near-api-js/src/utils/logging.ts +++ b/packages/near-api-js/src/utils/logging.ts @@ -52,6 +52,7 @@ export function printTxOutcomeLogsAndFailures({ * @param params * @param params.contractId ID of the account/contract which made the query * @param params.logs log output from a query execution response + * @param params.prefix string to append to the beginning of each log */ export function printTxOutcomeLogs({ contractId,