From d9843583c40c5ff787e14564fb6f1f0f4282b6dd Mon Sep 17 00:00:00 2001
From: clauspeterhuebner
Date: Wed, 10 Sep 2025 22:39:34 +0200
Subject: [PATCH] add optional transactionLinkId in x-com-tx handshake
---
core/src/graphql/logic/processXComSendCoins.ts | 13 +++++++++++--
.../graphql/api/1_0/resolver/SendCoinsResolver.ts | 1 +
.../api/1_0/util/settlePendingReceiveTransaction.ts | 1 +
.../src/jwt/payloadtypes/SendCoinsJwtPayloadType.ts | 3 +++
4 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/core/src/graphql/logic/processXComSendCoins.ts b/core/src/graphql/logic/processXComSendCoins.ts
index 079ba76b7..531771f16 100644
--- a/core/src/graphql/logic/processXComSendCoins.ts
+++ b/core/src/graphql/logic/processXComSendCoins.ts
@@ -111,6 +111,7 @@ export async function processXComCompleteTransaction(
memo,
senderUser,
recipientGradidoId,
+ dbTransactionLink?.id,
)
methodLogger.debug('processXComPendingSendCoins result: ', pendingResult)
if (pendingResult && pendingResult.vote && pendingResult.recipGradidoID) {
@@ -123,6 +124,7 @@ export async function processXComCompleteTransaction(
memo,
senderUser,
pendingResult,
+ dbTransactionLink?.id,
)
methodLogger.debug('processXComCommittingSendCoins result: ', committingResult)
if (!committingResult.vote) {
@@ -183,6 +185,7 @@ export async function processXComPendingSendCoins(
memo: string,
sender: dbUser,
recipientIdentifier: string,
+ transactionLinkId?: number,
): Promise {
let voteResult: SendCoinsResponseJwtPayloadType
const methodLogger = createLogger(`processXComPendingSendCoins`)
@@ -196,7 +199,8 @@ export async function processXComPendingSendCoins(
amount: amount.toString(),
memo: memo.substring(0, 5),
sender: new UserLoggingView(sender),
- recipientIdentifier
+ recipientIdentifier,
+ transactionLinkId
}
)
}
@@ -236,7 +240,8 @@ export async function processXComPendingSendCoins(
senderCom.communityUuid!,
sender.gradidoID,
fullName(sender.firstName, sender.lastName),
- sender.alias
+ sender.alias,
+ transactionLinkId
)
if(methodLogger.isDebugEnabled()) {
methodLogger.debug(`ready for voteForSendCoins with payload=${payload}`)
@@ -297,6 +302,7 @@ export async function processXComPendingSendCoins(
pendingTx.userId = sender.id
pendingTx.userGradidoID = sender.gradidoID
pendingTx.userName = fullName(sender.firstName, sender.lastName)
+ pendingTx.linkedTransactionId = transactionLinkId
if(methodLogger.isDebugEnabled()) {
methodLogger.debug(`initialized sender pendingTX=${new PendingTransactionLoggingView(pendingTx)}`)
}
@@ -346,6 +352,7 @@ export async function processXComCommittingSendCoins(
memo: string,
sender: dbUser,
recipient: SendCoinsResult,
+ transactionLinkId?: number,
): Promise {
const methodLogger = createLogger(`processXComCommittingSendCoins`)
const handshakeID = randombytes_random().toString()
@@ -362,6 +369,7 @@ export async function processXComCommittingSendCoins(
memo: memo.substring(0, 5),
sender: new UserLoggingView(sender),
recipient: new SendCoinsResultLoggingView(recipient),
+ transactionLinkId,
}
)
}
@@ -404,6 +412,7 @@ export async function processXComCommittingSendCoins(
pendingTx.userGradidoID!,
pendingTx.userName!,
sender.alias,
+ pendingTx.transactionLinkId,
)
payload.recipientCommunityUuid = pendingTx.linkedUserCommunityUuid
? pendingTx.linkedUserCommunityUuid
diff --git a/federation/src/graphql/api/1_0/resolver/SendCoinsResolver.ts b/federation/src/graphql/api/1_0/resolver/SendCoinsResolver.ts
index 938dca47c..baaa376c5 100644
--- a/federation/src/graphql/api/1_0/resolver/SendCoinsResolver.ts
+++ b/federation/src/graphql/api/1_0/resolver/SendCoinsResolver.ts
@@ -104,6 +104,7 @@ export class SendCoinsResolver {
pendingTx.userCommunityUuid = authArgs.recipientCommunityUuid
pendingTx.userGradidoID = receiverUser.gradidoID
pendingTx.userName = fullName(receiverUser.firstName, receiverUser.lastName)
+ pendingTx.transactionLinkId = authArgs.transactionLinkId
await DbPendingTransaction.insert(pendingTx)
const responseArgs = new SendCoinsResponseJwtPayloadType(
diff --git a/federation/src/graphql/api/1_0/util/settlePendingReceiveTransaction.ts b/federation/src/graphql/api/1_0/util/settlePendingReceiveTransaction.ts
index 6396174bc..6035aa442 100644
--- a/federation/src/graphql/api/1_0/util/settlePendingReceiveTransaction.ts
+++ b/federation/src/graphql/api/1_0/util/settlePendingReceiveTransaction.ts
@@ -92,6 +92,7 @@ export async function settlePendingReceiveTransaction(
transactionReceive.decayStart = receiveBalance ? receiveBalance.decay.start : null
transactionReceive.previous = receiveBalance ? receiveBalance.lastTransactionId : null
transactionReceive.linkedTransactionId = pendingTx.linkedTransactionId
+ transactionReceive.transactionLinkId = pendingTx.transactionLinkId
await queryRunner.manager.insert(dbTransaction, transactionReceive)
logger.debug(`receive Transaction inserted: ${new TransactionLoggingView(transactionReceive)}`)
diff --git a/shared/src/jwt/payloadtypes/SendCoinsJwtPayloadType.ts b/shared/src/jwt/payloadtypes/SendCoinsJwtPayloadType.ts
index 833b004fc..b49086467 100644
--- a/shared/src/jwt/payloadtypes/SendCoinsJwtPayloadType.ts
+++ b/shared/src/jwt/payloadtypes/SendCoinsJwtPayloadType.ts
@@ -13,6 +13,7 @@ export class SendCoinsJwtPayloadType extends JwtPayloadType {
senderUserUuid: string
senderUserName: string
senderAlias?: string | null
+ transactionLinkId?: number | null
constructor(
handshakeID: string,
@@ -25,6 +26,7 @@ export class SendCoinsJwtPayloadType extends JwtPayloadType {
senderUserUuid: string,
senderUserName: string,
senderAlias?: string | null,
+ transactionLinkId?: number | null,
) {
super(handshakeID)
this.tokentype = SendCoinsJwtPayloadType.SEND_COINS_TYPE
@@ -37,5 +39,6 @@ export class SendCoinsJwtPayloadType extends JwtPayloadType {
this.senderUserUuid = senderUserUuid
this.senderUserName = senderUserName
this.senderAlias = senderAlias
+ this.transactionLinkId = transactionLinkId
}
}