Skip to content

Commit a10d034

Browse files
authored
feat: add second party wallet address (#1922)
* feat: add second party wallet address * fix: format
1 parent 43f8c2f commit a10d034

6 files changed

Lines changed: 70 additions & 16 deletions

File tree

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* @param { import("knex").Knex } knex
3+
* @returns { Promise<void> }
4+
*/
5+
exports.up = function (knex) {
6+
return knex.schema.table('transactions', function (table) {
7+
table.string('secondPartyWA').nullable()
8+
})
9+
}
10+
11+
/**
12+
* @param { import("knex").Knex } knex
13+
* @returns { Promise<void> }
14+
*/
15+
exports.down = function (knex) {
16+
return knex.schema.table('transactions', function (table) {
17+
table.dropColumn('secondPartyWA')
18+
})
19+
}

packages/wallet/backend/src/backfillTrxDetails.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,10 @@ async function backfillTrxDetails() {
103103
} else {
104104
secondParty = await getOutgoingPaymentSecondParty(tx.paymentId)
105105
}
106-
await Transaction.query().where('id', tx.id).update({ secondParty })
106+
await Transaction.query().where('id', tx.id).update({
107+
secondParty: secondParty?.names,
108+
secondPartyWA: secondParty?.walletAddresses
109+
})
107110
console.log('trx updated')
108111
}
109112

packages/wallet/backend/src/rafiki/service.ts

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Env } from '@/config/env'
22
import { WalletAddress } from '@/walletAddress/model'
3-
import { TransactionService } from '@/transaction/service'
3+
import { ISecondParty, TransactionService } from '@/transaction/service'
44
import { Logger } from 'winston'
55
import { RafikiClient } from './rafiki-client'
66
import { SocketService } from '@/socket/service'
@@ -189,11 +189,16 @@ export class RafikiService implements IRafikiService {
189189

190190
await this.rafikiClient.withdrawLiqudity(wh.id)
191191

192-
const senders = await this.getIncomingPaymentSenders(wh.data.id)
192+
const secondParty = await this.getIncomingPaymentSenders(wh.data.id)
193193

194194
await this.transactionService.updateTransaction(
195195
{ paymentId: wh.data.id },
196-
{ status: 'COMPLETED', value: amount.value, secondParty: senders }
196+
{
197+
status: 'COMPLETED',
198+
value: amount.value,
199+
secondParty: secondParty?.names,
200+
secondPartyWA: secondParty?.walletAddresses
201+
}
197202
)
198203

199204
const isExchange = NodeCacheInstance.get(wh.data.id)
@@ -385,7 +390,9 @@ export class RafikiService implements IRafikiService {
385390
}
386391
}
387392

388-
async getIncomingPaymentSenders(id: string) {
393+
async getIncomingPaymentSenders(
394+
id: string
395+
): Promise<ISecondParty | undefined> {
389396
try {
390397
const outgoingPayments =
391398
await this.rafikiClient.getOutgoingPaymentsByReceiver(
@@ -398,10 +405,15 @@ export class RafikiService implements IRafikiService {
398405
const walletAddresses =
399406
await this.walletAddressService.getByIds(walletAddressIds)
400407
// return senders
401-
return walletAddresses
402-
.filter((wa) => wa.account?.user)
403-
.map((wa) => `${wa.account.user.firstName} ${wa.account.user.lastName}`)
404-
.join(', ')
408+
return {
409+
names: walletAddresses
410+
.filter((wa) => wa.account?.user)
411+
.map(
412+
(wa) => `${wa.account.user.firstName} ${wa.account.user.lastName}`
413+
)
414+
.join(', '),
415+
walletAddresses: walletAddresses.map((wa) => wa.url).join(', ')
416+
}
405417
} catch (e) {
406418
this.logger.warn(
407419
'Error on getting outgoing payments by incoming payment',
@@ -417,15 +429,23 @@ export class RafikiService implements IRafikiService {
417429
receiver.walletAddressUrl
418430
)
419431

432+
const response: ISecondParty = {
433+
walletAddresses: receiver.walletAddressUrl
434+
}
435+
420436
if (receiverWA?.account?.user) {
421-
return `${receiverWA.account.user.firstName} ${receiverWA.account.user.lastName}`
437+
response.names = `${receiverWA.account.user.firstName} ${receiverWA.account.user.lastName}`
422438
}
439+
440+
return response
423441
} catch (e) {
424442
this.logger.warn('Error on getting receiver wallet address', e)
425443
}
426444
}
427445

428-
async getOutgoingPaymentSecondPartyByIncomingPaymentId(paymentId: string) {
446+
async getOutgoingPaymentSecondPartyByIncomingPaymentId(
447+
paymentId: string
448+
): Promise<ISecondParty | undefined> {
429449
try {
430450
const receiver = await this.rafikiClient.getIncomingPaymentById(paymentId)
431451

@@ -434,7 +454,10 @@ export class RafikiService implements IRafikiService {
434454
)
435455

436456
if (receiverWA?.account?.user) {
437-
return `${receiverWA.account.user.firstName} ${receiverWA.account.user.lastName}`
457+
return {
458+
names: `${receiverWA.account.user.firstName} ${receiverWA.account.user.lastName}`,
459+
walletAddresses: receiverWA.url
460+
}
438461
}
439462
} catch (e) {
440463
this.logger.warn('Error on getting receiver wallet address', e)

packages/wallet/backend/src/transaction/model.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,10 @@ export class Transaction
3838
cardTxType?: number
3939

4040
// Merchant name for card transactions
41-
// Receiver or sender WA for ilp payments
41+
// Receiver or sender first + last name for ilp payments
4242
secondParty?: string
43+
// Receiver wallet address for ilp payments
44+
secondPartyWA?: string
4345

4446
static relationMappings = () => ({
4547
walletAddress: {

packages/wallet/backend/src/transaction/service.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ type ListAllTransactionsInput = {
2222
orderByDate: OrderByDirection
2323
}
2424

25+
export interface ISecondParty {
26+
names?: string
27+
walletAddresses?: string
28+
}
2529
export interface ITransactionService {
2630
list: (
2731
userId: string,
@@ -232,7 +236,7 @@ export class TransactionService implements ITransactionService {
232236
async createOutgoingTransaction(
233237
params: OutgoingPayment,
234238
walletAddress: WalletAddress,
235-
secondParty?: string
239+
secondParty?: ISecondParty
236240
) {
237241
const existentTransaction = await Transaction.query().findOne({
238242
paymentId: params.id
@@ -251,7 +255,8 @@ export class TransactionService implements ITransactionService {
251255
type: 'OUTGOING',
252256
status: 'PENDING',
253257
description: params.metadata?.description,
254-
secondParty
258+
secondParty: secondParty?.names,
259+
secondPartyWA: secondParty?.walletAddresses
255260
})
256261
}
257262
}

packages/wallet/shared/src/types/transaction.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,10 @@ export interface TransactionResponse {
3838
type: TransactionType
3939
status: TransactionStatus
4040
// Merchant name for card transactions
41-
// Receiver or sender WA for ilp payments
41+
// Receiver or sender first + last name for ilp payments
4242
secondParty?: string
43+
// Receiver wallet address for ilp payments
44+
secondPartyWA?: string
4345
txAmount?: bigint
4446
txCurrency?: string
4547
conversionRate?: string

0 commit comments

Comments
 (0)