From 79f63ad82974230eabdae20f59f5945b932388a3 Mon Sep 17 00:00:00 2001 From: malsomesh9 Date: Mon, 6 Apr 2026 12:02:45 +0530 Subject: [PATCH] Fix incorrect code snippet for transfer+private message (#104) --- server/package-lock.json | 4 +- server/src/controllers/tokens.ts | 26 +++++++----- server/test/tokens.template.test.ts | 61 ++++++++++++++++++++++++++--- 3 files changed, 74 insertions(+), 17 deletions(-) diff --git a/server/package-lock.json b/server/package-lock.json index 35ae4e9..476ff07 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -1,12 +1,12 @@ { "name": "firefly-sandbox-server", - "version": "1.1.3", + "version": "1.1.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "firefly-sandbox-server", - "version": "1.1.3", + "version": "1.1.7", "license": "ISC", "dependencies": { "@hyperledger/firefly-sdk": "^1.3.0", diff --git a/server/src/controllers/tokens.ts b/server/src/controllers/tokens.ts index 87d959f..f7ade3e 100644 --- a/server/src/controllers/tokens.ts +++ b/server/src/controllers/tokens.ts @@ -286,6 +286,7 @@ export class TokensTemplateController { header: { tag: <%= tag ? ${q('tag')} : 'undefined' %>, topics: <%= topic ? ('[' + ${q('topic')} + ']') : 'undefined' %>, + type: <%= messagingMethod === 'private' ? "'transfer_private'" : "'transfer_broadcast'" %>, },<% if(messagingMethod === 'private') { %> group: { members: [<% for (const r of recipients) { %> @@ -336,6 +337,7 @@ export class TokensTemplateController { header: { tag: <%= tag ? ${q('tag')} : 'undefined' %>, topics: <%= topic ? ('[' + ${q('topic')} + ']') : 'undefined' %>, + type: 'transfer_broadcast', }, data: [{ id: data.id }], }<% } else { %> @@ -343,6 +345,7 @@ export class TokensTemplateController { header: { tag: <%= tag ? ${q('tag')} : 'undefined' %>, topics: <%= topic ? ('[' + ${q('topic')} + ']') : 'undefined' %>, + type: 'transfer_private', }, group: { members: [<%= recipients.map((r) => '{ identity: ' + ${q('r')} + ' }').join(', ') %>], @@ -366,6 +369,7 @@ export class TokensTemplateController { header: { tag: <%= tag ? ${q('tag')} : 'undefined' %>, topics: <%= topic ? ('[' + ${q('topic')} + ']') : 'undefined' %>, + type: <%= messagingMethod === 'private' ? "'transfer_private'" : "'transfer_broadcast'" %>, },<% if(messagingMethod === 'private') { %> group: { members: [<% for (const r of recipients) { %> @@ -411,11 +415,12 @@ export class TokensTemplateController { amount: <%= ${q('amount')} %>,<% if (tokenIndex) { %> <% print('tokenIndex: ' + ${q( 'tokenIndex', - )} + ',') } %>,<% if(messagingMethod === 'broadcast') { %> + )}) } %>,<% if(messagingMethod === 'broadcast') { %> message: { header: { tag: <%= tag ? ${q('tag')} : 'undefined' %>, topics: <%= topic ? ('[' + ${q('topic')} + ']') : 'undefined' %>, + type: 'transfer_broadcast', }, data: [{ id: data.id }], }<% } else { %> @@ -423,6 +428,7 @@ export class TokensTemplateController { header: { tag: <%= tag ? ${q('tag')} : 'undefined' %>, topics: <%= topic ? ('[' + ${q('topic')} + ']') : 'undefined' %>, + type: 'transfer_private', }, group: { members: [<%= recipients.map((r) => '{ identity: ' + ${q('r')} + ' }').join(', ') %>], @@ -447,6 +453,7 @@ export class TokensTemplateController { header: { tag: <%= tag ? ${q('tag')} : 'undefined' %>, topics: <%= topic ? ('[' + ${q('topic')} + ']') : 'undefined' %>, + type: <%= messagingMethod === 'private' ? "'transfer_private'" : "'transfer_broadcast'" %>, },<% if(messagingMethod === 'private') { %> group: { members: [<% for (const r of recipients) { %> @@ -464,13 +471,12 @@ export class TokensTemplateController { truncate: true, })} : ${q('value')}%> } - <% } else { %> - { value: <%= jsonValue ? ${q('jsonValue', { - isObject: true, - truncate: true, - })} : ${q('value')}%> } - <%} - %>], + <% } else { %> + { value: <%= jsonValue ? ${q('jsonValue', { + isObject: true, + truncate: true, + })} : ${q('value')}%> } + <% } %>], } <% } %> }); @@ -492,11 +498,12 @@ export class TokensTemplateController { amount: <%= ${q('amount')} %>,<% if (tokenIndex) { %> <% print('tokenIndex: ' + ${q( 'tokenIndex', - )} + ',') } %>,<% if(messagingMethod === 'broadcast') { %> + )}) } %>,<% if(messagingMethod === 'broadcast') { %> message: { header: { tag: <%= tag ? ${q('tag')} : 'undefined' %>, topics: <%= topic ? ('[' + ${q('topic')} + ']') : 'undefined' %>, + type: 'transfer_broadcast', }, data: [{ id: data.id }], }<% } else { %> @@ -504,6 +511,7 @@ export class TokensTemplateController { header: { tag: <%= tag ? ${q('tag')} : 'undefined' %>, topics: <%= topic ? ('[' + ${q('topic')} + ']') : 'undefined' %>, + type: 'transfer_private', }, group: { members: [<%= recipients.map((r) => '{ identity: ' + ${q('r')} + ' }').join(', ') %>], diff --git a/server/test/tokens.template.test.ts b/server/test/tokens.template.test.ts index af7dde7..c8547f5 100644 --- a/server/test/tokens.template.test.ts +++ b/server/test/tokens.template.test.ts @@ -114,6 +114,7 @@ describe('Templates: Tokens', () => { header: { tag: 'test-tag', topics: ['test-topic'], + type: 'transfer_broadcast', }, data: [{ id: data.id }], } @@ -165,7 +166,7 @@ describe('Templates: Tokens', () => { tag: 'test-tag', topic: 'test-topic', filename: 'document.pdf', - }), + }).replace(/\s+/g, ' '), ).toBe( formatTemplate(` const data = await firefly.uploadDataBlob( @@ -177,16 +178,17 @@ describe('Templates: Tokens', () => { const transfer = await firefly.burnTokens({ pool: 'pool1', amount: '1', - tokenIndex: '1',, + tokenIndex: '1', message: { header: { tag: 'test-tag', topics: ['test-topic'], + type: 'transfer_broadcast', }, data: [{ id: data.id }], } }); - return { type: 'token_transfer', id: transfer.localId };`), + return { type: 'token_transfer', id: transfer.localId };`).replace(/\s+/g, ' '), ); }); }); @@ -235,7 +237,7 @@ describe('Templates: Tokens', () => { tag: 'test-tag', topic: 'test-topic', filename: 'document.pdf', - }), + }).replace(/\s+/g, ' '), ).toBe( formatTemplate(` const data = await firefly.uploadDataBlob( @@ -247,17 +249,64 @@ describe('Templates: Tokens', () => { const transfer = await firefly.transferTokens({ pool: 'pool1', amount: '1', - tokenIndex: '1',, + tokenIndex: '1', message: { header: { tag: 'test-tag', topics: ['test-topic'], + type: 'transfer_broadcast', }, data: [{ id: data.id }], } }); return { type: 'token_transfer', id: transfer.localId }; - `), + `).replace(/\s+/g, ' '), + ); + }); + }); + test('Transfer template - private', () => { + return request(server) + .get('/api/tokens/template/transfer') + .expect(200) + .expect((resp) => { + const compiled = _.template(resp.body); + expect( + compiled({ + pool: 'pool1', + amount: 1, + tokenIndex: '1', + to: '0x1111', + messagingMethod: 'private', + tag: 'test-tag', + topic: 'test-topic', + value: 'hello', + jsonValue: null, + recipients: ['member1', 'member2'], + }).replace(/\s+/g, ' '), + ).toBe( + formatTemplate(` + const transfer = await firefly.transferTokens({ + pool: 'pool1', + to: '0x1111', + tokenIndex: '1', + amount: '1', + message: { + header: { + tag: 'test-tag', + topics: ['test-topic'], + type: 'transfer_private', + }, + group: { + members: [ + { identity: 'member1' }, + { identity: 'member2' }, + ], + }, + data: [ { value: 'hello' } ], + } + }); + return { type: 'token_transfer', id: transfer.localId }; + `).replace(/\s+/g, ' '), ); }); });