Skip to content

Commit

Permalink
chore!: remove blockId in transaction list responses (#3379)
Browse files Browse the repository at this point in the history
* create new fragments for success and failure statuses

* using right status fragment for transactionStatusSubscriptionFragment

* using right status fragment for getTransactionWithReceipts query

* adjusting transaction summary related types

* conforming with types adjustment

* adding test cases

* add changeset

* fixing typos

* simplify test case

* further refactor tests

---------

Co-authored-by: Peter Smith <[email protected]>
  • Loading branch information
Torres-ssf and petertonysmith94 authored Nov 13, 2024
1 parent 74112cc commit 9a17971
Show file tree
Hide file tree
Showing 6 changed files with 190 additions and 92 deletions.
5 changes: 5 additions & 0 deletions .changeset/smart-olives-attend.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@fuel-ts/account": minor
---

chore!: remove `blockId` in transaction list responses
39 changes: 31 additions & 8 deletions packages/account/src/providers/operations.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@ fragment SubmittedStatusFragment on SubmittedStatus {

fragment SuccessStatusFragment on SuccessStatus {
type: __typename
block {
id
}
time
programState {
returnType
Expand All @@ -27,11 +24,15 @@ fragment SuccessStatusFragment on SuccessStatus {
totalFee
}

fragment FailureStatusFragment on FailureStatus {
type: __typename
fragment SuccessStatusWithBlockIdFragment on SuccessStatus {
...SuccessStatusFragment
block {
id
}
}

fragment FailureStatusFragment on FailureStatus {
type: __typename
totalGas
totalFee
time
Expand All @@ -41,6 +42,13 @@ fragment FailureStatusFragment on FailureStatus {
}
}

fragment FailureStatusWithBlockIdFragment on FailureStatus {
...FailureStatusFragment
block {
id
}
}

fragment SqueezedOutStatusFragment on SqueezedOutStatus {
type: __typename
reason
Expand Down Expand Up @@ -106,13 +114,13 @@ fragment transactionStatusSubscriptionFragment on TransactionStatus {
...SubmittedStatusFragment
}
... on SuccessStatus {
...SuccessStatusFragment
...SuccessStatusWithBlockIdFragment
transaction {
...malleableTransactionFieldsFragment
}
}
... on FailureStatus {
...FailureStatusFragment
...FailureStatusWithBlockIdFragment
transaction {
...malleableTransactionFieldsFragment
}
Expand Down Expand Up @@ -481,7 +489,22 @@ query getTransaction($transactionId: TransactionId!) {

query getTransactionWithReceipts($transactionId: TransactionId!) {
transaction(id: $transactionId) {
...transactionFragment
id
rawPayload
status {
... on SubmittedStatus {
...SubmittedStatusFragment
}
... on SuccessStatus {
...SuccessStatusWithBlockIdFragment
}
... on FailureStatus {
...FailureStatusWithBlockIdFragment
}
... on SqueezedOutStatus {
...SqueezedOutStatusFragment
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ describe('TransactionSummary', () => {

const expected = {
id,
blockId: MOCK_SUCCESS_STATUS.block.id,
blockId: MOCK_SUCCESS_STATUS.block?.id,
fee: expect.any(BN),
gasUsed: expect.any(BN),
isTypeCreate: false,
Expand All @@ -113,7 +113,7 @@ describe('TransactionSummary', () => {

const expected = {
id,
blockId: MOCK_FAILURE_STATUS.block.id,
blockId: MOCK_FAILURE_STATUS.block?.id,
fee: expect.any(BN),
gasUsed: expect.any(BN),
isTypeCreate: false,
Expand Down
4 changes: 2 additions & 2 deletions packages/account/src/providers/transaction-summary/status.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,15 +52,15 @@ export const processGraphqlStatus = (gqlTransactionStatus?: GraphqlTransactionSt
switch (gqlTransactionStatus.type) {
case 'SuccessStatus':
time = gqlTransactionStatus.time;
blockId = gqlTransactionStatus.block.id;
blockId = gqlTransactionStatus.block?.id;
isStatusSuccess = true;
totalFee = bn(gqlTransactionStatus.totalFee);
totalGas = bn(gqlTransactionStatus.totalGas);
break;

case 'FailureStatus':
time = gqlTransactionStatus.time;
blockId = gqlTransactionStatus.block.id;
blockId = gqlTransactionStatus.block?.id;
isStatusFailure = true;
totalFee = bn(gqlTransactionStatus.totalFee);
totalGas = bn(gqlTransactionStatus.totalGas);
Expand Down
60 changes: 46 additions & 14 deletions packages/account/src/providers/transaction-summary/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,60 @@ import type { B256Address } from '@fuel-ts/interfaces';
import type { BN, BNInput } from '@fuel-ts/math';
import type { Input, Output, Transaction, TransactionType } from '@fuel-ts/transactions';

import type {
GqlFailureStatusFragment,
GqlGetTransactionQuery,
GqlSqueezedOutStatusFragment,
GqlSubmittedStatusFragment,
GqlSuccessStatusFragment,
} from '../__generated__/operations';
import type { GqlReceiptFragment, GqlSuccessStatusFragment } from '../__generated__/operations';
import type { TransactionResultReceipt } from '../transaction-response';

export type GqlTransaction = NonNullable<GqlGetTransactionQuery['transaction']>;
export type SubmittedStatus = {
type: 'SubmittedStatus';
time: string;
};

export type GraphqlTransactionStatus = GqlTransaction['status'];
export type SuccessStatus = {
type: 'SuccessStatus';
time: string;
programState?: GqlSuccessStatusFragment['programState'];
block?: {
id: string;
};
receipts: GqlReceiptFragment[];
totalGas: string;
totalFee: string;
};

export type SuccessStatus = GqlSuccessStatusFragment;
export type FailureStatus = GqlFailureStatusFragment;
export type SubmittedStatus = GqlSubmittedStatusFragment;
export type SqueezedOutStatus = GqlSqueezedOutStatusFragment;
export type FailureStatus = {
type: 'FailureStatus';
time: string;
reason: string;
block?: {
id: string;
};
receipts: GqlReceiptFragment[];
totalGas: string;
totalFee: string;
};

export type SqueezedOutStatus = {
type: 'SqueezedOutStatus';
reason: string;
};

export type GraphqlTransactionStatus =
| SubmittedStatus
| SuccessStatus
| FailureStatus
| SqueezedOutStatus
| null;

export type GqlTransaction = {
id: string;
rawPayload: string;
status?: GraphqlTransactionStatus;
};

export type Reason = FailureStatus['reason'];
export type ProgramState = SuccessStatus['programState'];
export type Time = SubmittedStatus['time'] | SuccessStatus['time'] | FailureStatus['time'];
export type BlockId = SuccessStatus['block']['id'] | FailureStatus['block']['id'];
export type BlockId = string;

/**
* @hidden
Expand Down
Loading

0 comments on commit 9a17971

Please sign in to comment.