Skip to content

Commit

Permalink
feat: transform iso headers for test server fspiop payload (#507)
Browse files Browse the repository at this point in the history
  • Loading branch information
oderayi authored Oct 31, 2024
1 parent d32a8d9 commit 527a5d0
Show file tree
Hide file tree
Showing 9 changed files with 82 additions and 22 deletions.
4 changes: 2 additions & 2 deletions modules/api-svc/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@mojaloop/sdk-scheme-adapter-api-svc",
"version": "20.8.0-snapshot.29",
"version": "20.8.0-snapshot.30",
"description": "An adapter for connecting to Mojaloop API enabled switches.",
"main": "src/index.js",
"types": "src/index.d.ts",
Expand Down Expand Up @@ -69,7 +69,7 @@
"@mojaloop/central-services-metrics": "^12.0.8",
"@mojaloop/central-services-shared": "18.11.0",
"@mojaloop/event-sdk": "^14.1.1",
"@mojaloop/ml-schema-transformer-lib": "2.3.3",
"@mojaloop/ml-schema-transformer-lib": "2.3.4",
"@mojaloop/sdk-scheme-adapter-private-shared-lib": "workspace:^",
"@mojaloop/sdk-standard-components": "19.3.5",
"ajv": "8.17.1",
Expand Down
6 changes: 4 additions & 2 deletions modules/api-svc/src/InboundServer/middlewares.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ const {
errorMessages
} = require('@mojaloop/central-services-shared').Util.Hapi.FSPIOPHeaderValidation;
const { TransformFacades } = require('@mojaloop/ml-schema-transformer-lib');
const { transformHeadersIsoToFspiop } = require('../lib/utils');
const Config = require('../config');
const { API_TYPES } = require('../constants');

Expand Down Expand Up @@ -144,16 +145,17 @@ const assignFspiopIdentifier = () => async (ctx, next) => {
&& ctx.method.toLowerCase() !== 'delete'
) {
try {
let transformOpts = {
const transformOpts = {
headers: ctx.request.headers,
body: ctx.request.body,
params: ctx.state.path.params
};
const isError = ctx.state.path.pattern.endsWith('error');
const resourceType = ctx.state.path.pattern.split('/')[1];
const fspiopBody = (await TransformFacades.FSPIOPISO20022[resourceType][ctx.method.toLowerCase() + (isError ? 'Error' : '')](transformOpts)).body;
const fspiopHeaders = transformHeadersIsoToFspiop(ctx.request.headers);
ctx.state.transformedFspiopPayload = {
headers: ctx.request.headers,
headers: fspiopHeaders,
body: fspiopBody
};
} catch {
Expand Down
21 changes: 21 additions & 0 deletions modules/api-svc/src/lib/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,27 @@ const createAuthClient = (conf, logger) => {
});
};

const transformIsoHeader = (headerValue, headerKey) => {
if (headerKey.toLowerCase() === 'content-type' || headerKey.toLowerCase() === 'accept') {
// todo: a better implementation will be to use regex or break up the header value into tokens and then replace the necessary parts and rejoin the tokens
// for now, we are just replacing the string '.iso20022' with an empty string
return headerValue.replace('.iso20022', '');
}
return headerValue;
};

const transformHeadersIsoToFspiop = (isoHeaders) => {
const headersToTransform = ['content-type', 'accept'];
const fspiopHeaders = {};

Object.keys(isoHeaders).forEach((key) => {
fspiopHeaders[key] = headersToTransform.includes(key.toLowerCase()) ? transformIsoHeader(isoHeaders[key], key) : isoHeaders[key];
});

return fspiopHeaders;
};

module.exports = {
createAuthClient,
transformHeadersIsoToFspiop
};
20 changes: 20 additions & 0 deletions modules/api-svc/test/unit/lib/utils.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@

const { transformHeadersIsoToFspiop } = require('~/lib/utils');

describe('utils', () => {
describe('transformHeadersIsoToFspiop', () => {
it('should transform headers', () => {
const isoHeaders = {
'content-type': 'application/vnd.interoperability.iso20022.transfers+json;version=2',
'accept': 'application/vnd.interoperability.iso20022.transfers+json;version=2.0',
'date': '2021-08-23T15:00:00.000Z'
};
const fspiopHeaders = {
'content-type': 'application/vnd.interoperability.transfers+json;version=2',
'accept': 'application/vnd.interoperability.transfers+json;version=2.0',
'date': '2021-08-23T15:00:00.000Z'
};
expect(transformHeadersIsoToFspiop(isoHeaders)).toEqual(fspiopHeaders);
});
});
});
4 changes: 2 additions & 2 deletions modules/outbound-command-event-handler/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@mojaloop/sdk-scheme-adapter-outbound-command-event-handler",
"version": "0.2.20-snapshot.40",
"version": "0.2.20-snapshot.41",
"description": "Mojaloop sdk scheme adapter command event handler",
"license": "Apache-2.0",
"homepage": "https://github.com/mojaloop/sdk-scheme-adapter/",
Expand Down Expand Up @@ -59,7 +59,7 @@
"@types/convict": "^6.1.6",
"@types/express": "^5.0.0",
"@types/jest": "^29.5.14",
"@types/node": "^22.8.4",
"@types/node": "^22.8.5",
"@types/node-cache": "^4.2.5",
"@types/supertest": "^6.0.2",
"@types/swagger-ui-express": "4.1.7",
Expand Down
4 changes: 2 additions & 2 deletions modules/outbound-domain-event-handler/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@mojaloop/sdk-scheme-adapter-outbound-domain-event-handler",
"version": "0.2.20-snapshot.39",
"version": "0.2.20-snapshot.40",
"description": "mojaloop sdk scheme adapter outbound domain event handler",
"license": "Apache-2.0",
"homepage": "https://github.com/mojaloop/sdk-scheme-adapter/",
Expand Down Expand Up @@ -56,7 +56,7 @@
"@types/convict": "^6.1.6",
"@types/express": "^5.0.0",
"@types/jest": "^29.5.14",
"@types/node": "^22.8.4",
"@types/node": "^22.8.5",
"@types/node-cache": "^4.2.5",
"@types/supertest": "^6.0.2",
"@types/swagger-ui-express": "^4.1.7",
Expand Down
4 changes: 2 additions & 2 deletions modules/private-shared-lib/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@mojaloop/sdk-scheme-adapter-private-shared-lib",
"version": "0.3.20-snapshot.40",
"version": "0.3.20-snapshot.41",
"description": "SDK Scheme Adapter private shared library.",
"license": "Apache-2.0",
"homepage": "https://github.com/mojaloop/accounts-and-balances-bc/tree/main/modules/private-types",
Expand Down Expand Up @@ -38,7 +38,7 @@
},
"devDependencies": {
"@eslint/compat": "^1.2.2",
"@types/node": "^22.8.4",
"@types/node": "^22.8.5",
"@types/uuid": "^10.0.0",
"@typescript-eslint/eslint-plugin": "^8.12.2",
"@typescript-eslint/parser": "^8.12.2",
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@mojaloop/sdk-scheme-adapter",
"version": "23.6.0-snapshot.27",
"version": "23.6.0-snapshot.28",
"description": "mojaloop sdk-scheme-adapter",
"license": "Apache-2.0",
"homepage": "https://github.com/mojaloop/sdk-scheme-adapter",
Expand Down Expand Up @@ -79,7 +79,7 @@
},
"devDependencies": {
"@types/jest": "^29.5.14",
"@types/node": "^22.8.4",
"@types/node": "^22.8.5",
"@types/node-cache": "^4.2.5",
"@typescript-eslint/eslint-plugin": "^8.12.2",
"@typescript-eslint/parser": "^8.12.2",
Expand Down
37 changes: 27 additions & 10 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2447,7 +2447,24 @@ __metadata:
languageName: node
linkType: hard

"@mojaloop/ml-schema-transformer-lib@npm:2.3.3, @mojaloop/ml-schema-transformer-lib@npm:^2.3.3":
"@mojaloop/ml-schema-transformer-lib@npm:2.3.4":
version: 2.3.4
resolution: "@mojaloop/ml-schema-transformer-lib@npm:2.3.4"
dependencies:
"@mojaloop/central-services-error-handling": ^13.0.2
"@mojaloop/central-services-logger": ^11.5.1
"@mojaloop/central-services-shared": ^18.11.0
"@rollup/rollup-linux-x64-musl": 4.24.3
ilp-packet: 2.2.0
map-transform-cjs: ^0.2.0
dependenciesMeta:
"@rollup/rollup-linux-x64-musl":
optional: true
checksum: d421e7035fb3d6dde8cf4706eb4a0ad349e7ecec06ff73e87d19d32fcfa123c561383288324586cfb88825a9ba28ea1ca25ae508f39abf9e9fe7cfc9467774b8
languageName: node
linkType: hard

"@mojaloop/ml-schema-transformer-lib@npm:^2.3.3":
version: 2.3.3
resolution: "@mojaloop/ml-schema-transformer-lib@npm:2.3.3"
dependencies:
Expand Down Expand Up @@ -2513,7 +2530,7 @@ __metadata:
"@mojaloop/central-services-metrics": ^12.0.8
"@mojaloop/central-services-shared": 18.11.0
"@mojaloop/event-sdk": ^14.1.1
"@mojaloop/ml-schema-transformer-lib": 2.3.3
"@mojaloop/ml-schema-transformer-lib": 2.3.4
"@mojaloop/sdk-scheme-adapter-private-shared-lib": "workspace:^"
"@mojaloop/sdk-standard-components": 19.3.5
"@redocly/openapi-cli": ^1.0.0-beta.94
Expand Down Expand Up @@ -2573,7 +2590,7 @@ __metadata:
"@types/convict": ^6.1.6
"@types/express": ^5.0.0
"@types/jest": ^29.5.14
"@types/node": ^22.8.4
"@types/node": ^22.8.5
"@types/node-cache": ^4.2.5
"@types/supertest": ^6.0.2
"@types/swagger-ui-express": 4.1.7
Expand Down Expand Up @@ -2611,7 +2628,7 @@ __metadata:
"@types/convict": ^6.1.6
"@types/express": ^5.0.0
"@types/jest": ^29.5.14
"@types/node": ^22.8.4
"@types/node": ^22.8.5
"@types/node-cache": ^4.2.5
"@types/supertest": ^6.0.2
"@types/swagger-ui-express": ^4.1.7
Expand Down Expand Up @@ -2647,7 +2664,7 @@ __metadata:
"@mojaloop/logging-bc-public-types-lib": ^0.5.4
"@mojaloop/platform-shared-lib-messaging-types-lib": ^0.7.1
"@mojaloop/platform-shared-lib-nodejs-kafka-client-lib": 0.2.15
"@types/node": ^22.8.4
"@types/node": ^22.8.5
"@types/uuid": ^10.0.0
"@typescript-eslint/eslint-plugin": ^8.12.2
"@typescript-eslint/parser": ^8.12.2
Expand All @@ -2669,7 +2686,7 @@ __metadata:
resolution: "@mojaloop/sdk-scheme-adapter@workspace:."
dependencies:
"@types/jest": ^29.5.14
"@types/node": ^22.8.4
"@types/node": ^22.8.5
"@types/node-cache": ^4.2.5
"@typescript-eslint/eslint-plugin": ^8.12.2
"@typescript-eslint/parser": ^8.12.2
Expand Down Expand Up @@ -3748,12 +3765,12 @@ __metadata:
languageName: node
linkType: hard

"@types/node@npm:^22.8.4":
version: 22.8.4
resolution: "@types/node@npm:22.8.4"
"@types/node@npm:^22.8.5":
version: 22.8.5
resolution: "@types/node@npm:22.8.5"
dependencies:
undici-types: ~6.19.8
checksum: 1e55594ce7942e259919283e6bb9ee814f184afcd545956d95163dd3b1d4b1923dba97e0c258c5a9dd2c96b2e754fa9ae42994437a564255c8907ae7cdc25b4b
checksum: c5c3466047c2cc5f70824a89aa3873fb21abc231d7d52672ea157c01e5acbbca9831362c1d2df589f9ea10a3bdfade867ec647850d9dcf88dce7119885cb8d22
languageName: node
linkType: hard

Expand Down

0 comments on commit 527a5d0

Please sign in to comment.