Skip to content

Commit

Permalink
refactor(experimental): graphql: fix bad rebase from #2642 (#2810)
Browse files Browse the repository at this point in the history
  • Loading branch information
buffalojoec committed Jun 14, 2024
1 parent ee2906a commit ad5e9e2
Showing 1 changed file with 169 additions and 6 deletions.
175 changes: 169 additions & 6 deletions packages/rpc-graphql/src/schema/type-resolvers/account.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,111 @@
import { AccountResult, resolveAccount, resolveAccountData } from '../../resolvers/account';

type Token2022ExtensionResult = {
extension: string;
state: object;
};

const resolveTokenExtensions = () => {
return (parent: (AccountResult & { extensions?: Token2022ExtensionResult[] }) | null) => {
if (parent != null && parent.extensions != undefined) {
return parent.extensions.map(e => {
const { extension, state } = e;
return {
extension,
...state,
};
});
}
return null;
};
};

const resolveAdditionalTokenMetadata = () => {
return (parent: { additionalMetadata?: [string, string][] }) => {
if (parent.additionalMetadata != undefined) {
return parent.additionalMetadata.map(([key, value]) => {
return {
key,
value,
};
});
}
return null;
};
};

function resolveTokenExtensionType(extensionResult: Token2022ExtensionResult) {
if (extensionResult.extension === 'confidentialTransferFeeConfig') {
return 'SplTokenExtensionConfidentialTransferFeeConfig';
}
if (extensionResult.extension === 'confidentialTransferMint') {
return 'SplTokenExtensionConfidentialTransferMint';
}
if (extensionResult.extension === 'defaultAccountState') {
return 'SplTokenExtensionDefaultAccountState';
}
if (extensionResult.extension === 'groupPointer') {
return 'SplTokenExtensionGroupPointer';
}
if (extensionResult.extension === 'groupMemberPointer') {
return 'SplTokenExtensionGroupMemberPointer';
}
if (extensionResult.extension === 'interestBearingConfig') {
return 'SplTokenExtensionInterestBearingConfig';
}
if (extensionResult.extension === 'metadataPointer') {
return 'SplTokenExtensionMetadataPointer';
}
if (extensionResult.extension === 'mintCloseAuthority') {
return 'SplTokenExtensionMintCloseAuthority';
}
if (extensionResult.extension === 'nonTransferable') {
return 'SplTokenExtensionNonTransferable';
}
if (extensionResult.extension === 'permanentDelegate') {
return 'SplTokenExtensionPermanentDelegate';
}
if (extensionResult.extension === 'tokenGroup') {
return 'SplTokenExtensionTokenGroup';
}
if (extensionResult.extension === 'tokenGroupMember') {
return 'SplTokenExtensionTokenGroupMember';
}
if (extensionResult.extension === 'tokenMetadata') {
return 'SplTokenExtensionTokenMetadata';
}
if (extensionResult.extension === 'transferFeeConfig') {
return 'SplTokenExtensionTransferFeeConfig';
}
if (extensionResult.extension === 'transferHook') {
return 'SplTokenExtensionTransferHook';
}
if (extensionResult.extension === 'confidentialTransferAccount') {
return 'SplTokenExtensionConfidentialTransferAccount';
}
if (extensionResult.extension === 'transferFeeAmount') {
return 'SplTokenExtensionTransferFeeAmount';
}
if (extensionResult.extension === 'transferHookAccount') {
return 'SplTokenExtensionTransferHookAccount';
}
if (extensionResult.extension === 'confidentialTransferFeeAmount') {
return 'SplTokenExtensionConfidentialTransferFeeAmount';
}
if (extensionResult.extension === 'nonTransferableAccount') {
return 'SplTokenExtensionNonTransferableAccount';
}
if (extensionResult.extension === 'immutableOwner') {
return 'SplTokenExtensionImmutableOwner';
}
if (extensionResult.extension === 'memoTransfer') {
return 'SplTokenExtensionMemoTransfer';
}
if (extensionResult.extension === 'cpiGuard') {
return 'SplTokenExtensionCpiGuard';
}
}

export const accountTypeResolvers = {
Account: {
__resolveType: (accountResult: AccountResult) => {
Expand All @@ -8,11 +114,16 @@ export const accountTypeResolvers = {
if (jsonParsedConfigs.programName === 'nonce') {
return 'NonceAccount';
}
if (jsonParsedConfigs.accountType === 'mint' && jsonParsedConfigs.programName === 'spl-token') {
return 'MintAccount';
}
if (jsonParsedConfigs.accountType === 'account' && jsonParsedConfigs.programName === 'spl-token') {
return 'TokenAccount';
if (
jsonParsedConfigs.programName === 'spl-token' ||
jsonParsedConfigs.programName === 'spl-token-2022'
) {
if (jsonParsedConfigs.accountType === 'mint') {
return 'MintAccount';
}
if (jsonParsedConfigs.accountType === 'account') {
return 'TokenAccount';
}
}
if (jsonParsedConfigs.programName === 'stake') {
return 'StakeAccount';
Expand Down Expand Up @@ -61,7 +172,6 @@ export const accountTypeResolvers = {
}
return 'GenericAccount';
},
data: resolveAccountData(),
},
GenericAccount: {
data: resolveAccountData(),
Expand All @@ -74,6 +184,7 @@ export const accountTypeResolvers = {
},
MintAccount: {
data: resolveAccountData(),
extensions: resolveTokenExtensions(),
freezeAuthority: resolveAccount('freezeAuthority'),
mintAuthority: resolveAccount('mintAuthority'),
ownerProgram: resolveAccount('ownerProgram'),
Expand All @@ -83,6 +194,57 @@ export const accountTypeResolvers = {
data: resolveAccountData(),
ownerProgram: resolveAccount('ownerProgram'),
},
SplTokenExtension: {
__resolveType: resolveTokenExtensionType,
},
SplTokenExtensionConfidentialTransferFeeConfig: {
authority: resolveAccount('authority'),
},
SplTokenExtensionConfidentialTransferMint: {
authority: resolveAccount('authority'),
},
SplTokenExtensionGroupMemberPointer: {
authority: resolveAccount('authority'),
memberAddress: resolveAccount('memberAddress'),
},
SplTokenExtensionGroupPointer: {
authority: resolveAccount('authority'),
groupAddress: resolveAccount('groupAddress'),
},
SplTokenExtensionInterestBearingConfig: {
rateAuthority: resolveAccount('rateAuthority'),
},
SplTokenExtensionMetadataPointer: {
authority: resolveAccount('authority'),
metadataAddress: resolveAccount('metadataAddress'),
},
SplTokenExtensionMintCloseAuthority: {
closeAuthority: resolveAccount('closeAuthority'),
},
SplTokenExtensionPermanentDelegate: {
delegate: resolveAccount('delegate'),
},
SplTokenExtensionTokenGroup: {
mint: resolveAccount('mint'),
updateAuthority: resolveAccount('updateAuthority'),
},
SplTokenExtensionTokenGroupMember: {
group: resolveAccount('group'),
mint: resolveAccount('mint'),
},
SplTokenExtensionTokenMetadata: {
additionalMetadata: resolveAdditionalTokenMetadata(),
mint: resolveAccount('mint'),
updateAuthority: resolveAccount('updateAuthority'),
},
SplTokenExtensionTransferFeeConfig: {
transferFeeConfigAuthority: resolveAccount('transferFeeConfigAuthority'),
withdrawWithheldAuthority: resolveAccount('withdrawWithheldAuthority'),
},
SplTokenExtensionTransferHook: {
authority: resolveAccount('authority'),
hookProgramId: resolveAccount('programId'),
},
StakeAccount: {
data: resolveAccountData(),
ownerProgram: resolveAccount('ownerProgram'),
Expand Down Expand Up @@ -139,6 +301,7 @@ export const accountTypeResolvers = {
},
TokenAccount: {
data: resolveAccountData(),
extensions: resolveTokenExtensions(),
mint: resolveAccount('mint'),
owner: resolveAccount('owner'),
ownerProgram: resolveAccount('ownerProgram'),
Expand Down

0 comments on commit ad5e9e2

Please sign in to comment.