From ad1e9b1aa34d22eb79f8632044ceabd4da1bfed2 Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Fri, 5 Jun 2026 12:00:40 +0300 Subject: [PATCH 01/15] Use queue event names in main service --- workers/api.framework.report.wrk.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/workers/api.framework.report.wrk.js b/workers/api.framework.report.wrk.js index 1fe06a69..e21646ca 100644 --- a/workers/api.framework.report.wrk.js +++ b/workers/api.framework.report.wrk.js @@ -39,6 +39,9 @@ const { PDFBufferUnderElectronCreationError, PDFBufferUnderFrameworkCreationError } = require('@bitfinex/bfx-report/workers/loc.api/errors') +const QUEUE_EVENT_NAMES = require( + '@bitfinex/bfx-report/workers/loc.api/queue/queue.event.names' +) const appDeps = require('./loc.api/di/app.deps') const TYPES = require('./loc.api/di/types') @@ -208,7 +211,7 @@ class WrkReportFrameWorkApi extends WrkReportServiceApi { await wsTransport.start() - processorQueue.on('error:base', (err, job) => { + processorQueue.on(QUEUE_EVENT_NAMES.ERROR_BASE, (err, job) => { if ( !(err instanceof PDFBufferUnderElectronCreationError) && !(err instanceof PDFBufferUnderFrameworkCreationError) @@ -223,7 +226,7 @@ class WrkReportFrameWorkApi extends WrkReportServiceApi { this.logger.error(`WS_EVENT_EMITTER:REPORT_FILE_FAILED: ${err.stack || err}`) }) }) - aggregatorQueue.on('completed', (res) => { + aggregatorQueue.on(QUEUE_EVENT_NAMES.COMPLETED, (res) => { const { reportFilesMetadata, csvFilesMetadata, // For compatibility with old implementation From 9f79f843573ec20f96138cf9feb47262fc874175 Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Fri, 5 Jun 2026 12:01:56 +0300 Subject: [PATCH 02/15] Use queue event names in full-snapshot-report writer --- .../csv-writer/full-snapshot-report-csv-writer.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/workers/loc.api/generate-report-file/csv-writer/full-snapshot-report-csv-writer.js b/workers/loc.api/generate-report-file/csv-writer/full-snapshot-report-csv-writer.js index c306d6c8..89a66fa6 100644 --- a/workers/loc.api/generate-report-file/csv-writer/full-snapshot-report-csv-writer.js +++ b/workers/loc.api/generate-report-file/csv-writer/full-snapshot-report-csv-writer.js @@ -9,6 +9,9 @@ const { const { omitExtraParamFieldsForReportExport } = require('@bitfinex/bfx-report/workers/loc.api/generate-report-file/helpers') +const QUEUE_EVENT_NAMES = require( + '@bitfinex/bfx-report/workers/loc.api/queue/queue.event.names' +) module.exports = ( rService, @@ -29,7 +32,7 @@ module.exports = ( ...args?.params } - queue.emit('progress', 0) + queue.emit(QUEUE_EVENT_NAMES.PROGRESS, 0) if (typeof jobData === 'string') { await streamWriter( @@ -40,7 +43,7 @@ module.exports = ( }] ) - queue.emit('progress', 100) + queue.emit(QUEUE_EVENT_NAMES.PROGRESS, 100) return } @@ -173,5 +176,5 @@ module.exports = ( ] ) - queue.emit('progress', 100) + queue.emit(QUEUE_EVENT_NAMES.PROGRESS, 100) } From 850ed47a2e9bc0d960c055193cf6e3344519ffb8 Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Fri, 5 Jun 2026 12:02:19 +0300 Subject: [PATCH 03/15] Use queue event names in full-tax-report writer --- .../csv-writer/full-tax-report-csv-writer.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/workers/loc.api/generate-report-file/csv-writer/full-tax-report-csv-writer.js b/workers/loc.api/generate-report-file/csv-writer/full-tax-report-csv-writer.js index 862adf8e..58f568ff 100644 --- a/workers/loc.api/generate-report-file/csv-writer/full-tax-report-csv-writer.js +++ b/workers/loc.api/generate-report-file/csv-writer/full-tax-report-csv-writer.js @@ -9,6 +9,9 @@ const { const { omitExtraParamFieldsForReportExport } = require('@bitfinex/bfx-report/workers/loc.api/generate-report-file/helpers') +const QUEUE_EVENT_NAMES = require( + '@bitfinex/bfx-report/workers/loc.api/queue/queue.event.names' +) module.exports = ( rService, @@ -30,7 +33,7 @@ module.exports = ( ...args?.params } - queue.emit('progress', 0) + queue.emit(QUEUE_EVENT_NAMES.PROGRESS, 0) if (typeof jobData === 'string') { await streamWriter( @@ -41,7 +44,7 @@ module.exports = ( }] ) - queue.emit('progress', 100) + queue.emit(QUEUE_EVENT_NAMES.PROGRESS, 100) return } @@ -206,5 +209,5 @@ module.exports = ( ] ) - queue.emit('progress', 100) + queue.emit(QUEUE_EVENT_NAMES.PROGRESS, 100) } From 7d65c98f840e50c1befd0a20e84f648d0ba2b942 Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Fri, 5 Jun 2026 12:02:54 +0300 Subject: [PATCH 04/15] Use queue event names in trx-tax-report writer --- .../csv-writer/transaction-tax-report-csv-writer.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/workers/loc.api/generate-report-file/csv-writer/transaction-tax-report-csv-writer.js b/workers/loc.api/generate-report-file/csv-writer/transaction-tax-report-csv-writer.js index 40f55e18..9b6bfa13 100644 --- a/workers/loc.api/generate-report-file/csv-writer/transaction-tax-report-csv-writer.js +++ b/workers/loc.api/generate-report-file/csv-writer/transaction-tax-report-csv-writer.js @@ -12,6 +12,9 @@ const TRANSLATION_NAMESPACES = require( const { omitExtraParamFieldsForReportExport } = require('@bitfinex/bfx-report/workers/loc.api/generate-report-file/helpers') +const QUEUE_EVENT_NAMES = require( + '@bitfinex/bfx-report/workers/loc.api/queue/queue.event.names' +) module.exports = ( rService, @@ -35,7 +38,7 @@ module.exports = ( } const { language } = params ?? - queue.emit('progress', 0) + queue.emit(QUEUE_EVENT_NAMES.PROGRESS, 0) if (typeof jobData === 'string') { await streamWriter( @@ -46,7 +49,7 @@ module.exports = ( }] ) - queue.emit('progress', 100) + queue.emit(QUEUE_EVENT_NAMES.PROGRESS, 100) return } @@ -108,5 +111,5 @@ ${i18next.t('template.delistedCcyMessageEnd', transOpts)}\ csvStreamDataMap ) - queue.emit('progress', 100) + queue.emit(QUEUE_EVENT_NAMES.PROGRESS, 100) } From 7168d8b9666f8987846b162f49cb990b273efa6c Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Mon, 15 Jun 2026 11:49:56 +0300 Subject: [PATCH 05/15] Add captcha-providers endpoint support --- workers/loc.api/http.request/index.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/workers/loc.api/http.request/index.js b/workers/loc.api/http.request/index.js index 50b65363..fefb6494 100644 --- a/workers/loc.api/http.request/index.js +++ b/workers/loc.api/http.request/index.js @@ -56,6 +56,11 @@ class ExpandedRESTv2 extends RESTv2 { return makeRequestToBFX(() => this ._makePublicPostRequest('/login/verify', body)) } + + async getCaptchaProviders (body) { + return makeRequestToBFX(() => this + ._makePublicPostRequest('/int/captcha/providers', body)) + } } decorateInjectable(HTTPRequest, depsTypes) From 62824efc56a71c76fefc2c8ac45e8e64b55aa53f Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Mon, 15 Jun 2026 11:50:22 +0300 Subject: [PATCH 06/15] Add getCaptchaProviders method to main service --- workers/loc.api/service.report.framework.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/workers/loc.api/service.report.framework.js b/workers/loc.api/service.report.framework.js index feb95f69..b24074a6 100644 --- a/workers/loc.api/service.report.framework.js +++ b/workers/loc.api/service.report.framework.js @@ -99,6 +99,13 @@ class FrameworkReportService extends ReportService { }, 'verifyOnBFX', args, cb) } + getCaptchaProviders (space, args, cb) { + return this._responder(() => { + return this._httpRequest.getRequest() + .getCaptchaProviders(args?.params) + }, 'getCaptchaProviders', args, cb) + } + isStagingBfxApi (space, args, cb) { return this._responder(() => { return this._authenticator.isStagingBfxApi() From f5bc60a56f5a6cb391542e6ec9b46fd9845defc7 Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Mon, 15 Jun 2026 11:50:44 +0300 Subject: [PATCH 07/15] Mock captcha_providers endpoint --- test/helpers/helpers.mock-rest-v2.js | 4 +++- test/helpers/mock-data.js | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/test/helpers/helpers.mock-rest-v2.js b/test/helpers/helpers.mock-rest-v2.js index 8b892fee..41b75eca 100644 --- a/test/helpers/helpers.mock-rest-v2.js +++ b/test/helpers/helpers.mock-rest-v2.js @@ -50,13 +50,15 @@ const getMockDataOpts = () => ({ delete_token: null, login: null, login_verify: null, + captcha_providers: null, platform_status: null }) const getExtraMockMethods = () => (new Map([ ['post', { '/v2/login': 'login', - '/v2/login/verify': 'login_verify' + '/v2/login/verify': 'login_verify', + '/v2/int/captcha/providers': 'captcha_providers' }] ])) diff --git a/test/helpers/mock-data.js b/test/helpers/mock-data.js index 66de8e8f..fb3ee097 100644 --- a/test/helpers/mock-data.js +++ b/test/helpers/mock-data.js @@ -25,6 +25,10 @@ module.exports = new Map([ '2023-03-21T12:00:00.000Z' ] ], + [ + 'captcha_providers', + ['hcaptcha'] + ], [ 'generate_token', ['pub:api:88888888-4444-4444-4444-121212121212-caps:s:o:f:w:wd:a-write'] From 63d3eb48bf23f62993239a88ddb76801e5defbb5 Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Mon, 15 Jun 2026 11:51:02 +0300 Subject: [PATCH 08/15] Add test coverage for getCaptchaProviders method --- .../api-sync-mode-sqlite-test-cases.js | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/test-cases/api-sync-mode-sqlite-test-cases.js b/test/test-cases/api-sync-mode-sqlite-test-cases.js index b83f3c38..03d77dc2 100644 --- a/test/test-cases/api-sync-mode-sqlite-test-cases.js +++ b/test/test-cases/api-sync-mode-sqlite-test-cases.js @@ -175,6 +175,26 @@ module.exports = ( assert.isString(res.body.result[1]) }) + it('it should be successfully performed by the getCaptchaProviders method', async function () { + this.timeout(5000) + + const res = await agent + .post(`${basePath}/json-rpc`) + .type('json') + .send({ + method: 'getCaptchaProviders', + id: 5 + }) + .expect('Content-Type', /json/) + .expect(200) + + assert.isObject(res.body) + assert.propertyVal(res.body, 'id', 5) + assert.isArray(res.body.result) + assert.isString(res.body.result[0]) + assert.strictEqual(res.body.result[0], 'hcaptcha') + }) + it('it should be successfully performed by the signIn method', async function () { this.timeout(5000) From 6fc35871d3c7baae91f8d470b845abb69a92751a Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Mon, 15 Jun 2026 11:52:07 +0300 Subject: [PATCH 09/15] Add captcha-required endpoint support --- workers/loc.api/http.request/index.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/workers/loc.api/http.request/index.js b/workers/loc.api/http.request/index.js index fefb6494..15a20535 100644 --- a/workers/loc.api/http.request/index.js +++ b/workers/loc.api/http.request/index.js @@ -61,6 +61,11 @@ class ExpandedRESTv2 extends RESTv2 { return makeRequestToBFX(() => this ._makePublicPostRequest('/int/captcha/providers', body)) } + + async isCaptchaRequired (body) { + return makeRequestToBFX(() => this + ._makePublicPostRequest('/int/captcha/required', body)) + } } decorateInjectable(HTTPRequest, depsTypes) From 14e7ff7b5bc05abe51b9c4749e96153b77ec4812 Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Mon, 15 Jun 2026 11:52:28 +0300 Subject: [PATCH 10/15] Add isCaptchaRequired method to main service --- workers/loc.api/service.report.framework.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/workers/loc.api/service.report.framework.js b/workers/loc.api/service.report.framework.js index b24074a6..77fecdcd 100644 --- a/workers/loc.api/service.report.framework.js +++ b/workers/loc.api/service.report.framework.js @@ -106,6 +106,13 @@ class FrameworkReportService extends ReportService { }, 'getCaptchaProviders', args, cb) } + isCaptchaRequired (space, args, cb) { + return this._responder(() => { + return this._httpRequest.getRequest() + .isCaptchaRequired(args?.params) + }, 'isCaptchaRequired', args, cb) + } + isStagingBfxApi (space, args, cb) { return this._responder(() => { return this._authenticator.isStagingBfxApi() From 6a34dc83812f6a87a971a41ee320a6b8ca6051e8 Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Mon, 15 Jun 2026 12:13:15 +0300 Subject: [PATCH 11/15] Mock captcha_required endpoint --- test/helpers/helpers.mock-rest-v2.js | 4 +++- test/helpers/mock-data.js | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/test/helpers/helpers.mock-rest-v2.js b/test/helpers/helpers.mock-rest-v2.js index 41b75eca..6a3857fa 100644 --- a/test/helpers/helpers.mock-rest-v2.js +++ b/test/helpers/helpers.mock-rest-v2.js @@ -51,6 +51,7 @@ const getMockDataOpts = () => ({ login: null, login_verify: null, captcha_providers: null, + captcha_required: null, platform_status: null }) @@ -58,7 +59,8 @@ const getExtraMockMethods = () => (new Map([ ['post', { '/v2/login': 'login', '/v2/login/verify': 'login_verify', - '/v2/int/captcha/providers': 'captcha_providers' + '/v2/int/captcha/providers': 'captcha_providers', + '/v2/int/captcha/required': 'captcha_required' }] ])) diff --git a/test/helpers/mock-data.js b/test/helpers/mock-data.js index fb3ee097..44313c85 100644 --- a/test/helpers/mock-data.js +++ b/test/helpers/mock-data.js @@ -29,6 +29,10 @@ module.exports = new Map([ 'captcha_providers', ['hcaptcha'] ], + [ + 'captcha_required', + true + ], [ 'generate_token', ['pub:api:88888888-4444-4444-4444-121212121212-caps:s:o:f:w:wd:a-write'] From 2c79254eaab1819ba5c390ebf0536168328b0d3f Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Mon, 15 Jun 2026 12:13:33 +0300 Subject: [PATCH 12/15] Add test coverage for isCaptchaRequired method --- .../api-sync-mode-sqlite-test-cases.js | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/test/test-cases/api-sync-mode-sqlite-test-cases.js b/test/test-cases/api-sync-mode-sqlite-test-cases.js index 03d77dc2..d41baded 100644 --- a/test/test-cases/api-sync-mode-sqlite-test-cases.js +++ b/test/test-cases/api-sync-mode-sqlite-test-cases.js @@ -195,6 +195,28 @@ module.exports = ( assert.strictEqual(res.body.result[0], 'hcaptcha') }) + it('it should be successfully performed by the isCaptchaRequired method', async function () { + this.timeout(5000) + + const res = await agent + .post(`${basePath}/json-rpc`) + .type('json') + .send({ + method: 'isCaptchaRequired', + params: { + method: 'login' + }, + id: 5 + }) + .expect('Content-Type', /json/) + .expect(200) + + assert.isObject(res.body) + assert.propertyVal(res.body, 'id', 5) + assert.isBoolean(res.body.result) + assert.isOk(res.body.result) + }) + it('it should be successfully performed by the signIn method', async function () { this.timeout(5000) From 63f16e08cab78597b47af302be7227bd51d9c8b9 Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Wed, 17 Jun 2026 12:03:30 +0300 Subject: [PATCH 13/15] Bump version up to 5.3.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index aae41fc2..a59dd92d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@bitfinex/bfx-reports-framework", - "version": "5.2.1", + "version": "5.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@bitfinex/bfx-reports-framework", - "version": "5.2.1", + "version": "5.3.0", "license": "Apache-2.0", "dependencies": { "@bitfinex/bfx-facs-db-better-sqlite": "git+https://github.com/bitfinexcom/bfx-facs-db-better-sqlite.git", diff --git a/package.json b/package.json index 934a4406..4cd039f6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@bitfinex/bfx-reports-framework", - "version": "5.2.1", + "version": "5.3.0", "description": "Bitfinex reports framework", "main": "worker.js", "engines": { From dd8c7f73acd05bfa234674d4b88495d4911e9518 Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Thu, 18 Jun 2026 10:27:55 +0300 Subject: [PATCH 14/15] Update @bitfinex/bfx-report dep --- package-lock.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index a59dd92d..3a7b30bf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -234,8 +234,8 @@ } }, "node_modules/@bitfinex/bfx-report": { - "version": "5.2.1", - "resolved": "git+ssh://git@github.com/bitfinexcom/bfx-report.git#c07b646d9493660c18a554448f2831cb4718d5bf", + "version": "5.2.2", + "resolved": "git+ssh://git@github.com/bitfinexcom/bfx-report.git#83ab7eed8a44361a94205a8e7895d03b3e61cc07", "license": "Apache-2.0", "dependencies": { "@bitfinex/bfx-facs-deflate": "git+https://github.com/bitfinexcom/bfx-facs-deflate.git", From d70755117e9acf8549b625a347afbf69f67224cc Mon Sep 17 00:00:00 2001 From: Vladimir Voronkov Date: Thu, 18 Jun 2026 10:29:11 +0300 Subject: [PATCH 15/15] Update bfx-report-ui sub-module --- bfx-report-ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bfx-report-ui b/bfx-report-ui index 8dfdab80..078a7037 160000 --- a/bfx-report-ui +++ b/bfx-report-ui @@ -1 +1 @@ -Subproject commit 8dfdab804b0b78740ec304d60820a2d6c69bd3b8 +Subproject commit 078a70373b3d31d8d637e1713f0f8d141d4739ca