diff --git a/CHANGELOG.md b/CHANGELOG.md index e2b21ad6..fedd5e94 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,13 +17,13 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). where the fee payer is the loaded user - Add `extraData` to `TransferDetails`, it contains the raw `extraData` that was present in the transfer for which details are returned -- Add `paymentRequestId` and `messageId` to `TransferDetails` corresponding to the decoded `extraData` -- Add option to `Payment.preparePayment` function `options.addMessageId: boolean = true` that signals whether - a messageId should be generated and added to the payment's extraData. -- Add `messageId` to the returned values of `Payment.preparePayment` +- Add `paymentRequestId` and `transferId` to `TransferDetails` corresponding to the decoded `extraData` +- Add option to `Payment.preparePayment` function `options.addTransferId: boolean = true` that signals whether + a `transferId` should be generated and added to the payment's extraData. +- Add `transferId` to the returned values of `Payment.preparePayment` - Add function `Payment.confirmPayment` to confirm any `PaymentTxObject` returned by `prepare` and potentially send a payment message along with the payment -- Add function `Messaging.paymentMessage` to send a payment message for a messageId to a counterparty address +- Add function `Messaging.paymentMessage` to send a payment message for a `transferId` to a counterparty address ### Deprecated diff --git a/src/Messaging.ts b/src/Messaging.ts index 19601d49..060b4f6b 100644 --- a/src/Messaging.ts +++ b/src/Messaging.ts @@ -110,18 +110,18 @@ export class Messaging { /** * Sends a payment message to given `counterParty` and returns created message. * @param counterPartyAddress Address of counter party. - * @param messageId Message id of the payment + * @param transferId Transfer ID of the payment * @param subject Subject that will be sent to the counterparty */ public async paymentMessage( counterPartyAddress: string, - messageId: string, + transferId: string, subject: string ): Promise { const type = 'PaymentMessage' const message = { type, - messageId, + transferId, subject } await this.sendMessage(counterPartyAddress, type, message) diff --git a/src/Payment.ts b/src/Payment.ts index 27af4a52..383ffde1 100644 --- a/src/Payment.ts +++ b/src/Payment.ts @@ -101,13 +101,13 @@ export class Payment { * @param options.feePayer Either `sender` or `receiver`. Specifies who pays network fees. * @param options.extraData Extra data that will appear in the Transfer event when successful. * @param options.paymentRequestId Payment request identifier that gets encoded to the extra data. - * @param options.addMessageId Whether a message id should be added to the payment, default to true. + * @param options.addTransferId Whether a transfer id should be added to the payment, default to true. */ public async prepare( networkAddress: string, receiverAddress: string, value: number | string, - options: PaymentOptions = { addMessageId: true } + options: PaymentOptions = { addTransferId: true } ): Promise { const { gasPrice, @@ -115,20 +115,20 @@ export class Payment { networkDecimals, extraData, paymentRequestId, - addMessageId + addTransferId } = options const decimals = await this.currencyNetwork.getDecimals(networkAddress, { networkDecimals }) - let messageId: string - if (addMessageId) { + let transferId: string + if (addTransferId) { // 19 decimals fit in 64 bits - messageId = utils.convertToHexString(utils.generateRandomNumber(19)) + transferId = utils.convertToHexString(utils.generateRandomNumber(19)) } const encodedExtraData: string = encode({ extraData, paymentRequestId, - messageId + transferId }) const { path, maxFees, feePayer } = await this.getTransferPathInfo( @@ -174,7 +174,7 @@ export class Payment { path, receiverAddress, rawTx, - messageId: messageId || null + transferId: transferId || null } } else { throw new Error('Could not find a path with enough capacity.') @@ -293,28 +293,28 @@ export class Payment { /** * Signs the rawTx provided as returned by `prepare` - * and sends the signed transaction as well as the message with messageId + * and sends the signed transaction as well as the message with transferId * Can be directly given a `PaymentTxObject` object as returned by `prepare` * @param rawTx Raw transaction object. * @param receiverAddress Address of the receiver of the message for the payment. - * @param messageId The messageId returned when preparing a payment with message. + * @param transferId The transfer id returned when preparing a payment with message. * @param message The message to be sent. */ public async confirmPayment( { rawTx, receiverAddress, - messageId - }: { rawTx: RawTxObject; receiverAddress: string; messageId?: string }, + transferId + }: { rawTx: RawTxObject; receiverAddress: string; transferId?: string }, message?: string ) { if (message) { - if (!messageId) { + if (!transferId) { throw new Error( - 'Cannot use `message` if payment was prepared without `messageId`.' + 'Cannot use `message` if payment was prepared without `transferId`.' ) } - await this.messaging.paymentMessage(receiverAddress, messageId, message) + await this.messaging.paymentMessage(receiverAddress, transferId, message) } return this.transaction.confirm(rawTx) } @@ -513,21 +513,21 @@ export class Payment { function encode({ extraData, paymentRequestId, - messageId + transferId }: { extraData: string paymentRequestId: string - messageId?: string + transferId?: string }) { - if (extraData && (paymentRequestId || messageId)) { + if (extraData && (paymentRequestId || transferId)) { throw Error( - 'Can not encode extraData and paymentRequestId or messageId at the same time currently' + 'Can not encode extraData and paymentRequestId or transferId at the same time currently' ) } if (extraData) { return extraData - } else if (paymentRequestId || messageId) { - return encodeExtraData({ paymentRequestId, messageId }) + } else if (paymentRequestId || transferId) { + return encodeExtraData({ paymentRequestId, transferId }) } else { return '0x' } diff --git a/src/extraData.ts b/src/extraData.ts index bf7a26a2..5b521ada 100644 --- a/src/extraData.ts +++ b/src/extraData.ts @@ -4,25 +4,25 @@ export const MSG_PACK_ID = '0x544c4d50' // hex encoded "TLMP" (Trustlines Messag export interface ExtraData { paymentRequestId?: string - messageId?: string + transferId?: string } interface ExtraDataEncoding { prId?: ArrayBufferView - mgId?: ArrayBufferView + trId?: ArrayBufferView } export function encode(extraData: ExtraData): string { - const { paymentRequestId, messageId } = extraData - if (!paymentRequestId && !messageId) { + const { paymentRequestId, transferId } = extraData + if (!paymentRequestId && !transferId) { return '0x' } else { const data: ExtraDataEncoding = {} if (paymentRequestId) { data.prId = hexToArray(paymentRequestId) } - if (messageId) { - data.mgId = hexToArray(messageId) + if (transferId) { + data.trId = hexToArray(transferId) } const enc = msgPack.encode(data) return MSG_PACK_ID + remove0xPrefix(arrayToHex(enc)) @@ -52,7 +52,7 @@ export function decode(encodedExtraData: string): ExtraData { return { paymentRequestId: arrayToHex(extraData.prId), - messageId: arrayToHex(extraData.mgId) + transferId: arrayToHex(extraData.trId) } } @@ -85,8 +85,8 @@ export function processExtraData(object) { object.paymentRequestId = decodedExtraData ? decodedExtraData.paymentRequestId || null : null - object.messageId = decodedExtraData - ? decodedExtraData.messageId || null + object.transferId = decodedExtraData + ? decodedExtraData.transferId || null : null } return object diff --git a/src/typings.ts b/src/typings.ts index 8c96b5bd..d2b0ab4b 100644 --- a/src/typings.ts +++ b/src/typings.ts @@ -79,7 +79,7 @@ export interface PaymentOptions extends TLOptions { feePayer?: FeePayer extraData?: string paymentRequestId?: string - addMessageId?: boolean + addTransferId?: boolean } export interface TrustlineUpdateOptions extends TLOptions { @@ -137,7 +137,7 @@ export interface NetworkTransferEvent extends NetworkEvent { amount: Amount extraData: string paymentRequestId: string - messageId: string + transferId: string } export interface NetworkTrustlineUpdateEventRaw extends NetworkEvent { @@ -226,7 +226,7 @@ export interface PaymentRequestDeclineMessage { export interface PaymentMessage { type: string - messageId: string + transferId: string subject: string } @@ -436,7 +436,7 @@ export interface PaymentTxObject extends TxObject { receiverAddress: string feePayer: FeePayer maxFees: Amount - messageId?: string + transferId?: string } export enum FeePayer { @@ -697,7 +697,7 @@ export interface TransferDetails { feesPaid: Amount[] extraData: string paymentRequestId: string - messageId: string + transferId: string } export interface TransferIdentifier { diff --git a/tests/e2e/Event.test.ts b/tests/e2e/Event.test.ts index ee09c13c..fe543cb5 100644 --- a/tests/e2e/Event.test.ts +++ b/tests/e2e/Event.test.ts @@ -73,7 +73,7 @@ describe('e2e', () => { 1.5, { extraData, - addMessageId: false + addTransferId: false } ) await tl1.payment.confirm(rawTx) @@ -98,7 +98,7 @@ describe('e2e', () => { expect(last.amount).to.have.keys('raw', 'value', 'decimals') expect(last.amount.value).to.eq('1.5') expect(last.extraData).to.eq(extraData) - expect(last.messageId).to.be.a('null') + expect(last.transferId).to.be.a('null') expect(last.paymentRequestId).to.be.a('null') expect(last.logIndex).to.be.a('number') expect(last.blockHash).to.be.a('string') @@ -110,7 +110,7 @@ describe('e2e', () => { let acceptTxHash let cancelUpdateTxHash let tlTransferTxHash - let tlTransferMessageId + let tlTransferTransferId let depositTxHash let withdrawTxHash let transferTxHash @@ -164,7 +164,7 @@ describe('e2e', () => { 1, { paymentRequestId } ) - tlTransferMessageId = tlTransferTx.messageId + tlTransferTransferId = tlTransferTx.transferId tlTransferTxHash = await tl1.payment.confirm(tlTransferTx.rawTx) await wait() @@ -338,8 +338,8 @@ describe('e2e', () => { (tlTransferEvents[0] as NetworkTransferEvent).paymentRequestId ).to.equal(paymentRequestId) expect( - (tlTransferEvents[0] as NetworkTransferEvent).messageId - ).to.equal(tlTransferMessageId) + (tlTransferEvents[0] as NetworkTransferEvent).transferId + ).to.equal(tlTransferTransferId) // events thrown on deposit const depositEvents = allEvents.filter( @@ -564,7 +564,7 @@ describe('e2e', () => { 'paymentRequestId', paymentRequestId ) - expect(transferEvent).to.have.property('messageId') + expect(transferEvent).to.have.property('transferId') expect(transferEvent.blockHash).to.be.a('string') expect(transferEvent.logIndex).be.a('number') diff --git a/tests/e2e/Messaging.test.ts b/tests/e2e/Messaging.test.ts index 3acad261..f600cefb 100644 --- a/tests/e2e/Messaging.test.ts +++ b/tests/e2e/Messaging.test.ts @@ -99,7 +99,7 @@ describe('e2e', () => { 'test message' ) expect(sentPaymentMessage.type).to.equal('PaymentMessage') - expect(sentPaymentMessage.messageId).to.equal('0x10') + expect(sentPaymentMessage.transferId).to.equal('0x10') expect(sentPaymentMessage.subject).to.equal('test message') }) }) @@ -177,7 +177,7 @@ describe('e2e', () => { it('should receive payment message', async () => { expect(messages[4]).to.have.property('type', 'PaymentMessage') expect(messages[4].timestamp).to.be.a('number') - expect(messages[4].messageId).to.be.a('string') + expect(messages[4].transferId).to.be.a('string') expect(messages[4]).to.have.property('subject', 'payment message') }) diff --git a/tests/e2e/Payment.test.ts b/tests/e2e/Payment.test.ts index 7ffcef5f..4ae58204 100644 --- a/tests/e2e/Payment.test.ts +++ b/tests/e2e/Payment.test.ts @@ -125,7 +125,7 @@ describe('e2e', () => { const options = { feePayer: FeePayer.Sender, extraData, - addMessageId: false + addTransferId: false } const pathObj = await tl1.payment.getTransferPathInfo( network.address, @@ -154,7 +154,7 @@ describe('e2e', () => { 'maxFees', 'path', 'receiverAddress', - 'messageId' + 'transferId' ) expect(preparedPayment.feePayer).to.equal(FeePayer.Sender) }) @@ -166,7 +166,7 @@ describe('e2e', () => { 2.25, { extraData, - addMessageId: false + addTransferId: false } ) expect(preparedPayment).to.have.all.keys( @@ -176,7 +176,7 @@ describe('e2e', () => { 'maxFees', 'path', 'receiverAddress', - 'messageId' + 'transferId' ) expect(preparedPayment.feePayer).to.equal(FeePayer.Sender) }) @@ -197,7 +197,7 @@ describe('e2e', () => { 'maxFees', 'path', 'receiverAddress', - 'messageId' + 'transferId' ) expect(preparedPayment.feePayer).to.equal(FeePayer.Receiver) }) @@ -219,7 +219,7 @@ describe('e2e', () => { 'maxFees', 'path', 'receiverAddress', - 'messageId' + 'transferId' ) expect(preparedPayment.feePayer).to.equal(FeePayer.Sender) }) @@ -324,7 +324,7 @@ describe('e2e', () => { 1, { extraData, - addMessageId: false + addTransferId: false } ) const txHash = await tl1.payment.confirm(rawTx) @@ -348,7 +348,7 @@ describe('e2e', () => { describe('confirm with message', () => { const messages = [] let stream - let messageId: string + let transferId: string const paymentMessage = 'test message' before(async () => { @@ -365,7 +365,7 @@ describe('e2e', () => { user2.address, 1 ) - messageId = preparedPayment.messageId + transferId = preparedPayment.transferId const txHash = await tl1.payment.confirmPayment( preparedPayment, paymentMessage @@ -378,7 +378,7 @@ describe('e2e', () => { // We expect to have messages for `WebsocketOpen` and then the payment message expect(messages).to.have.lengthOf(2) expect(messages[1]).to.have.property('type', 'PaymentMessage') - expect(messages[1]).to.have.property('messageId', messageId) + expect(messages[1]).to.have.property('transferId', transferId) expect(messages[1]).to.have.property('subject', paymentMessage) }) @@ -389,7 +389,7 @@ describe('e2e', () => { }) describe('#get()', () => { - let messageId: string + let transferId: string before(async () => { const preparedPayment = await tl1.payment.prepare( @@ -398,10 +398,10 @@ describe('e2e', () => { 1.5, { paymentRequestId, - addMessageId: true + addTransferId: true } ) - messageId = preparedPayment.messageId + transferId = preparedPayment.transferId await tl1.payment.confirm(preparedPayment.rawTx) await wait() }) @@ -421,7 +421,7 @@ describe('e2e', () => { expect(latestTransfer.amount.value).to.equal('1.5') expect(latestTransfer.extraData).to.be.a('string') expect(latestTransfer.paymentRequestId).to.equal(paymentRequestId) - expect(latestTransfer.messageId).to.equal(messageId) + expect(latestTransfer.transferId).to.equal(transferId) expect(latestTransfer.blockNumber).to.be.a('number') expect(latestTransfer.direction).to.equal('sent') expect(latestTransfer.networkAddress).to.be.a('string') @@ -441,7 +441,7 @@ describe('e2e', () => { user3.address, transferValue, { - addMessageId: true, + addTransferId: true, paymentRequestId } ) @@ -463,7 +463,7 @@ describe('e2e', () => { 'feesPaid', 'extraData', 'paymentRequestId', - 'messageId' + 'transferId' ) expect(transferDetails.path).to.be.an('Array') expect(transferDetails.path).to.deep.equal([ @@ -492,7 +492,7 @@ describe('e2e', () => { ) expect(transferDetails.extraData).to.be.a('string') expect(transferDetails.paymentRequestId).to.equal(paymentRequestId) - expect(transferDetails.messageId).to.equal(transfer.messageId) + expect(transferDetails.transferId).to.equal(transfer.transferId) }) it('should return details for transfer via id', async () => { @@ -504,7 +504,7 @@ describe('e2e', () => { transferValue, { extraData, - addMessageId: false + addTransferId: false } ) await tl1.payment.confirm(transfer.rawTx) @@ -527,7 +527,7 @@ describe('e2e', () => { 'feesPaid', 'extraData', 'paymentRequestId', - 'messageId' + 'transferId' ) expect(transferDetails.path).to.be.an('Array') expect(transferDetails.path).to.deep.equal([ @@ -556,7 +556,7 @@ describe('e2e', () => { ) expect(transferDetails.extraData).to.equal('0x12ab34ef') expect(transferDetails.paymentRequestId).to.be.a('null') - expect(transferDetails.messageId).to.be.a('null') + expect(transferDetails.transferId).to.be.a('null') }) }) diff --git a/tests/unit/extraData.test.ts b/tests/unit/extraData.test.ts index 402a45b6..fed27b39 100644 --- a/tests/unit/extraData.test.ts +++ b/tests/unit/extraData.test.ts @@ -11,17 +11,17 @@ describe('unit', () => { ) }) - it('should encode and decode messageId correctly', () => { - const extraData = { messageId: '0x1234567890abcdef' } - expect(extraData.messageId).to.be.deep.eq( - decode(encode(extraData)).messageId + it('should encode and decode transferId correctly', () => { + const extraData = { transferId: '0x1234567890abcdef' } + expect(extraData.transferId).to.be.deep.eq( + decode(encode(extraData)).transferId ) }) it('should encode and decode combined extra data correctly', () => { const extraData = { paymentRequestId: '0x1212343456567878', - messageId: '0x1234567890abcdef' + transferId: '0x1234567890abcdef' } expect(extraData).to.be.deep.eq(decode(encode(extraData))) })